From e9ea3d9bacf0410ef578a9d5c2d25fcbe5955a0d Mon Sep 17 00:00:00 2001 From: Raja Khan Date: Mon, 31 Dec 2018 12:35:29 -0500 Subject: [PATCH] Spanner: closed watch-dog daemon threads spawned by Spanner client (#4263) * Fixed Issue - shutting-down WatchDog daemon threads spawned by Spanner client * Fixed Issue - shutdown watchDog daemon threads spawned by Spanner client * Minor code formatting * Fixed Kokoro code format issue --- .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/google-cloud-clients/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-clients/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 607f3fd3e41a..5469699abd63 100644 --- a/google-cloud-clients/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-clients/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -107,6 +107,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; import javax.annotation.Nullable; import org.threeten.bp.Duration; @@ -139,6 +140,8 @@ public class GapicSpannerRpc implements SpannerRpc { private final Duration checkInterval = systemProperty(PROPERTY_PERIOD_SECONDS, DEFAULT_PERIOD_SECONDS); + private final ScheduledExecutorService spannerWatchdog; + public static GapicSpannerRpc create(SpannerOptions options) { return new GapicSpannerRpc(options); } @@ -191,14 +194,15 @@ public GapicSpannerRpc(SpannerOptions options) { CredentialsProvider credentialsProvider = GrpcTransportOptions.setUpCredentialsProvider(options); + spannerWatchdog = + Executors.newSingleThreadScheduledExecutor( + new ThreadFactoryBuilder() + .setDaemon(true) + .setNameFormat("Cloud-Spanner-WatchdogProvider-%d") + .build()); WatchdogProvider watchdogProvider = InstantiatingWatchdogProvider.create() - .withExecutor( - Executors.newSingleThreadScheduledExecutor( - new ThreadFactoryBuilder() - .setDaemon(true) - .setNameFormat("Cloud-Spanner-WatchdogProvider-%d") - .build())) + .withExecutor(spannerWatchdog) .withCheckInterval(checkInterval) .withClock(NanoClock.getDefaultClock()); @@ -572,6 +576,7 @@ public void shutdown() { this.spannerStub.close(); this.instanceAdminStub.close(); this.databaseAdminStub.close(); + this.spannerWatchdog.shutdown(); } /**