From 82875bec3b7e31fa17f09d057082f41ce7540b3b Mon Sep 17 00:00:00 2001 From: Mike Eltsufin Date: Wed, 16 Nov 2022 22:15:41 -0500 Subject: [PATCH 1/3] fix: Watchdog control lifecycle of the future, not executor --- .../java/com/google/api/gax/rpc/Watchdog.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java b/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java index 83d729933..9d04e4c1c 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java +++ b/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java @@ -34,11 +34,7 @@ import com.google.common.base.Preconditions; import java.util.Iterator; import java.util.Map.Entry; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nonnull; @@ -138,12 +134,12 @@ public void shutdown() { @Override public boolean isShutdown() { - return executor.isShutdown(); + return future.isCancelled(); } @Override public boolean isTerminated() { - return executor.isTerminated(); + return future.isDone(); } @Override @@ -153,7 +149,14 @@ public void shutdownNow() { @Override public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { - return executor.awaitTermination(duration, unit); + try { + future.get(duration, unit); + return true; + } catch (ExecutionException | CancellationException e) { + return true; + } catch (TimeoutException e) { + return false; + } } @Override From a7f978f37361cfa328b9be2d3cb42999ec258f7c Mon Sep 17 00:00:00 2001 From: Mike Eltsufin Date: Wed, 16 Nov 2022 22:45:52 -0500 Subject: [PATCH 2/3] docs: clarify WhatchdogProvider.shouldAutoClose() --- gax/src/main/java/com/google/api/gax/rpc/WatchdogProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/gax/src/main/java/com/google/api/gax/rpc/WatchdogProvider.java b/gax/src/main/java/com/google/api/gax/rpc/WatchdogProvider.java index e01ed3c20..db3fb20bb 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/WatchdogProvider.java +++ b/gax/src/main/java/com/google/api/gax/rpc/WatchdogProvider.java @@ -49,5 +49,6 @@ public interface WatchdogProvider { Watchdog getWatchdog(); + /** Return true if the watchdog should be automatically unscheduled. */ boolean shouldAutoClose(); } From b035fbf341bc1019b0e308519eee027f14faad16 Mon Sep 17 00:00:00 2001 From: Mike Eltsufin Date: Fri, 18 Nov 2022 13:21:32 -0500 Subject: [PATCH 3/3] code formatting --- gax/src/main/java/com/google/api/gax/rpc/Watchdog.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java b/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java index 9d04e4c1c..8ca97876c 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java +++ b/gax/src/main/java/com/google/api/gax/rpc/Watchdog.java @@ -34,7 +34,13 @@ import com.google.common.base.Preconditions; import java.util.Iterator; import java.util.Map.Entry; -import java.util.concurrent.*; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nonnull; @@ -57,6 +63,7 @@ * */ public final class Watchdog implements Runnable, BackgroundResource { + private static final Logger LOG = Logger.getLogger(Watchdog.class.getName()); // Dummy value to convert the ConcurrentHashMap into a Set