From b4a46b5fe1473ef63535193ee81d571d75fd40ea Mon Sep 17 00:00:00 2001 From: Sakthivel Subramanian Date: Thu, 17 Jul 2025 12:23:02 +0530 Subject: [PATCH 1/2] feat: Use multiplex sessions for RW and Partition Ops --- .../integration-regular-sessions-enabled.cfg | 12 +++++++++++- .../com/google/cloud/spanner/SessionPoolOptions.java | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.kokoro/presubmit/integration-regular-sessions-enabled.cfg b/.kokoro/presubmit/integration-regular-sessions-enabled.cfg index c845c470ebc..c2ba18efac0 100644 --- a/.kokoro/presubmit/integration-regular-sessions-enabled.cfg +++ b/.kokoro/presubmit/integration-regular-sessions-enabled.cfg @@ -35,4 +35,14 @@ env_vars: { env_vars: { key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS" value: "false" -} \ No newline at end of file +} + +env_vars: { + key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS" + value: "false" +} + +env_vars: { + key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW" + value: "false" +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java index 51a5ddccafd..605f96da74b 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java @@ -619,13 +619,13 @@ public static class Builder { // client. // Set useMultiplexedSessionForRW to true to make multiplexed session for RW operations the // default. - private boolean useMultiplexedSessionForRW = false; + private boolean useMultiplexedSessionForRW = true; // This field controls the default behavior of session management for Partitioned operations in // Java client. // Set useMultiplexedSessionPartitionedOps to true to make multiplexed session for Partitioned // operations the default. - private boolean useMultiplexedSessionPartitionedOps = false; + private boolean useMultiplexedSessionPartitionedOps = true; private Duration multiplexedSessionMaintenanceDuration = Duration.ofDays(7); private Clock poolMaintainerClock = Clock.INSTANCE; From 6e648f97463d8d70828341b476fdabe56c9e1fc4 Mon Sep 17 00:00:00 2001 From: Sakthivel Subramanian Date: Thu, 31 Jul 2025 12:21:33 +0530 Subject: [PATCH 2/2] Fix emulator tests --- .../java/com/google/cloud/spanner/it/ITDatabaseTest.java | 4 +++- .../com/google/cloud/spanner/it/ITJsonWriteReadTest.java | 7 +++---- .../test/java/com/google/cloud/spanner/it/ITWriteTest.java | 6 ++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java index b9813d512fd..b62ba392000 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java @@ -150,7 +150,9 @@ public void databaseDeletedTest() throws Exception { } } } - assertThat(notFoundException).isNotNull(); + if (!isUsingEmulator()) { + assertThat(notFoundException).isNotNull(); + } // Now get a new DatabaseClient for the database. This should now result in a valid // DatabaseClient. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java index 026e3649b2e..098f9244f55 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -132,10 +133,8 @@ public void testWriteAndReadInvalidJsonValues() throws IOException { .to(Value.json(jsonStr)) .build()))); - if (env.getTestHelper() - .getOptions() - .getSessionPoolOptions() - .getUseMultiplexedSessionForRW()) { + if (env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW() + && !isUsingEmulator()) { assertEquals(ErrorCode.INVALID_ARGUMENT, exception.getErrorCode()); } else { assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java index 5dde683bcb8..9e30efb80d8 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java @@ -1081,10 +1081,8 @@ public void incorrectType() { write(baseInsert().set("StringValue").to(1.234).build()); fail("Expected exception"); } catch (SpannerException ex) { - if (env.getTestHelper() - .getOptions() - .getSessionPoolOptions() - .getUseMultiplexedSessionForRW()) { + if (env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSessionForRW() + && !isUsingEmulator()) { assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT); } else { assertThat(ex.getErrorCode()).isEqualTo(ErrorCode.FAILED_PRECONDITION);