diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index eeb4ad51f5..f16382e835 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -92,9 +92,6 @@ private static String nextDatabaseClientId(DatabaseId databaseId) { private final CloseableExecutorProvider asyncExecutorProvider; - @GuardedBy("this") - private final List invalidatedDbClients = new ArrayList<>(); - @GuardedBy("this") private final Map sessionClients = new HashMap<>(); @@ -204,9 +201,8 @@ public DatabaseClient getDatabaseClient(DatabaseId db) { checkClosed(); String clientId = null; if (dbClients.containsKey(db) && !dbClients.get(db).pool.isValid()) { - // Move the invalidated client to a separate list, so we can close it together with the - // other database clients when the Spanner instance is closed. - invalidatedDbClients.add(dbClients.get(db)); + // Close the invalidated client and remove it. + dbClients.get(db).closeAsync(new ClosedException()); clientId = dbClients.get(db).clientId; dbClients.remove(db); } @@ -253,8 +249,7 @@ void close(long timeout, TimeUnit unit) { checkClosed(); closedException = new ClosedException(); closureFutures = new ArrayList<>(); - invalidatedDbClients.addAll(dbClients.values()); - for (DatabaseClientImpl dbClient : invalidatedDbClients) { + for (DatabaseClientImpl dbClient : dbClients.values()) { closureFutures.add(dbClient.closeAsync(closedException)); } dbClients.clear();