public Map<String, T> getNodes() { return snapshot.get(); }
public byte[] get(final Object key) { return entries.get().get(key); }
public Set<Map.Entry<String, byte[]>> entrySet() { return entries.get().entrySet(); }
public TaskHistoryWriter(final String hostname, final ZooKeeperClient client, final Path backingFile) throws IOException, InterruptedException { this.hostname = hostname; this.client = client; this.backingStore = PersistentAtomicReference.create(backingFile, new TypeReference<ConcurrentMap<JobId, Deque<TaskStatusEvent>>>() { }, new Supplier<ConcurrentMap<JobId, Deque<TaskStatusEvent>>>() { @Override public ConcurrentMap<JobId, Deque<TaskStatusEvent>> get() { return Maps.newConcurrentMap(); } }); this.items = backingStore.get(); // Clean out any errant null values. Normally shouldn't have any, but we did have a few // where it happened, and this will make sure we can get out of a bad state if we get into it. final ImmutableSet<JobId> curKeys = ImmutableSet.copyOf(this.items.keySet()); for (final JobId key : curKeys) { if (this.items.get(key) == null) { this.items.remove(key); } } int itemCount = 0; for (final Deque<TaskStatusEvent> deque : items.values()) { itemCount += deque.size(); } this.count = new AtomicInteger(itemCount); }
public byte[] put(final String key, final byte[] value) throws InterruptedException { Preconditions.checkArgument(key.indexOf('/') == -1); PathUtils.validatePath(ZKPaths.makePath(path, key)); final byte[] prev; synchronized (lock) { final Map<String, byte[]> mutable = Maps.newHashMap(entries.get()); prev = mutable.put(key, value); try { entries.set(ImmutableMap.copyOf(mutable)); } catch (IOException e) { throw new RuntimeException(e); } } reactor.signal(); return prev; }
private byte[] remove(final String key) throws InterruptedException { Preconditions.checkArgument(key.indexOf('/') == -1); PathUtils.validatePath(ZKPaths.makePath(path, key)); final byte[] value; synchronized (lock) { final Map<String, byte[]> mutable = Maps.newHashMap(entries.get()); value = mutable.remove(key); try { entries.set(ImmutableMap.copyOf(mutable)); } catch (IOException e) { throw new RuntimeException(e); } } reactor.signal(); return value; }
private void incrementalUpdate() throws KeeperException { final MapDifference<String, byte[]> difference = Maps.difference(entries.get(), remote, BYTE_ARRAY_EQUIVALENCE); if (difference.areEqual()) { return; } final Map<String, byte[]> newRemote = Maps.newHashMap(remote); final Map<String, byte[]> create = difference.entriesOnlyOnLeft(); final Map<String, ValueDifference<byte[]>> update = difference.entriesDiffering(); final Map<String, byte[]> delete = difference.entriesOnlyOnRight(); log.debug("create: {}", create.keySet()); log.debug("update: {}", update.keySet()); log.debug("delete: {}", delete.keySet()); for (final Map.Entry<String, byte[]> entry : create.entrySet()) { write(entry.getKey(), entry.getValue()); newRemote.put(entry.getKey(), entry.getValue()); } for (final Map.Entry<String, ValueDifference<byte[]>> entry : update.entrySet()) { write(entry.getKey(), entry.getValue().leftValue()); newRemote.put(entry.getKey(), entry.getValue().leftValue()); } for (final Map.Entry<String, byte[]> entry : delete.entrySet()) { delete(entry.getKey()); newRemote.remove(entry.getKey()); } remote = newRemote; }
private void syncChecked() throws KeeperException { final ZooKeeperClient client = client("sync"); final List<String> nodes = client.getChildren(path); final Map<String, byte[]> snapshot = entries.get();
final Map<String, T> currentSnapshot = snapshot.get();
log.debug("executions: {}", executions.get()); log.debug("supervisors: {}", supervisors); final Map<JobId, Execution> newExecutions = Maps.newHashMap(executions.get()); for (final Entry<JobId, Task> entry : tasks.entrySet()) { final JobId jobId = entry.getKey(); if (!newExecutions.equals(executions.get())) { executions.setUnchecked(ImmutableMap.copyOf(newExecutions)); for (final Entry<JobId, Execution> entry : executions.get().entrySet()) { final JobId jobId = entry.getKey(); final Execution execution = entry.getValue(); final JobId jobId = entry.getKey(); final Supervisor supervisor = entry.getValue(); final Execution execution = executions.get().get(jobId); supervisor.setGoal(execution.getGoal()); for (final Entry<JobId, Execution> entry : executions.get().entrySet()) { final JobId jobId = entry.getKey(); final Execution execution = entry.getValue(); final Map<JobId, Execution> survivors = Maps.filterKeys(executions.get(), not(in(reapedTasks))); executions.setUnchecked(ImmutableMap.copyOf(survivors));
@Override protected void startUp() throws Exception { for (final Entry<JobId, Execution> entry : executions.get().entrySet()) { final Execution execution = entry.getValue(); final Job job = execution.getJob(); if (execution.getPorts() != null) { createSupervisor(job, execution.getPorts()); } } model.addListener(modelListener); reactor.startAsync().awaitRunning(); reactor.signal(); }
public Map<String, T> getNodes() { return snapshot.get(); }
public byte[] get(final Object key) { return entries.get().get(key); }
public Set<Map.Entry<String, byte[]>> entrySet() { return entries.get().entrySet(); }
public QueueingHistoryWriter(final ZooKeeperClient client, final Path backingFile) throws IOException, InterruptedException { this.client = checkNotNull(client, "client"); this.backingStore = PersistentAtomicReference.create( checkNotNull(backingFile, "backingFile"), new TypeReference<ConcurrentMap<String, Deque<TEvent>>>(){}, new Supplier<ConcurrentMap<String, Deque<TEvent>>>() { @Override public ConcurrentMap<String, Deque<TEvent>> get() { return Maps.newConcurrentMap(); } }); this.events = backingStore.get(); // Clean out any errant null values. Normally shouldn't have any, but we did have a few // where it happened, and this will make sure we can get out of a bad state if we get into it. final ImmutableSet<String> curKeys = ImmutableSet.copyOf(this.events.keySet()); for (final String key : curKeys) { if (this.events.get(key) == null) { this.events.remove(key); } } int eventCount = 0; for (Deque<TEvent> deque : events.values()) { eventCount += deque.size(); } this.count = new AtomicInteger(eventCount); }
public byte[] put(final String key, final byte[] value) throws InterruptedException { Preconditions.checkArgument(key.indexOf('/') == -1); PathUtils.validatePath(ZKPaths.makePath(path, key)); final byte[] prev; synchronized (lock) { final Map<String, byte[]> mutable = Maps.newHashMap(entries.get()); prev = mutable.put(key, value); try { entries.set(ImmutableMap.copyOf(mutable)); } catch (IOException e) { throw Throwables.propagate(e); } } reactor.signal(); return prev; }
private byte[] remove(final String key) throws InterruptedException { Preconditions.checkArgument(key.indexOf('/') == -1); PathUtils.validatePath(ZKPaths.makePath(path, key)); final byte[] value; synchronized (lock) { final Map<String, byte[]> mutable = Maps.newHashMap(entries.get()); value = mutable.remove(key); try { entries.set(ImmutableMap.copyOf(mutable)); } catch (IOException e) { throw Throwables.propagate(e); } } reactor.signal(); return value; }
private void incrementalUpdate() throws KeeperException { final MapDifference<String, byte[]> difference = Maps.difference(entries.get(), remote, BYTE_ARRAY_EQUIVALENCE); if (difference.areEqual()) { return; } final Map<String, byte[]> newRemote = Maps.newHashMap(remote); final Map<String, byte[]> create = difference.entriesOnlyOnLeft(); final Map<String, ValueDifference<byte[]>> update = difference.entriesDiffering(); final Map<String, byte[]> delete = difference.entriesOnlyOnRight(); log.debug("create: {}", create.keySet()); log.debug("update: {}", update.keySet()); log.debug("delete: {}", delete.keySet()); for (final Map.Entry<String, byte[]> entry : create.entrySet()) { write(entry.getKey(), entry.getValue()); newRemote.put(entry.getKey(), entry.getValue()); } for (final Map.Entry<String, ValueDifference<byte[]>> entry : update.entrySet()) { write(entry.getKey(), entry.getValue().leftValue()); newRemote.put(entry.getKey(), entry.getValue().leftValue()); } for (final Map.Entry<String, byte[]> entry : delete.entrySet()) { delete(entry.getKey()); newRemote.remove(entry.getKey()); } remote = newRemote; }
final Map<String, T> currentSnapshot = snapshot.get();
@Override protected void startUp() throws Exception { for (final Entry<JobId, Execution> entry : executions.get().entrySet()) { final Execution execution = entry.getValue(); final Job job = execution.getJob(); if (execution.getPorts() != null) { createSupervisor(job, execution.getPorts()); } } model.addListener(modelListener); reactor.startAsync().awaitRunning(); reactor.signal(); }