Skip to content

Commit 7564c11

Browse files
authored
test: move begin() outside retry loop (#1134)
The begin() call should be before the retry loop, and not inside. The catch clause for an AbortedException should reset the transaction manager and assign the new transaction context to the original transaction context variable. Fixes #1125
1 parent 1d2f478 commit 7564c11

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

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

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -894,32 +894,34 @@ public void runAsyncWithException() throws Exception {
894894
executor.shutdown();
895895
}
896896

897+
@SuppressWarnings("resource")
897898
@Test
898899
public void testTransactionManager() {
899900
DatabaseClient client =
900901
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
901902
try (TransactionManager manager = client.transactionManager()) {
903+
TransactionContext transaction = manager.begin();
902904
while (true) {
903-
TransactionContext transaction = manager.begin();
904905
try {
905906
transaction.executeUpdate(UPDATE_STATEMENT);
906907
manager.commit();
907908
assertNotNull(manager.getCommitTimestamp());
908909
break;
909910
} catch (AbortedException e) {
910-
manager.resetForRetry();
911+
transaction = manager.resetForRetry();
911912
}
912913
}
913914
}
914915
}
915916

917+
@SuppressWarnings("resource")
916918
@Test
917919
public void testTransactionManager_returnsCommitStats() {
918920
DatabaseClient client =
919921
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
920922
try (TransactionManager manager = client.transactionManager(Options.commitStats())) {
923+
TransactionContext transaction = manager.begin();
921924
while (true) {
922-
TransactionContext transaction = manager.begin();
923925
try {
924926
transaction.buffer(Mutation.delete("FOO", Key.of("foo")));
925927
manager.commit();
@@ -928,29 +930,30 @@ public void testTransactionManager_returnsCommitStats() {
928930
assertEquals(1L, manager.getCommitResponse().getCommitStats().getMutationCount());
929931
break;
930932
} catch (AbortedException e) {
931-
manager.resetForRetry();
933+
transaction = manager.resetForRetry();
932934
}
933935
}
934936
}
935937
}
936938

939+
@SuppressWarnings("resource")
937940
@Test
938941
public void transactionManagerIsNonBlocking() throws Exception {
939942
mockSpanner.freeze();
940943
DatabaseClient client =
941944
spannerWithEmptySessionPool.getDatabaseClient(
942945
DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
943946
try (TransactionManager txManager = client.transactionManager()) {
947+
mockSpanner.unfreeze();
948+
TransactionContext transaction = txManager.begin();
944949
while (true) {
945-
mockSpanner.unfreeze();
946-
TransactionContext tx = txManager.begin();
947950
try {
948-
tx.executeUpdate(UPDATE_STATEMENT);
951+
transaction.executeUpdate(UPDATE_STATEMENT);
949952
txManager.commit();
950953
break;
951954
} catch (AbortedException e) {
952955
Thread.sleep(e.getRetryDelayInMillis());
953-
txManager.resetForRetry();
956+
transaction = txManager.resetForRetry();
954957
}
955958
}
956959
}
@@ -962,10 +965,10 @@ public void transactionManagerExecuteQueryAsync() throws Exception {
962965
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
963966
final AtomicInteger rowCount = new AtomicInteger();
964967
try (TransactionManager txManager = client.transactionManager()) {
968+
TransactionContext transaction = txManager.begin();
965969
while (true) {
966-
TransactionContext tx = txManager.begin();
967970
try {
968-
try (AsyncResultSet rs = tx.executeQueryAsync(SELECT1)) {
971+
try (AsyncResultSet rs = transaction.executeQueryAsync(SELECT1)) {
969972
rs.setCallback(
970973
executor,
971974
resultSet -> {
@@ -990,7 +993,7 @@ public void transactionManagerExecuteQueryAsync() throws Exception {
990993
break;
991994
} catch (AbortedException e) {
992995
Thread.sleep(e.getRetryDelayInMillis());
993-
txManager.resetForRetry();
996+
transaction = txManager.resetForRetry();
994997
}
995998
}
996999
}

0 commit comments

Comments
 (0)