@Override public DefaultConnectionFuture<Void> thenRun(Runnable action) { return adopt(delegate.thenRun(action)); }
@Override public CompletableFuture<RaftRole> start() { return super.start() .thenRun(this::truncateUncommittedEntries) .thenApply(v -> this); }
public PipelinedRedisFuture(Map<?, ? extends CompletionStage<?>> executions, Function<PipelinedRedisFuture<V>, V> converter) { CompletableFuture.allOf(executions.values().toArray(new CompletableFuture<?>[0])) .thenRun(() -> complete(converter.apply(this))).exceptionally(throwable -> { completeExceptionally(throwable); return null; }); }
@Override public CompletableFuture<PrimitivesService> start() { return primitiveRegistry.start() .thenCompose(v -> transactionService.start()) .thenRun(() -> { LOGGER.info("Started"); started.set(true); }) .thenApply(v -> this); }
@Override public CompletableFuture<UnicastService> start() { group = new NioEventLoopGroup(0, namedThreads("netty-unicast-event-nio-client-%d", log)); return bootstrap() .thenRun(() -> started.set(true)) .thenApply(v -> this); }
@Override public CompletableFuture<Void> stop() { if (started.compareAndSet(true, false)) { return provider.leave(localNode).thenRun(() -> { provider.removeListener(discoveryEventListener); }); } return CompletableFuture.completedFuture(null); } }
@Override public CompletableFuture<LogSession> connect() { return term() .thenRun(() -> changeState(PrimitiveState.CONNECTED)) .thenApply(v -> this); }
/** * Opens the service context. * * @return a future to be completed once the service context has been opened */ public CompletableFuture<Void> open() { return primaryElection.getTerm() .thenAccept(this::changeRole) .thenRun(() -> service.init(this)); }
@Override public CompletableFuture<Void> addListener(AtomicValueEventListener<byte[]> listener) { if (eventListeners.isEmpty()) { return getProxyClient().acceptBy(name(), service -> service.addListener()).thenRun(() -> eventListeners.add(listener)); } else { eventListeners.add(listener); return CompletableFuture.completedFuture(null); } }
@Override public synchronized CompletableFuture<Void> addListener(String topic, LeadershipEventListener<byte[]> listener) { if (topicListeners.isEmpty()) { return getProxyClient().acceptBy(topic, service -> service.listen()) .thenRun(() -> topicListeners.computeIfAbsent(topic, t -> Sets.newCopyOnWriteArraySet()).add(listener)); } else { topicListeners.computeIfAbsent(topic, t -> Sets.newCopyOnWriteArraySet()).add(listener); } return CompletableFuture.completedFuture(null); }
@Override public synchronized CompletableFuture<Void> addListener(LeadershipEventListener<byte[]> listener) { if (leadershipChangeListeners.isEmpty()) { return getProxyClient().acceptBy(name(), service -> service.listen()).thenRun(() -> leadershipChangeListeners.add(listener)); } else { leadershipChangeListeners.add(listener); return CompletableFuture.completedFuture(null); } }
@Override public synchronized CompletableFuture<Void> addListener(LeadershipEventListener<byte[]> listener) { return getProxyClient().acceptAll(service -> service.listen()) .thenRun(() -> leadershipChangeListeners.add(listener)); }
/** * Applies a heartbeat to the service to ensure timers can be triggered. */ private void heartbeat() { long index = context.nextIndex(); long timestamp = System.currentTimeMillis(); replicator.replicate(new HeartbeatOperation(index, timestamp)) .thenRun(() -> context.setTimestamp(timestamp)); }
/** * Updates the partition with the given metadata. */ CompletableFuture<Void> update(PartitionMetadata metadata, PartitionManagementService managementService) { if (server == null && metadata.members().contains(managementService.getMembershipService().getLocalMember().id())) { server = createServer(managementService); return server.join(metadata.members()); } else if (server != null && !metadata.members().contains(managementService.getMembershipService().getLocalMember().id())) { return server.leave().thenRun(() -> server = null); } return CompletableFuture.completedFuture(null); }
@Override public CompletableFuture<AsyncWorkQueue<byte[]>> connect() { return super.connect() .thenCompose(v -> getProxyClient().getPartition(name()).connect()) .thenRun(() -> getProxyClient().getPartition(name()).addStateChangeListener(state -> { if (state == PrimitiveState.CONNECTED && isRegistered.get()) { getProxyClient().acceptBy(name(), service -> service.register()); } })) .thenApply(v -> this); }
private void pageOutput(OutputFormat format, List<String> fieldNames) throws IOException { try (Pager pager = Pager.create(); ThreadInterruptor clientThread = new ThreadInterruptor(); Writer writer = createWriter(pager); OutputHandler handler = createOutputHandler(format, writer, fieldNames)) { if (!pager.isNullPager()) { // ignore the user pressing ctrl-C while in the pager ignoreUserInterrupt.set(true); pager.getFinishFuture().thenRun(() -> { ignoreUserInterrupt.set(false); client.close(); clientThread.interrupt(); }); } handler.processRows(client); } catch (RuntimeException | IOException e) { if (client.isClientAborted() && !(e instanceof QueryAbortedException)) { throw new QueryAbortedException(e); } throw e; } }
@Override public CompletableFuture<Void> expire(PrimaryBackupSession session) { long index = context.nextIndex(); long timestamp = System.currentTimeMillis(); return replicator.replicate(new ExpireOperation(index, timestamp, session.sessionId().id())) .thenRun(() -> { context.setTimestamp(timestamp); context.expireSession(session.sessionId().id()); }); }
@Override public CompletableFuture<P> connect() { return super.connect() .thenCompose(v -> getProxyClient().getPartition(name()).connect()) .thenRun(() -> getProxyClient().getPartition(name()).addStateChangeListener(state -> { if (state == PrimitiveState.CONNECTED && isListening()) { getProxyClient().getPartition(name()).accept(service -> service.listen()); } })) .thenApply(v -> (P) this); }
@Override public CompletableFuture<AsyncAtomicDocumentTree<byte[]>> connect() { return super.connect() .thenCompose(v -> getProxyClient().getPartition(name()).connect()) .thenRun(() -> getProxyClient().getPartition(name()).addStateChangeListener(state -> { if (state == PrimitiveState.CONNECTED && isListening()) { getProxyClient().acceptBy(name(), service -> service.listen(root())); } })).thenApply(v -> this); }