Skip to content

Commit cb1e671

Browse files
olavloitekolea2
authored andcommitted
---
yaml --- r: 35771 b: refs/heads/autosynth-dataproc c: 4368c24 h: refs/heads/master i: 35769: 495a8a9 35767: 3ea0b11
1 parent d0d0c98 commit cb1e671

2 files changed

Lines changed: 109 additions & 63 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ refs/tags/v0.78.0: 62d4bd30605ab3578f9a08d84487fb0b33ac2ff5
165165
refs/tags/v0.79.0: 82287b570708748c411d05c40f3932cff9606feb
166166
refs/tags/v0.80.0: f745e744d38e4fe636f34d0e04795ba3d014287d
167167
refs/tags/v0.81.0: ed3a0c85339ea6b73560b9a570abfbb76b93a263
168-
refs/heads/autosynth-dataproc: ef0e16766bfd053ef4e040b012c25d17e2a34b9a
168+
refs/heads/autosynth-dataproc: 4368c24d4a834b34d6a2bb3a6a7a55e9a9660b6f
169169
refs/heads/autosynth-securitycenter: b24087060036e623e57d2454ba5dabeaf1e530c5
170170
refs/heads/autosynth-talent: 4ca901879f86aab61091cea52e8a9b653639df24
171171
refs/tags/v0.82.0: 7b9807d5d0a400c757b8905fee768be4c85eba25

branches/autosynth-dataproc/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITTransactionManagerTest.java

Lines changed: 108 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -63,85 +63,131 @@ public static void setUpDatabase() {
6363
client = env.getTestHelper().getDatabaseClient(db);
6464
}
6565

66+
@SuppressWarnings("resource")
6667
@Test
67-
public void simpleInsert() {
68-
TransactionManager manager = client.transactionManager();
69-
TransactionContext txn = manager.begin();
70-
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
71-
txn.buffer(
72-
Mutation.newInsertBuilder("T").set("K").to("Key1").set("BoolValue").to(true).build());
73-
manager.commit();
74-
assertThat(manager.getState()).isEqualTo(TransactionState.COMMITTED);
75-
Struct row = client.singleUse().readRow("T", Key.of("Key1"), Arrays.asList("K", "BoolValue"));
76-
assertThat(row.getString(0)).isEqualTo("Key1");
77-
assertThat(row.getBoolean(1)).isTrue();
68+
public void simpleInsert() throws InterruptedException {
69+
try (TransactionManager manager = client.transactionManager()) {
70+
TransactionContext txn = manager.begin();
71+
while (true) {
72+
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
73+
txn.buffer(
74+
Mutation.newInsertBuilder("T").set("K").to("Key1").set("BoolValue").to(true).build());
75+
try {
76+
manager.commit();
77+
assertThat(manager.getState()).isEqualTo(TransactionState.COMMITTED);
78+
Struct row =
79+
client.singleUse().readRow("T", Key.of("Key1"), Arrays.asList("K", "BoolValue"));
80+
assertThat(row.getString(0)).isEqualTo("Key1");
81+
assertThat(row.getBoolean(1)).isTrue();
82+
break;
83+
} catch (AbortedException e) {
84+
Thread.sleep(e.getRetryDelayInMillis() / 1000);
85+
txn = manager.resetForRetry();
86+
}
87+
}
88+
}
7889
}
7990

91+
@SuppressWarnings("resource")
8092
@Test
81-
public void invalidInsert() {
82-
TransactionManager manager = client.transactionManager();
83-
TransactionContext txn = manager.begin();
84-
txn.buffer(
85-
Mutation.newInsertBuilder("InvalidTable")
86-
.set("K")
87-
.to("Key1")
88-
.set("BoolValue")
89-
.to(true)
90-
.build());
91-
try {
92-
manager.commit();
93-
fail("Expected exception");
94-
} catch (SpannerException e) {
95-
// expected
93+
public void invalidInsert() throws InterruptedException {
94+
try (TransactionManager manager = client.transactionManager()) {
95+
TransactionContext txn = manager.begin();
96+
while (true) {
97+
txn.buffer(
98+
Mutation.newInsertBuilder("InvalidTable")
99+
.set("K")
100+
.to("Key1")
101+
.set("BoolValue")
102+
.to(true)
103+
.build());
104+
try {
105+
manager.commit();
106+
fail("Expected exception");
107+
} catch (AbortedException e) {
108+
Thread.sleep(e.getRetryDelayInMillis() / 1000);
109+
txn = manager.resetForRetry();
110+
} catch (SpannerException e) {
111+
// expected
112+
break;
113+
}
114+
}
115+
assertThat(manager.getState()).isEqualTo(TransactionState.COMMIT_FAILED);
116+
// We cannot retry for non aborted errors.
117+
expectedException.expect(IllegalStateException.class);
118+
manager.resetForRetry();
96119
}
97-
assertThat(manager.getState()).isEqualTo(TransactionState.COMMIT_FAILED);
98-
// We cannot retry for non aborted errors.
99-
expectedException.expect(IllegalStateException.class);
100-
manager.resetForRetry();
101120
}
102121

122+
@SuppressWarnings("resource")
103123
@Test
104-
public void rollback() {
105-
TransactionManager manager = client.transactionManager();
106-
TransactionContext txn = manager.begin();
107-
txn.buffer(
108-
Mutation.newInsertBuilder("T").set("K").to("Key2").set("BoolValue").to(true).build());
109-
manager.rollback();
110-
assertThat(manager.getState()).isEqualTo(TransactionState.ROLLED_BACK);
111-
// Row should not have been inserted.
112-
assertThat(client.singleUse().readRow("T", Key.of("Key2"), Arrays.asList("K", "BoolValue")))
113-
.isNull();
124+
public void rollback() throws InterruptedException {
125+
try (TransactionManager manager = client.transactionManager()) {
126+
TransactionContext txn = manager.begin();
127+
while (true) {
128+
txn.buffer(
129+
Mutation.newInsertBuilder("T").set("K").to("Key2").set("BoolValue").to(true).build());
130+
try {
131+
manager.rollback();
132+
break;
133+
} catch (AbortedException e) {
134+
Thread.sleep(e.getRetryDelayInMillis() / 1000);
135+
txn = manager.resetForRetry();
136+
}
137+
}
138+
assertThat(manager.getState()).isEqualTo(TransactionState.ROLLED_BACK);
139+
// Row should not have been inserted.
140+
assertThat(client.singleUse().readRow("T", Key.of("Key2"), Arrays.asList("K", "BoolValue")))
141+
.isNull();
142+
}
114143
}
115144

145+
@SuppressWarnings("resource")
116146
@Test
117-
public void abortAndRetry() {
147+
public void abortAndRetry() throws InterruptedException {
118148
client.write(
119149
Arrays.asList(
120150
Mutation.newInsertBuilder("T").set("K").to("Key3").set("BoolValue").to(true).build()));
121-
TransactionManager manager1 = client.transactionManager();
122-
TransactionContext txn1 = manager1.begin();
123-
txn1.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
124-
TransactionManager manager2 = client.transactionManager();
125-
TransactionContext txn2 = manager2.begin();
126-
txn2.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
151+
try (TransactionManager manager1 = client.transactionManager()) {
152+
TransactionContext txn1 = manager1.begin();
153+
TransactionManager manager2;
154+
TransactionContext txn2;
155+
while (true) {
156+
try {
157+
txn1.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
158+
manager2 = client.transactionManager();
159+
txn2 = manager2.begin();
160+
txn2.readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
127161

128-
txn1.buffer(
129-
Mutation.newUpdateBuilder("T").set("K").to("Key3").set("BoolValue").to(false).build());
130-
manager1.commit();
162+
txn1.buffer(
163+
Mutation.newUpdateBuilder("T")
164+
.set("K")
165+
.to("Key3")
166+
.set("BoolValue")
167+
.to(false)
168+
.build());
169+
manager1.commit();
170+
break;
171+
} catch (AbortedException e) {
172+
Thread.sleep(e.getRetryDelayInMillis() / 1000);
173+
txn1 = manager1.resetForRetry();
174+
}
175+
}
131176

132-
// txn2 should have been aborted.
133-
try {
177+
// txn2 should have been aborted.
178+
try {
179+
manager2.commit();
180+
fail("Expected to abort");
181+
} catch (AbortedException e) {
182+
assertThat(manager2.getState()).isEqualTo(TransactionState.ABORTED);
183+
txn2 = manager2.resetForRetry();
184+
}
185+
txn2.buffer(
186+
Mutation.newUpdateBuilder("T").set("K").to("Key3").set("BoolValue").to(true).build());
134187
manager2.commit();
135-
fail("Expected to abort");
136-
} catch (AbortedException e) {
137-
assertThat(manager2.getState()).isEqualTo(TransactionState.ABORTED);
138-
txn2 = manager2.resetForRetry();
188+
Struct row = client.singleUse().readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
189+
assertThat(row.getString(0)).isEqualTo("Key3");
190+
assertThat(row.getBoolean(1)).isTrue();
139191
}
140-
txn2.buffer(
141-
Mutation.newUpdateBuilder("T").set("K").to("Key3").set("BoolValue").to(true).build());
142-
manager2.commit();
143-
Struct row = client.singleUse().readRow("T", Key.of("Key3"), Arrays.asList("K", "BoolValue"));
144-
assertThat(row.getString(0)).isEqualTo("Key3");
145-
assertThat(row.getBoolean(1)).isTrue();
146192
}
147193
}

0 commit comments

Comments
 (0)