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