Skip to content

Commit 216f53e

Browse files
feat: add opt-in for using multiplexed sessions for blind writes (#3540)
* feat(spanner): Releasing Multiplexed session for blind write. * fix(spanner): Added exception for `setUseMultiplexedSessionBlindWrite` in Clirr check. Removing this is safe as it's not used by customers. * fix(spanner): Fixed unit test for multiplexed session.
1 parent 331942f commit 216f53e

File tree

6 files changed

+9
-35
lines changed

6 files changed

+9
-35
lines changed

google-cloud-spanner-executor/clirr-ignored-differences.xml

+5
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@
77
<method>CloudExecutorImpl(boolean)</method>
88
<to>CloudExecutorImpl(boolean, double)</to>
99
</difference>
10+
<difference>
11+
<differenceType>7002</differenceType>
12+
<className>com/google/cloud/spanner/SessionPoolOptionsHelper</className>
13+
<method>com.google.cloud.spanner.SessionPoolOptions$Builder setUseMultiplexedSessionBlindWrite(com.google.cloud.spanner.SessionPoolOptions$Builder, boolean)</method>
14+
</difference>
1015
</differences>

google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java

-2
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,6 @@ private synchronized Spanner getClient(long timeoutSeconds, boolean useMultiplex
830830
com.google.cloud.spanner.SessionPoolOptions.Builder poolOptionsBuilder =
831831
com.google.cloud.spanner.SessionPoolOptions.newBuilder();
832832
SessionPoolOptionsHelper.setUseMultiplexedSession(poolOptionsBuilder, useMultiplexedSession);
833-
SessionPoolOptionsHelper.setUseMultiplexedSessionBlindWrite(
834-
poolOptionsBuilder, useMultiplexedSession);
835833
SessionPoolOptionsHelper.setUseMultiplexedSessionForRW(
836834
poolOptionsBuilder, useMultiplexedSession);
837835
LOGGER.log(

google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/SessionPoolOptionsHelper.java

-8
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,6 @@ public static SessionPoolOptions.Builder setUseMultiplexedSession(
3131
return sessionPoolOptionsBuilder.setUseMultiplexedSession(useMultiplexedSession);
3232
}
3333

34-
// TODO: Remove when multiplexed session for blind write is released.
35-
public static SessionPoolOptions.Builder setUseMultiplexedSessionBlindWrite(
36-
SessionPoolOptions.Builder sessionPoolOptionsBuilder,
37-
boolean useMultiplexedSessionBlindWrite) {
38-
return sessionPoolOptionsBuilder.setUseMultiplexedSessionBlindWrite(
39-
useMultiplexedSessionBlindWrite);
40-
}
41-
4234
// TODO: Remove when multiplexed session for read write is released.
4335
public static SessionPoolOptions.Builder setUseMultiplexedSessionForRW(
4436
SessionPoolOptions.Builder sessionPoolOptionsBuilder, boolean useMultiplexedSessionForRW) {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java

+1-24
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,6 @@ public class SessionPoolOptions {
7777

7878
private final boolean useMultiplexedSession;
7979

80-
/**
81-
* Controls whether multiplexed session is enabled for blind write or not. This is only used for
82-
* systest soak. TODO: Remove when multiplexed session for blind write is released.
83-
*/
84-
private final boolean useMultiplexedSessionBlindWrite;
85-
8680
private final boolean useMultiplexedSessionForRW;
8781

8882
private final boolean useMultiplexedSessionForPartitionedOps;
@@ -122,7 +116,6 @@ private SessionPoolOptions(Builder builder) {
122116
(useMultiplexedSessionFromEnvVariable != null)
123117
? useMultiplexedSessionFromEnvVariable
124118
: builder.useMultiplexedSession;
125-
this.useMultiplexedSessionBlindWrite = builder.useMultiplexedSessionBlindWrite;
126119
// useMultiplexedSessionForRW priority => Environment var > private setter > client default
127120
Boolean useMultiplexedSessionForRWFromEnvVariable =
128121
getUseMultiplexedSessionForRWFromEnvVariable();
@@ -205,7 +198,6 @@ public int hashCode() {
205198
this.inactiveTransactionRemovalOptions,
206199
this.poolMaintainerClock,
207200
this.useMultiplexedSession,
208-
this.useMultiplexedSessionBlindWrite,
209201
this.useMultiplexedSessionForRW,
210202
this.multiplexedSessionMaintenanceDuration);
211203
}
@@ -349,7 +341,7 @@ public boolean getUseMultiplexedSession() {
349341
@VisibleForTesting
350342
@InternalApi
351343
protected boolean getUseMultiplexedSessionBlindWrite() {
352-
return getUseMultiplexedSession() && useMultiplexedSessionBlindWrite;
344+
return getUseMultiplexedSession();
353345
}
354346

355347
@VisibleForTesting
@@ -601,9 +593,6 @@ public static class Builder {
601593
// Set useMultiplexedSession to true to make multiplexed session the default.
602594
private boolean useMultiplexedSession = false;
603595

604-
// TODO: Remove when multiplexed session for blind write is released.
605-
private boolean useMultiplexedSessionBlindWrite = false;
606-
607596
// This field controls the default behavior of session management for RW operations in Java
608597
// client.
609598
// Set useMultiplexedSessionForRW to true to make multiplexed session for RW operations the
@@ -657,7 +646,6 @@ private Builder(SessionPoolOptions options) {
657646
this.randomizePositionQPSThreshold = options.randomizePositionQPSThreshold;
658647
this.inactiveTransactionRemovalOptions = options.inactiveTransactionRemovalOptions;
659648
this.useMultiplexedSession = options.useMultiplexedSession;
660-
this.useMultiplexedSessionBlindWrite = options.useMultiplexedSessionBlindWrite;
661649
this.useMultiplexedSessionForRW = options.useMultiplexedSessionForRW;
662650
this.useMultiplexedSessionPartitionedOps = options.useMultiplexedSessionForPartitionedOps;
663651
this.multiplexedSessionMaintenanceDuration = options.multiplexedSessionMaintenanceDuration;
@@ -857,17 +845,6 @@ Builder setUseMultiplexedSession(boolean useMultiplexedSession) {
857845
return this;
858846
}
859847

860-
/**
861-
* This method enables multiplexed sessions for blind writes. This method will be removed in the
862-
* future when multiplexed sessions has been made the default for all operations.
863-
*/
864-
@InternalApi
865-
@VisibleForTesting
866-
Builder setUseMultiplexedSessionBlindWrite(boolean useMultiplexedSessionBlindWrite) {
867-
this.useMultiplexedSessionBlindWrite = useMultiplexedSessionBlindWrite;
868-
return this;
869-
}
870-
871848
/**
872849
* Sets whether the client should use multiplexed session for R/W operations or not. This method
873850
* is intentionally package-private and intended for internal use.

google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClientMockServerTest.java

-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ public void createSpannerInstance() {
9393
.setSessionPoolOption(
9494
SessionPoolOptions.newBuilder()
9595
.setUseMultiplexedSession(true)
96-
.setUseMultiplexedSessionBlindWrite(true)
9796
.setUseMultiplexedSessionForRW(true)
9897
.setUseMultiplexedSessionPartitionedOps(true)
9998
// Set the maintainer to loop once every 1ms

google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -1288,6 +1288,9 @@ public void write() throws InterruptedException {
12881288

12891289
@Test
12901290
public void writeAtLeastOnce() throws InterruptedException {
1291+
assumeFalse(
1292+
"Multiplexed session do not throw a SessionNotFound errors. ",
1293+
spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession());
12911294
assertThrowsSessionNotFoundIfShouldFail(
12921295
() ->
12931296
client.writeAtLeastOnce(

0 commit comments

Comments
 (0)