List of usage examples for com.google.common.util.concurrent SettableFuture setException
@Override public boolean setException(Throwable throwable)
From source file:co.cask.cdap.common.zookeeper.ZKExtOperations.java
/** * Performs the create part as described in * {@link #updateOrCreate(ZKClient, String, Function, Codec, List)}. If the creation failed with * {@link KeeperException.NodeExistsException}, the * {@link #getAndSet(ZKClient, String, AsyncFunction, Codec, SettableFuture, List)} will be called. *///w ww. ja v a2 s. c o m private static <V> void createOrGetAndSet(final ZKClient zkClient, final String path, final AsyncFunction<V, V> modifier, final Codec<V> codec, final SettableFuture<V> resultFuture, final List<ACL> createAcl) { try { Futures.addCallback(modifier.apply(null), new FutureCallback<V>() { @Override public void onSuccess(final V content) { if (content == null) { resultFuture.set(null); return; } try { byte[] data = codec.encode(content); OperationFuture<String> future; if (createAcl == null) { future = zkClient.create(path, data, CreateMode.PERSISTENT); } else { future = zkClient.create(path, data, CreateMode.PERSISTENT, createAcl); } Futures.addCallback(future, new FutureCallback<String>() { @Override public void onSuccess(String result) { resultFuture.set(content); } @Override public void onFailure(Throwable t) { if (t instanceof KeeperException.NodeExistsException) { // If failed to create due to node exists, try to do getAndSet. getAndSet(zkClient, path, modifier, codec, resultFuture, createAcl); } else { resultFuture.setException(t); } } }, Threads.SAME_THREAD_EXECUTOR); } catch (Throwable t) { resultFuture.setException(t); } } @Override public void onFailure(Throwable t) { resultFuture.setException(t); } }, Threads.SAME_THREAD_EXECUTOR); } catch (Throwable e) { resultFuture.setException(e); } }
From source file:com.facebook.buck.distributed.ServerContentsProvider.java
/** Blocking call */ private int processFileBuffer(boolean onlyIfBufferIsFull) { Set<String> hashCodes; SettableFuture<Map<String, byte[]>> resultFuture; synchronized (multiFetchLock) { if (onlyIfBufferIsFull && hashCodesToFetch.size() < multiFetchBufferMaxSize) { return 0; }// w w w. j ava 2 s . c om if (hashCodesToFetch.isEmpty()) { return 0; } hashCodes = hashCodesToFetch; hashCodesToFetch = new HashSet<>(); resultFuture = multiFetchFuture; multiFetchFuture = SettableFuture.create(); } try { LOG.info("Fetching [%d] source files from the CAS (%s).", hashCodes.size(), onlyIfBufferIsFull ? "buffer was full" : "scheduled"); resultFuture.set(service.multiFetchSourceFiles(hashCodes)); } catch (IOException e) { LOG.error(e); resultFuture.setException(e); return 0; } return hashCodes.size(); }
From source file:com.microsoft.intellij.helpers.IDEHelperImpl.java
@NotNull @Override/*from w w w . j a va 2 s. c om*/ public ListenableFuture<String> buildArtifact(@NotNull ProjectDescriptor projectDescriptor, @NotNull ArtifactDescriptor artifactDescriptor) { try { Project project = findOpenProject(projectDescriptor); final Artifact artifact = findProjectArtifact(project, artifactDescriptor); final SettableFuture<String> future = SettableFuture.create(); Futures.addCallback(buildArtifact(project, artifact, false), new FutureCallback<Boolean>() { @Override public void onSuccess(@Nullable Boolean succeded) { if (succeded != null && succeded) { future.set(artifact.getOutputFilePath()); } else { future.setException(new AzureCmdException("An error occurred while building the artifact")); } } @Override public void onFailure(Throwable throwable) { if (throwable instanceof ExecutionException) { future.setException(new AzureCmdException("An error occurred while building the artifact", throwable.getCause())); } else { future.setException( new AzureCmdException("An error occurred while building the artifact", throwable)); } } }); return future; } catch (AzureCmdException e) { return Futures.immediateFailedFuture(e); } }
From source file:c5db.control.SimpleControlClient.java
public ListenableFuture<CommandReply> sendRequest(CommandRpcRequest<?> request, InetSocketAddress remoteAddress) { SettableFuture<CommandReply> replyMessageFuture = SettableFuture.create(); ChannelFuture connectFuture = client.connect(remoteAddress); connectFuture.addListener(new ChannelFutureListener() { @Override//from w ww .j a v a 2 s . c o m public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { future.channel().pipeline().addLast(new SimpleChannelInboundHandler<CommandReply>() { @Override protected void channelRead0(ChannelHandlerContext ctx, CommandReply msg) throws Exception { replyMessageFuture.set(msg); ctx.channel().close(); } }); // connected is fine, flush message: future.channel().writeAndFlush(request); } else { replyMessageFuture.setException(future.cause()); future.channel().close(); } } }); return replyMessageFuture; }
From source file:org.apache.bookkeeper.bookie.LedgerDescriptorImpl.java
/** * Log the fence ledger entry in Journal so that we can rebuild the state. * @param journal log the fence entry in the Journal * @return A future which will be satisfied when add entry to journal complete *//* www . j a v a2 s . c o m*/ private SettableFuture<Boolean> logFenceEntryInJournal(Journal journal) { SettableFuture<Boolean> result; synchronized (this) { result = logFenceResult = SettableFuture.create(); } ByteBuf entry = createLedgerFenceEntry(ledgerId); try { journal.logAddEntry(entry, false /* ackBeforeSync */, (rc, ledgerId, entryId, addr, ctx) -> { if (LOG.isDebugEnabled()) { LOG.debug("Record fenced state for ledger {} in journal with rc {}", ledgerId, BKException.codeLogger(rc)); } if (rc == 0) { fenceEntryPersisted.compareAndSet(false, true); result.set(true); } else { result.set(false); } }, null); } catch (InterruptedException e) { Thread.currentThread().interrupt(); result.setException(e); } return result; }
From source file:org.apache.storm.cassandra.executor.AsyncExecutor.java
/** * Asynchronously executes the specified batch statement. Inputs will be passed to * the {@link #handler} once query succeed or failed. *///from w w w.ja v a 2s . c om public SettableFuture<T> execAsync(final Statement statement, final T inputs, final AsyncResultHandler<T> handler) { final SettableFuture<T> settableFuture = SettableFuture.create(); pending.incrementAndGet(); ResultSetFuture future = session.executeAsync(statement); Futures.addCallback(future, new FutureCallback<ResultSet>() { public void release() { pending.decrementAndGet(); } @Override public void onSuccess(ResultSet result) { release(); settableFuture.set(inputs); handler.success(inputs); } @Override public void onFailure(Throwable t) { LOG.error(String.format("Failed to execute statement '%s' ", statement), t); release(); settableFuture.setException(t); handler.failure(t, inputs); } }, executorService); return settableFuture; }
From source file:io.crate.executor.transport.task.SymbolBasedUpsertByIdTask.java
private List<ListenableFuture<TaskResult>> initializeBulkShardProcessor(Settings settings) { bulkShardProcessor = new SymbolBasedBulkShardProcessor(clusterService, settings, transportShardUpsertActionDelegate, transportCreateIndexAction, node.isPartitionedTable(), false, // overwrite Duplicates node.items().size(), node.isBulkRequest() || node.updateColumns() != null, // continue on error on bulk and/or update node.updateColumns(), node.insertColumns()); if (!node.isBulkRequest()) { final SettableFuture<TaskResult> futureResult = SettableFuture.create(); List<ListenableFuture<TaskResult>> resultList = new ArrayList<>(1); resultList.add(futureResult);/*from www. j a v a 2 s. c om*/ Futures.addCallback(bulkShardProcessor.result(), new FutureCallback<BitSet>() { @Override public void onSuccess(@Nullable BitSet result) { if (result == null) { futureResult.set(TaskResult.ROW_COUNT_UNKNOWN); } else { futureResult.set(new RowCountResult(result.cardinality())); } } @Override public void onFailure(@Nonnull Throwable t) { futureResult.setException(t); } }); return resultList; } else { final int numResults = node.items().size(); final List<ListenableFuture<TaskResult>> resultList = new ArrayList<>(numResults); for (int i = 0; i < numResults; i++) { resultList.add(SettableFuture.<TaskResult>create()); } Futures.addCallback(bulkShardProcessor.result(), new FutureCallback<BitSet>() { @Override public void onSuccess(@Nullable BitSet result) { if (result == null) { setAllToFailed(null); return; } for (int i = 0; i < numResults; i++) { SettableFuture<TaskResult> future = (SettableFuture<TaskResult>) resultList.get(i); future.set(result.get(i) ? TaskResult.ONE_ROW : TaskResult.FAILURE); } } private void setAllToFailed(@Nullable Throwable throwable) { if (throwable == null) { for (ListenableFuture<TaskResult> future : resultList) { ((SettableFuture<TaskResult>) future).set(TaskResult.FAILURE); } } else { for (ListenableFuture<TaskResult> future : resultList) { ((SettableFuture<TaskResult>) future).set(RowCountResult.error(throwable)); } } } @Override public void onFailure(@Nonnull Throwable t) { setAllToFailed(t); } }); return resultList; } }
From source file:io.joynr.messaging.http.operation.LongPollingMessageReceiver.java
@Override public synchronized Future<Void> start(MessageArrivedListener messageListener, ReceiverStatusListener... receiverStatusListeners) { synchronized (shutdownSynchronizer) { if (shutdown) { throw new JoynrShutdownException("Cannot register Message Listener: " + messageListener + ": LongPollingMessageReceiver is already shutting down"); }//from ww w . j av a2s .c o m } if (isStarted()) { return Futures.immediateFailedFuture(new IllegalStateException("receiver is already started")); } final SettableFuture<Void> channelCreatedFuture = SettableFuture.create(); ReceiverStatusListener[] statusListeners = ObjectArrays.concat(new ReceiverStatusListener() { @Override // Register the ChannelUrl once the receiver is started public void receiverStarted() { if (channelMonitor.isChannelCreated()) { for (ChannelCreatedListener listener : channelCreatedListeners) { listener.channelCreated(channelMonitor.getChannelUrl()); } // Signal that the channel is now created for anyone blocking on the future channelCreatedFuture.set(null); } } @Override // Shutdown the receiver if an exception is thrown public void receiverException(Throwable e) { channelCreatedFuture.setException(e); channelMonitor.shutdown(); } }, receiverStatusListeners); channelMonitor.startLongPolling(messageListener, statusListeners); return channelCreatedFuture; }
From source file:ohmdb.flease.FleaseLease.java
private void readInternal(final SettableFuture<LeaseValue> future, final BallotNumber k) { try {//ww w . j a va2 s . c om // outgoing message: FleaseRequestMessage outMsg = FleaseRequestMessage.newBuilder() .setMessageType(FleaseRequestMessage.MessageType.READ).setLeaseId(leaseId).setK(k.getMessage()) .build(); final List<IncomingRpcReply> replies = new ArrayList<>(peers.size()); final Disposable timeout = fiber.schedule(new Runnable() { @Override public void run() { future.setException(new FleaseReadTimeoutException(replies, majority)); } }, 20, TimeUnit.SECONDS); // Send to all processes: for (long peer : peers) { OutgoingRpcRequest rpcRequest = new OutgoingRpcRequest(myId, outMsg, peer); AsyncRequest.withOneReply(fiber, sendRpcChannel, rpcRequest, new Callback<IncomingRpcReply>() { @Override public void onMessage(IncomingRpcReply message) { if (message.isNackRead()) { // even a single is a failure. if (!future.setException(new NackReadException(message))) { LOG.warn("{} read reply processing, got NackREAD but unable to set failure {}", getId(), message); } timeout.dispose(); // ditch the timeout. return; } replies.add(message); if (replies.size() >= majority) { timeout.dispose(); // cancel the timeout. checkReadReplies(replies, future); // TODO Set a timeout to actually do the work so we have a chance for more messages. // fiber.schedule(new Runnable() { // @Override // public void run() { // checkReadReplies(replies, future); // } // }, 20, TimeUnit.MILLISECONDS); } } }); } } catch (Throwable t) { future.setException(t); } }
From source file:org.apache.qpid.server.model.AbstractSystemConfig.java
protected ListenableFuture<Void> makeActive() { final EventLogger eventLogger = _eventLogger; final EventLogger startupLogger = initiateStartupLogging(); try {/*from w w w . j a v a2 s . c om*/ final Container<?> container = initiateStoreAndRecovery(); container.setEventLogger(startupLogger); final SettableFuture<Void> returnVal = SettableFuture.create(); addFutureCallback(container.openAsync(), new FutureCallback() { @Override public void onSuccess(final Object result) { State state = container.getState(); if (state == State.ACTIVE) { startupLogger.message(BrokerMessages.READY()); container.setEventLogger(eventLogger); returnVal.set(null); } else { returnVal.setException(new ServerScopedRuntimeException( "Broker failed reach ACTIVE state (state is " + state + ")")); } } @Override public void onFailure(final Throwable t) { returnVal.setException(t); } }, getTaskExecutor()); return returnVal; } catch (IOException e) { throw new IllegalArgumentException(e); } }