Skip to content

Commit 6101800

Browse files
committed
chore(spanner): update test
1 parent 403f379 commit 6101800

File tree

1 file changed

+87
-45
lines changed

1 file changed

+87
-45
lines changed

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

Lines changed: 87 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import com.google.common.base.Stopwatch;
3838
import com.google.common.collect.ImmutableList;
3939
import com.google.protobuf.ByteString;
40-
import com.google.spanner.v1.BeginTransactionRequest;
4140
import com.google.spanner.v1.CommitRequest;
4241
import com.google.spanner.v1.ExecuteSqlRequest;
4342
import com.google.spanner.v1.RequestOptions.Priority;
@@ -480,53 +479,96 @@ public void testWriteAtLeastOnceWithExcludeTxnFromChangeStreams() {
480479
}
481480

482481
// TODO(sriharshach): Uncomment test once Lock order preservation proto is published
483-
/*
484-
@Test
485-
public void testAbortedReadWriteTxnUsesPreviousTxnIdOnRetryWithInlineBegin() throws InterruptedException {
486-
DatabaseClientImpl client =
487-
(DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d"));
488-
// Force the Commit RPC to return Aborted the first time it is called. The exception is cleared
489-
// after the first call, so the retry should succeed.
490-
mockSpanner.setCommitExecutionTime(
491-
SimulatedExecutionTime.ofException(
492-
mockSpanner.createAbortedException(ByteString.copyFromUtf8("test"))));
493-
Thread.sleep(10000);
494-
TransactionRunner runner = client.readWriteTransaction();
495-
runner.run(
496-
transaction -> {
497-
try (ResultSet resultSet =
498-
transaction.executeQuery(STATEMENT)) {
499-
while (resultSet.next()) {}
500-
}
501-
return null;
502-
});
503-
504-
List<ExecuteSqlRequest> executeSqlRequests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class);
505-
assertEquals(2, executeSqlRequests.size());
506-
507-
// Verify the requests are executed using multiplexed sessions
508-
for (ExecuteSqlRequest request : executeSqlRequests) {
509-
assertTrue(mockSpanner.getSession(request.getSession()).getMultiplexed());
510-
}
482+
/*
483+
@Test
484+
public void testAbortedReadWriteTxnUsesPreviousTxnIdOnRetryWithInlineBegin()
485+
throws InterruptedException {
486+
DatabaseClientImpl client =
487+
(DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d"));
488+
// Force the Commit RPC to return Aborted the first time it is called. The exception is cleared
489+
// after the first call, so the retry should succeed.
490+
mockSpanner.setCommitExecutionTime(
491+
SimulatedExecutionTime.ofException(
492+
mockSpanner.createAbortedException(ByteString.copyFromUtf8("test"))));
493+
Thread.sleep(10000);
494+
TransactionRunner runner = client.readWriteTransaction();
495+
AtomicReference<ByteString> validTransactionId = new AtomicReference<>();
496+
runner.run(
497+
transaction -> {
498+
try (ResultSet resultSet = transaction.executeQuery(STATEMENT)) {
499+
while (resultSet.next()) {}
500+
}
501+
502+
TransactionContextImpl impl = (TransactionContextImpl) transaction;
503+
if (validTransactionId.get() == null) {
504+
// Track the first not-null transactionId. This transaction gets ABORTED during commit
505+
// operation and gets retried.
506+
validTransactionId.set(impl.transactionId);
507+
}
508+
return null;
509+
});
510+
511+
List<ExecuteSqlRequest> executeSqlRequests =
512+
mockSpanner.getRequestsOfType(ExecuteSqlRequest.class);
513+
assertEquals(2, executeSqlRequests.size());
511514
512-
// Verify that the first request uses inline begin, and the previous transaction ID is set to ByteString.EMPTY
513-
assertTrue(executeSqlRequests.get(0).hasTransaction());
514-
assertTrue(executeSqlRequests.get(0).getTransaction().hasBegin());
515-
assertTrue(executeSqlRequests.get(0).getTransaction().getBegin().hasReadWrite());
516-
assertNotNull(executeSqlRequests.get(0).getTransaction().getBegin().getReadWrite()
517-
.getMultiplexedSessionPreviousTransactionId());
518-
assertThat(executeSqlRequests.get(0).getTransaction().getBegin().getReadWrite().getMultiplexedSessionPreviousTransactionId()).isEqualTo(ByteString.EMPTY);
519-
520-
// Verify that the second request uses inline begin, and the previous transaction ID is set appropriately
521-
assertTrue(executeSqlRequests.get(1).hasTransaction());
522-
assertTrue(executeSqlRequests.get(1).getTransaction().hasBegin());
523-
assertTrue(executeSqlRequests.get(1).getTransaction().getBegin().hasReadWrite());
524-
assertNotNull(executeSqlRequests.get(1).getTransaction().getBegin().getReadWrite()
525-
.getMultiplexedSessionPreviousTransactionId());
526-
assertThat(executeSqlRequests.get(1).getTransaction().getBegin().getReadWrite().getMultiplexedSessionPreviousTransactionId()).isNotEqualTo(ByteString.EMPTY);
515+
// Verify the requests are executed using multiplexed sessions
516+
for (ExecuteSqlRequest request : executeSqlRequests) {
517+
assertTrue(mockSpanner.getSession(request.getSession()).getMultiplexed());
527518
}
528-
*/
529519
520+
// Verify that the first request uses inline begin, and the previous transaction ID is set to
521+
// ByteString.EMPTY
522+
assertTrue(executeSqlRequests.get(0).hasTransaction());
523+
assertTrue(executeSqlRequests.get(0).getTransaction().hasBegin());
524+
assertTrue(executeSqlRequests.get(0).getTransaction().getBegin().hasReadWrite());
525+
assertNotNull(
526+
executeSqlRequests
527+
.get(0)
528+
.getTransaction()
529+
.getBegin()
530+
.getReadWrite()
531+
.getMultiplexedSessionPreviousTransactionId());
532+
assertEquals(
533+
ByteString.EMPTY,
534+
executeSqlRequests
535+
.get(0)
536+
.getTransaction()
537+
.getBegin()
538+
.getReadWrite()
539+
.getMultiplexedSessionPreviousTransactionId());
540+
541+
// Verify that the second request uses inline begin, and the previous transaction ID is set
542+
// appropriately
543+
assertTrue(executeSqlRequests.get(1).hasTransaction());
544+
assertTrue(executeSqlRequests.get(1).getTransaction().hasBegin());
545+
assertTrue(executeSqlRequests.get(1).getTransaction().getBegin().hasReadWrite());
546+
assertNotNull(
547+
executeSqlRequests
548+
.get(1)
549+
.getTransaction()
550+
.getBegin()
551+
.getReadWrite()
552+
.getMultiplexedSessionPreviousTransactionId());
553+
assertNotEquals(
554+
ByteString.EMPTY,
555+
executeSqlRequests
556+
.get(1)
557+
.getTransaction()
558+
.getBegin()
559+
.getReadWrite()
560+
.getMultiplexedSessionPreviousTransactionId());
561+
assertEquals(
562+
validTransactionId.get(),
563+
executeSqlRequests
564+
.get(1)
565+
.getTransaction()
566+
.getBegin()
567+
.getReadWrite()
568+
.getMultiplexedSessionPreviousTransactionId());
569+
}
570+
*/
571+
530572
// TODO(sriharshach): Uncomment test once Lock order preservation proto is published
531573
/*
532574
@Test

0 commit comments

Comments
 (0)