From a2d9a33fa31f7467fc2bfbef5a29c4b3f5aea7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Tue, 19 May 2020 04:10:08 +0200 Subject: [PATCH] fix: partitionedDml stub was not closed (#213) The PartitionedDML stub was not closed when Spanner was closed. In addition, Spanner did not wait for the channels to actually close, causing some test cases to (sometimes) log a warning that the channel had not been closed. --- .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 001ffc1239..da3fc04c0a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -191,6 +191,12 @@ private synchronized void shutdown() { executor.shutdown(); } } + + private void awaitTermination() throws InterruptedException { + for (ScheduledExecutorService executor : executors) { + executor.awaitTermination(10L, TimeUnit.SECONDS); + } + } } private static final PathTemplate PROJECT_NAME_TEMPLATE = @@ -1230,10 +1236,22 @@ GrpcCallContext newCallContext(@Nullable Map options, String resource public void shutdown() { this.rpcIsClosed = true; this.spannerStub.close(); + this.partitionedDmlStub.close(); this.instanceAdminStub.close(); this.databaseAdminStub.close(); this.spannerWatchdog.shutdown(); this.executorProvider.shutdown(); + + try { + this.spannerStub.awaitTermination(10L, TimeUnit.SECONDS); + this.partitionedDmlStub.awaitTermination(10L, TimeUnit.SECONDS); + this.instanceAdminStub.awaitTermination(10L, TimeUnit.SECONDS); + this.databaseAdminStub.awaitTermination(10L, TimeUnit.SECONDS); + this.spannerWatchdog.awaitTermination(10L, TimeUnit.SECONDS); + this.executorProvider.awaitTermination(); + } catch (InterruptedException e) { + throw SpannerExceptionFactory.propagateInterrupt(e); + } } @Override