Example usage for com.google.common.util.concurrent ListenableScheduledFuture addListener

List of usage examples for com.google.common.util.concurrent ListenableScheduledFuture addListener

Introduction

In this page you can find the example usage for com.google.common.util.concurrent ListenableScheduledFuture addListener.

Prototype

void addListener(Runnable listener, Executor executor);

Source Link

Document

Registers a listener to be Executor#execute(Runnable) run on the given executor.

Usage

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();
}