List of usage examples for com.google.common.util.concurrent ListenableScheduledFuture addListener
void addListener(Runnable listener, Executor executor);
From source file:org.onosproject.mlb.MastershipLoadBalancer.java
private void scheduleBalance() { if (isLeader.get() && nextTask.get() == null) { ListenableScheduledFuture task = executorService.schedule(mastershipAdminService::balanceRoles, 30, TimeUnit.SECONDS); task.addListener(() -> { log.info("Completed balance roles"); nextTask.set(null);/*ww w .j av a2 s .c o m*/ }, MoreExecutors.directExecutor()); if (!nextTask.compareAndSet(null, task)) { task.cancel(false); } } }
From source file:com.google.idea.common.experiments.WebExperimentSyncer.java
private void scheduleNextRefresh(boolean refreshWasSuccessful) { int delayInMinutes = refreshWasSuccessful ? SUCESSFUL_DOWNLOAD_DELAY_MINUTES : DOWNLOAD_FAILURE_DELAY_MINUTES; ListenableScheduledFuture<String> refreshResults = executor.schedule(new WebExperimentsDownloader(), delayInMinutes, TimeUnit.MINUTES); refreshResults.addListener(new WebExperimentsResultProcessor(refreshResults), MoreExecutors.sameThreadExecutor()); }
From source file:com.google.idea.blaze.base.experiments.WebExperimentSyncer.java
private void scheduleNextRefresh(boolean refreshWasSuccessful) { int delayInMinutes = refreshWasSuccessful ? SUCESSFUL_DOWNLOAD_DELAY_MINUTES : DOWNLOAD_FAILURE_DELAY_MINUTES; ListenableScheduledFuture<String> refreshResults = executor.schedule(new WebExperimentsDownloader(), delayInMinutes, TimeUnit.MINUTES); refreshResults.addListener(new WebExperimentsResultProcessor(refreshResults, true), MoreExecutors.sameThreadExecutor()); }
From source file:com.google.devtools.build.lib.remote.ByteStreamUploader.java
private void startAsyncUploadWithRetry(Chunker chunker, Retrier.Backoff backoffTimes, SettableFuture<Void> overallUploadResult) { AsyncUpload.Listener listener = new AsyncUpload.Listener() { @Override// ww w . ja va 2 s . co m public void success() { overallUploadResult.set(null); } @Override public void failure(Status status) { StatusException cause = status.asException(); long nextDelayMillis = backoffTimes.nextDelayMillis(); if (nextDelayMillis < 0 || !retrier.isRetriable(status)) { // Out of retries or status not retriable. RetryException error = new RetryException(cause, backoffTimes.getRetryAttempts()); overallUploadResult.setException(error); } else { retryAsyncUpload(nextDelayMillis, chunker, backoffTimes, overallUploadResult); } } private void retryAsyncUpload(long nextDelayMillis, Chunker chunker, Retrier.Backoff backoffTimes, SettableFuture<Void> overallUploadResult) { try { ListenableScheduledFuture<?> schedulingResult = retryService.schedule( Context.current().wrap( () -> startAsyncUploadWithRetry(chunker, backoffTimes, overallUploadResult)), nextDelayMillis, MILLISECONDS); // In case the scheduled execution errors, we need to notify the overallUploadResult. schedulingResult.addListener(() -> { try { schedulingResult.get(); } catch (Exception e) { overallUploadResult .setException(new RetryException(e, backoffTimes.getRetryAttempts())); } }, MoreExecutors.directExecutor()); } catch (RejectedExecutionException e) { // May be thrown by .schedule(...) if i.e. the executor is shutdown. overallUploadResult.setException(new RetryException(e, backoffTimes.getRetryAttempts())); } } }; try { chunker.reset(); } catch (IOException e) { overallUploadResult.setException(e); return; } AsyncUpload newUpload = new AsyncUpload(channel, callCredentials, callTimeoutSecs, instanceName, chunker, listener); overallUploadResult.addListener(() -> { if (overallUploadResult.isCancelled()) { newUpload.cancel(); } }, MoreExecutors.directExecutor()); newUpload.start(); }