From ba5760c37071de6301b58ce98838d28b5e31b588 Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Thu, 28 Aug 2025 23:44:25 +0530 Subject: [PATCH] fix: skip session delete in case of multiplexed sessions --- .../com/google/cloud/spanner/SessionImpl.java | 6 +++ .../cloud/spanner/DatabaseClientImplTest.java | 52 ++++++++++++++----- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index bce8a8d375f..68c37561c9d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -468,12 +468,18 @@ public AsyncTransactionManagerImpl transactionManagerAsync(TransactionOption... @Override public ApiFuture asyncClose() { + if (getIsMultiplexed()) { + return com.google.api.core.ApiFutures.immediateFuture(Empty.getDefaultInstance()); + } XGoogSpannerRequestId reqId = this.getRequestIdCreator().nextRequestId(this.getChannel(), 1); return spanner.getRpc().asyncDeleteSession(getName(), reqId.withOptions(getOptions())); } @Override public void close() { + if (getIsMultiplexed()) { + return; + } ISpan span = tracer.spanBuilder(SpannerImpl.DELETE_SESSION); try (IScope s = tracer.withSpan(span)) { XGoogSpannerRequestId reqId = this.getRequestIdCreator().nextRequestId(this.getChannel(), 1); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index fa8b5c982fa..fa95c551838 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -3601,9 +3601,16 @@ public void testBackendPartitionQueryOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); - ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 2); + if (isMultiplexedSessionsEnabled()) { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ExecuteSqlRequest.class); + } else { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); + assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); + } + ExecuteSqlRequest executeSqlRequest = + (ExecuteSqlRequest) + requests.get( + isMultiplexedSessionsEnabled() ? requests.size() - 1 : requests.size() - 2); assertThat(executeSqlRequest.getQueryOptions()).isNotNull(); assertThat(executeSqlRequest.getQueryOptions().getOptimizerVersion()).isEqualTo("1"); assertThat(executeSqlRequest.getQueryOptions().getOptimizerStatisticsPackage()) @@ -3651,9 +3658,16 @@ public void testBackendPartitionQueryOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); - ExecuteSqlRequest executeSqlRequest = (ExecuteSqlRequest) requests.get(requests.size() - 2); + if (isMultiplexedSessionsEnabled()) { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ExecuteSqlRequest.class); + } else { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); + assertThat(requests.get(requests.size() - 2)).isInstanceOf(ExecuteSqlRequest.class); + } + ExecuteSqlRequest executeSqlRequest = + (ExecuteSqlRequest) + requests.get( + isMultiplexedSessionsEnabled() ? requests.size() - 1 : requests.size() - 2); assertThat(executeSqlRequest.getQueryOptions()).isNotNull(); assertThat(executeSqlRequest.getQueryOptions().getOptimizerVersion()).isEqualTo("1"); assertThat(executeSqlRequest.getQueryOptions().getOptimizerStatisticsPackage()) @@ -3697,9 +3711,16 @@ public void testBackendPartitionReadOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); - ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 2); + if (isMultiplexedSessionsEnabled()) { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ReadRequest.class); + } else { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); + assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); + } + ReadRequest readRequest = + (ReadRequest) + requests.get( + isMultiplexedSessionsEnabled() ? requests.size() - 1 : requests.size() - 2); assertThat(readRequest.getDirectedReadOptions()).isEqualTo(DIRECTED_READ_OPTIONS1); } } @@ -3740,9 +3761,16 @@ public void testBackendPartitionReadOptions() { // statistics package and directed read options. List requests = mockSpanner.getRequests(); assert requests.size() >= 2 : "required to have at least 2 requests"; - assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); - assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); - ReadRequest readRequest = (ReadRequest) requests.get(requests.size() - 2); + if (isMultiplexedSessionsEnabled()) { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(ReadRequest.class); + } else { + assertThat(requests.get(requests.size() - 1)).isInstanceOf(DeleteSessionRequest.class); + assertThat(requests.get(requests.size() - 2)).isInstanceOf(ReadRequest.class); + } + ReadRequest readRequest = + (ReadRequest) + requests.get( + isMultiplexedSessionsEnabled() ? requests.size() - 1 : requests.size() - 2); assertThat(readRequest.getDirectedReadOptions()).isEqualTo(DIRECTED_READ_OPTIONS2); } }