Skip to content

Commit df8b4c0

Browse files
feat(spanner): Updated unit tests of Partitioned operations for Multiplexed Session.
1 parent 938ef53 commit df8b4c0

File tree

7 files changed

+40
-11
lines changed

7 files changed

+40
-11
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class DatabaseClientImpl implements DatabaseClient {
3636
@VisibleForTesting final String clientId;
3737
@VisibleForTesting final SessionPool pool;
3838
@VisibleForTesting final MultiplexedSessionDatabaseClient multiplexedSessionDatabaseClient;
39-
final boolean useMultiplexedSessionPartitionedOps;
39+
@VisibleForTesting final boolean useMultiplexedSessionPartitionedOps;
4040
@VisibleForTesting final boolean useMultiplexedSessionForRW;
4141

4242
final boolean useMultiplexedSessionBlindWrite;
@@ -48,7 +48,7 @@ class DatabaseClientImpl implements DatabaseClient {
4848
pool,
4949
/* useMultiplexedSessionBlindWrite = */ false,
5050
/* multiplexedSessionDatabaseClient = */ null,
51-
/* useMultiplexedSessionPartitionedOps= */ false,
51+
/* useMultiplexedSessionPartitionedOps= */ false,
5252
tracer,
5353
/* useMultiplexedSessionForRW = */ false);
5454
}
@@ -60,7 +60,7 @@ class DatabaseClientImpl implements DatabaseClient {
6060
pool,
6161
/* useMultiplexedSessionBlindWrite = */ false,
6262
/* multiplexedSessionDatabaseClient = */ null,
63-
/* useMultiplexedSessionPartitionedOps= */ false,
63+
/* useMultiplexedSessionPartitionedOps= */ false,
6464
tracer,
6565
/* useMultiplexedSessionForRW = */ false);
6666
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import com.google.cloud.Timestamp;
2424
import com.google.cloud.spanner.DelayedReadContext.DelayedReadOnlyTransaction;
2525
import com.google.cloud.spanner.MultiplexedSessionDatabaseClient.MultiplexedSessionTransaction;
26-
import com.google.cloud.spanner.Options.UpdateOption;
2726
import com.google.cloud.spanner.Options.TransactionOption;
27+
import com.google.cloud.spanner.Options.UpdateOption;
2828
import com.google.common.util.concurrent.MoreExecutors;
2929
import java.util.concurrent.ExecutionException;
3030

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,9 @@ private static Boolean getUseMultiplexedSessionFromEnvVariable() {
360360
return parseBooleanEnvVariable("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS");
361361
}
362362

363-
private static Boolean getUseMultiplexedSessionFromEnvVariablePartitionedOps() {
363+
@VisibleForTesting
364+
@InternalApi
365+
protected static Boolean getUseMultiplexedSessionFromEnvVariablePartitionedOps() {
364366
return parseBooleanEnvVariable("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS");
365367
}
366368

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ public DatabaseClient getDatabaseClient(DatabaseId db) {
308308
pool,
309309
getOptions().getSessionPoolOptions().getUseMultiplexedSessionBlindWrite(),
310310
multiplexedSessionDatabaseClient,
311-
getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps(),
311+
getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps(),
312312
useMultiplexedSessionForRW);
313313
dbClients.put(db, dbClient);
314314
return dbClient;
@@ -329,7 +329,7 @@ DatabaseClientImpl createDatabaseClient(
329329
pool,
330330
useMultiplexedSessionBlindWrite,
331331
multiplexedSessionClient,
332-
useMultiplexedSessionPartitionedOps,
332+
useMultiplexedSessionPartitionedOps,
333333
tracer,
334334
useMultiplexedSessionForRW);
335335
}

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public final class BatchClientImplTest {
5656
private static final String SESSION_NAME = DB_NAME + "/sessions/s1";
5757
private static final ByteString TXN_ID = ByteString.copyFromUtf8("my-txn");
5858
private static final String TIMESTAMP = "2017-11-15T10:54:20Z";
59+
private static boolean isMultiplexedSession = false;
5960

6061
@Mock private SpannerRpc gapicRpc;
6162
@Mock private SpannerOptions spannerOptions;
@@ -68,6 +69,11 @@ public final class BatchClientImplTest {
6869
public static void setupOpenTelemetry() {
6970
SpannerOptions.resetActiveTracingFramework();
7071
SpannerOptions.enableOpenTelemetryTraces();
72+
Boolean useMultiplexedSessionFromEnvVariablePartitionedOps =
73+
SessionPoolOptions.getUseMultiplexedSessionFromEnvVariablePartitionedOps();
74+
isMultiplexedSession =
75+
useMultiplexedSessionFromEnvVariablePartitionedOps != null
76+
&& useMultiplexedSessionFromEnvVariablePartitionedOps;
7177
}
7278

7379
@SuppressWarnings("unchecked")
@@ -88,18 +94,31 @@ public void setUp() {
8894
when(spannerOptions.getTransportOptions()).thenReturn(transportOptions);
8995
SessionPoolOptions sessionPoolOptions = mock(SessionPoolOptions.class);
9096
when(sessionPoolOptions.getPoolMaintainerClock()).thenReturn(Clock.INSTANCE);
97+
when(sessionPoolOptions.getUseMultiplexedSessionPartitionedOps())
98+
.thenReturn(isMultiplexedSession);
9199
when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions);
92100
@SuppressWarnings("resource")
93101
SpannerImpl spanner = new SpannerImpl(gapicRpc, spannerOptions);
94-
client = new BatchClientImpl(spanner.getSessionClient(db), false);
102+
client = new BatchClientImpl(spanner.getSessionClient(db), isMultiplexedSession);
95103
}
96104

97105
@SuppressWarnings("unchecked")
98106
@Test
99107
public void testBatchReadOnlyTxnWithBound() throws Exception {
100-
Session sessionProto = Session.newBuilder().setName(SESSION_NAME).build();
101-
when(gapicRpc.createSession(eq(DB_NAME), anyString(), anyMap(), optionsCaptor.capture()))
102-
.thenReturn(sessionProto);
108+
Session sessionProto =
109+
Session.newBuilder().setName(SESSION_NAME).setMultiplexed(isMultiplexedSession).build();
110+
if (isMultiplexedSession) {
111+
when(gapicRpc.createSession(
112+
eq(DB_NAME),
113+
anyString(),
114+
anyMap(),
115+
optionsCaptor.capture(),
116+
eq(isMultiplexedSession)))
117+
.thenReturn(sessionProto);
118+
} else {
119+
when(gapicRpc.createSession(eq(DB_NAME), anyString(), anyMap(), optionsCaptor.capture()))
120+
.thenReturn(sessionProto);
121+
}
103122
com.google.protobuf.Timestamp timestamp = Timestamps.parse(TIMESTAMP);
104123
Transaction txnMetadata =
105124
Transaction.newBuilder().setId(TXN_ID).setReadTimestamp(timestamp).build();
@@ -113,12 +132,14 @@ public void testBatchReadOnlyTxnWithBound() throws Exception {
113132
assertThat(batchTxn.getReadTimestamp()).isEqualTo(t);
114133
assertThat(batchTxn.getReadTimestamp())
115134
.isEqualTo(batchTxn.getBatchTransactionId().getTimestamp());
135+
assertEquals(batchTxn.getBatchTransactionId().isMultiplexedSession(), isMultiplexedSession);
116136
}
117137

118138
@Test
119139
public void testBatchReadOnlyTxnWithTxnId() {
120140
when(txnID.getSessionId()).thenReturn(SESSION_NAME);
121141
when(txnID.getTransactionId()).thenReturn(TXN_ID);
142+
when(txnID.isMultiplexedSession()).thenReturn(isMultiplexedSession);
122143
Timestamp t = Timestamp.parseTimestamp(TIMESTAMP);
123144
when(txnID.getTimestamp()).thenReturn(t);
124145

@@ -128,6 +149,8 @@ public void testBatchReadOnlyTxnWithTxnId() {
128149
assertThat(batchTxn.getReadTimestamp()).isEqualTo(t);
129150
assertThat(batchTxn.getReadTimestamp())
130151
.isEqualTo(batchTxn.getBatchTransactionId().getTimestamp());
152+
assertThat(batchTxn.getBatchTransactionId().isMultiplexedSession())
153+
.isEqualTo(isMultiplexedSession);
131154
}
132155

133156
@Test

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void createSpannerInstance() {
9595
.setUseMultiplexedSession(true)
9696
.setUseMultiplexedSessionBlindWrite(true)
9797
.setUseMultiplexedSessionForRW(true)
98+
.setUseMultiplexedSessionPartitionedOps(true)
9899
// Set the maintainer to loop once every 1ms
99100
.setMultiplexedSessionMaintenanceLoopFrequency(Duration.ofMillis(1L))
100101
// Set multiplexed sessions to be replaced once every 1ms

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,9 @@ public void transactionManagerReadRowUsingIndexInvalidatedDuringTransaction()
12731273

12741274
@Test
12751275
public void partitionedDml() throws InterruptedException {
1276+
assumeFalse(
1277+
"Multiplexed session do not throw a SessionNotFound errors. ",
1278+
spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps());
12761279
assertThrowsSessionNotFoundIfShouldFail(
12771280
() -> client.executePartitionedUpdate(UPDATE_STATEMENT));
12781281
}

0 commit comments

Comments
 (0)