com.linkedin.parseq.zk.client.PlanLocal Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of parseq-zk-client Show documentation
Show all versions of parseq-zk-client Show documentation
Integrates ParSeq with Apache ZooKeeper Library
/*
* Copyright 2016 LinkedIn Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.linkedin.parseq.zk.client;
import com.linkedin.parseq.Task;
import com.linkedin.parseq.promise.Promises;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* A {@link Map} that is shared across {@link Task}s belong to the same plan.
*
* @author Ang Xu
*/
public final class PlanLocal {
private static final ConcurrentMap> _planLocalMap = new ConcurrentHashMap<>();
public static Task put(String key, V value) {
return Task.async("Put PlanLocal", context -> {
long id = context.getPlanId();
final Map map = _planLocalMap.computeIfAbsent(id, k -> new HashMap());
map.put(key, value);
return Promises.value(null);
});
}
public static Task get(String key, Class valueType) {
return Task.async("Get PlanLocal", context -> {
long id = context.getPlanId();
final Map map = _planLocalMap.get(id);
return Promises.value(map != null ? (V) map.get(key) : null);
});
}
public static Task remove(String key) {
return Task.async("Remove PlanLocal", context -> {
long id = context.getPlanId();
_planLocalMap.computeIfPresent(id, (k, v) -> {
v.remove(key);
return v.isEmpty() ? null : v;
});
return Promises.value(null);
});
}
}