aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-06 14:35:27 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-06 17:23:01 +0100
commit2c8d19b82de5ec4b47a5eb4ab566bbcb1725d118 (patch)
tree1d535de3b8621d827c6657edfb1eb26fa803410d /vespajlib
parentffdbd053a2b57383b2d463e8050394776b14abdf (diff)
Deprecate public APIs using Guava's ListenableFuture
Public methods: - com.yahoo.processing.rendering.Renderer.render() - com.yahoo.search.handler.HttpSearchResponse.waitableRender() - com.yahoo.processing.rendering.AsynchronousSectionedRenderer.renderBeforeHandover()
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/CompletableFutures.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/CompletableFutures.java b/vespajlib/src/main/java/com/yahoo/concurrent/CompletableFutures.java
index 2dab634d8be..35506ec4512 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/CompletableFutures.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/CompletableFutures.java
@@ -1,8 +1,14 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.concurrent;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import com.yahoo.yolean.UncheckedInterruptedException;
+
import java.util.List;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
/**
* Helper for {@link java.util.concurrent.CompletableFuture} / {@link java.util.concurrent.CompletionStage}.
@@ -64,4 +70,43 @@ public class CompletableFutures {
return combiner.combined;
}
+ /**
+ * Helper for migrating from {@link ListenableFuture} to {@link CompletableFuture> in Vespa public apis
+ * @deprecated to be removed in Vespa 8
+ */
+ @Deprecated(forRemoval = true, since = "7")
+ public static <V> ListenableFuture<V> toGuavaListenableFuture(CompletableFuture<V> future) {
+ SettableFuture<V> guavaFuture = SettableFuture.create();
+ future.whenComplete((result, error) -> {
+ if (result != null) guavaFuture.set(result);
+ else if (error instanceof CancellationException) guavaFuture.setException(error);
+ else guavaFuture.cancel(true);
+ });
+ return guavaFuture;
+ }
+
+ /**
+ * Helper for migrating from {@link ListenableFuture} to {@link CompletableFuture> in Vespa public apis
+ * @deprecated to be removed in Vespa 8
+ */
+ @Deprecated(forRemoval = true, since = "7")
+ public static <V> CompletableFuture<V> toCompletableFuture(ListenableFuture<V> guavaFuture) {
+ CompletableFuture<V> future = new CompletableFuture<>();
+ guavaFuture.addListener(
+ () -> {
+ if (guavaFuture.isCancelled()) future.cancel(true);
+ try {
+ V value = guavaFuture.get();
+ future.complete(value);
+ } catch (InterruptedException e) {
+ // Should not happens since listener is invoked after future is complete
+ throw new UncheckedInterruptedException(e);
+ } catch (ExecutionException e) {
+ future.completeExceptionally(e.getCause());
+ }
+ },
+ Runnable::run);
+ return future;
+ }
+
}