Skip to content

Commit c6c2c74

Browse files
committed
More retrofits
1 parent d93441a commit c6c2c74

File tree

3 files changed

+166
-10
lines changed

3 files changed

+166
-10
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ long executeStreamingPartitionedUpdate(
9393
final Duration remainingTimeout = tryUpdateTimeout(timeout, stopwatch);
9494

9595
try {
96+
System.out.println("\033[31mreqIdPump: " + reqId + "\033[00m");
9697
ServerStream<PartialResultSet> stream =
9798
rpc.executeStreamingPartitionedDml(
9899
request, reqId.withOptions(session.getOptions()), remainingTimeout);

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

Lines changed: 160 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2920,16 +2920,16 @@ public void testPartitionedDmlDoesNotTimeout() {
29202920
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
29212921
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
29222922
"google.spanner.v1.Spanner/BatchCreateSessions",
2923-
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.UNNECESSARY, 1)),
2923+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
29242924
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
29252925
"google.spanner.v1.Spanner/BatchCreateSessions",
2926-
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.UNNECESSARY, 1)),
2926+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
29272927
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
29282928
"google.spanner.v1.Spanner/BatchCreateSessions",
2929-
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.UNNECESSARY, 1)),
2929+
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
29302930
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
29312931
"google.spanner.v1.Spanner/BatchCreateSessions",
2932-
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.UNNECESSARY, 1)),
2932+
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
29332933
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
29342934
"google.spanner.v1.Spanner/BeginTransaction",
29352935
new XGoogSpannerRequestId(dbId, channelId, 6, 1)),
@@ -2972,6 +2972,36 @@ public void testPartitionedDmlWithLowerTimeout() {
29722972
.readWriteTransaction()
29732973
.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT));
29742974
assertThat(updateCount).isEqualTo(UPDATE_COUNT);
2975+
2976+
DatabaseClientImpl dbImpl = ((DatabaseClientImpl) client);
2977+
int channelId = dbImpl.getSession().getChannel();
2978+
int dbId = dbImpl.dbId;
2979+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {};
2980+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
2981+
2982+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
2983+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2984+
"google.spanner.v1.Spanner/BatchCreateSessions",
2985+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
2986+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2987+
"google.spanner.v1.Spanner/BatchCreateSessions",
2988+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
2989+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2990+
"google.spanner.v1.Spanner/BatchCreateSessions",
2991+
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
2992+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2993+
"google.spanner.v1.Spanner/BatchCreateSessions",
2994+
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
2995+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2996+
"google.spanner.v1.Spanner/BeginTransaction",
2997+
new XGoogSpannerRequestId(dbId, channelId, 6, 1)),
2998+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
2999+
"google.spanner.v1.Spanner/Commit", new XGoogSpannerRequestId(dbId, channelId, 8, 1)),
3000+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3001+
"google.spanner.v1.Spanner/ExecuteSql",
3002+
new XGoogSpannerRequestId(dbId, channelId, 7, 1)),
3003+
};
3004+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
29753005
}
29763006
}
29773007

@@ -3020,6 +3050,39 @@ public void testPartitionedDmlWithHigherTimeout() {
30203050
.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)));
30213051
assertThat(e.getErrorCode()).isEqualTo(ErrorCode.DEADLINE_EXCEEDED);
30223052
assertThat(updateCount).isEqualTo(UPDATE_COUNT);
3053+
3054+
DatabaseClientImpl dbImpl = ((DatabaseClientImpl) client);
3055+
int channelId = dbImpl.getSession().getChannel();
3056+
int dbId = dbImpl.dbId;
3057+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {
3058+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3059+
"google.spanner.v1.Spanner/ExecuteStreamingSql",
3060+
new XGoogSpannerRequestId(dbId, channelId, 5, 1)),
3061+
};
3062+
3063+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
3064+
3065+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
3066+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3067+
"google.spanner.v1.Spanner/BatchCreateSessions",
3068+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3069+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3070+
"google.spanner.v1.Spanner/BatchCreateSessions",
3071+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3072+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3073+
"google.spanner.v1.Spanner/BatchCreateSessions",
3074+
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3075+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3076+
"google.spanner.v1.Spanner/BatchCreateSessions",
3077+
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3078+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3079+
"google.spanner.v1.Spanner/BeginTransaction",
3080+
new XGoogSpannerRequestId(dbId, channelId, 6, 1)),
3081+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3082+
"google.spanner.v1.Spanner/ExecuteSql",
3083+
new XGoogSpannerRequestId(dbId, channelId, 7, 1)),
3084+
};
3085+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
30233086
}
30243087
}
30253088

@@ -3037,6 +3100,36 @@ public void testPartitionedDmlRetriesOnUnavailable() {
30373100
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
30383101
long updateCount = client.executePartitionedUpdate(UPDATE_STATEMENT);
30393102
assertThat(updateCount).isEqualTo(UPDATE_COUNT);
3103+
3104+
DatabaseClientImpl dbImpl = ((DatabaseClientImpl) client);
3105+
int channelId = dbImpl.getSession().getChannel();
3106+
int dbId = dbImpl.dbId;
3107+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {
3108+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3109+
"google.spanner.v1.Spanner/ExecuteStreamingSql",
3110+
new XGoogSpannerRequestId(dbId, channelId, 5, 1)),
3111+
};
3112+
3113+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
3114+
3115+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
3116+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3117+
"google.spanner.v1.Spanner/BatchCreateSessions",
3118+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3119+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3120+
"google.spanner.v1.Spanner/BatchCreateSessions",
3121+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3122+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3123+
"google.spanner.v1.Spanner/BatchCreateSessions",
3124+
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3125+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3126+
"google.spanner.v1.Spanner/BatchCreateSessions",
3127+
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3128+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3129+
"google.spanner.v1.Spanner/BeginTransaction",
3130+
new XGoogSpannerRequestId(dbId, channelId, 6, 1)),
3131+
};
3132+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
30403133
}
30413134
}
30423135

@@ -3444,6 +3537,31 @@ public void testNestedTransactionsUsingTwoDatabases() throws InterruptedExceptio
34443537
// All sessions should now be checked back in to the pools.
34453538
assertThat(client1.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions);
34463539
assertThat(client2.pool.getNumberOfSessionsInPool()).isEqualTo(minSessions);
3540+
3541+
int channelId = client1.getSession().getChannel();
3542+
int dbId = client1.dbId;
3543+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {};
3544+
3545+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
3546+
3547+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
3548+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3549+
"google.spanner.v1.Spanner/BatchCreateSessions",
3550+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3551+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3552+
"google.spanner.v1.Spanner/BatchCreateSessions",
3553+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3554+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3555+
"google.spanner.v1.Spanner/BatchCreateSessions",
3556+
new XGoogSpannerRequestId(dbId, 2, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3557+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3558+
"google.spanner.v1.Spanner/BatchCreateSessions",
3559+
new XGoogSpannerRequestId(dbId, 3, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
3560+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
3561+
"google.spanner.v1.Spanner/BeginTransaction",
3562+
new XGoogSpannerRequestId(dbId, channelId, 6, 1)),
3563+
};
3564+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
34473565
}
34483566

34493567
@Test
@@ -5172,7 +5290,6 @@ public <ReqT, RespT> ApiCallContext configure(
51725290

51735291
@Test
51745292
public void testRetryOnResourceExhausted() {
5175-
// MARK: Retries here.
51765293
final RetrySettings retrySettings =
51775294
RetrySettings.newBuilder()
51785295
.setInitialRpcTimeoutDuration(Duration.ofSeconds(60L))
@@ -5255,6 +5372,26 @@ public void testRetryOnResourceExhausted() {
52555372
}
52565373
}
52575374

5375+
DatabaseClientImpl dbClient = (DatabaseClientImpl) client;
5376+
int channelId = dbClient.getSession().getChannel();
5377+
int dbId = dbClient.dbId;
5378+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {
5379+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
5380+
"google.spanner.v1.Spanner/ExecuteStreamingSql",
5381+
new XGoogSpannerRequestId(dbId, 1, 5, 1)),
5382+
};
5383+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
5384+
5385+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
5386+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
5387+
"google.spanner.v1.Spanner/BatchCreateSessions",
5388+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
5389+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
5390+
"google.spanner.v1.Spanner/BatchCreateSessions",
5391+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
5392+
};
5393+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
5394+
52585395
xGoogReqIdInterceptor.assertIntegrity();
52595396
}
52605397
}
@@ -5319,7 +5456,8 @@ public void testSessionPoolExhaustedError_containsStackTraces() {
53195456
spannerException.getMessage(),
53205457
spannerException.getMessage().contains("Session was checked out from the pool at"));
53215458

5322-
SessionPool pool = ((DatabaseClientImpl) client).pool;
5459+
DatabaseClientImpl dbClient = (DatabaseClientImpl) client;
5460+
SessionPool pool = dbClient.pool;
53235461
// Verify that there are no sessions in the pool.
53245462
assertEquals(0, pool.getNumberOfSessionsInPool());
53255463
// Verify that the sessions have not (yet) been marked as in use.
@@ -5347,6 +5485,22 @@ public void testSessionPoolExhaustedError_containsStackTraces() {
53475485
}
53485486
// Closing the transactions should return the sessions to the pool.
53495487
assertEquals(4, pool.getNumberOfSessionsInPool());
5488+
5489+
int channelId = dbClient.getSession().getChannel();
5490+
int dbId = dbClient.dbId;
5491+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantStreamingValues = {};
5492+
5493+
xGoogReqIdInterceptor.checkExpectedStreamingXGoogRequestIds(wantStreamingValues);
5494+
5495+
XGoogSpannerRequestIdTest.MethodAndRequestId[] wantUnaryValues = {
5496+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
5497+
"google.spanner.v1.Spanner/BatchCreateSessions",
5498+
new XGoogSpannerRequestId(dbId, 0, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
5499+
XGoogSpannerRequestIdTest.ofMethodAndRequestId(
5500+
"google.spanner.v1.Spanner/BatchCreateSessions",
5501+
new XGoogSpannerRequestId(dbId, 1, XGoogSpannerRequestIdTest.NON_DETERMINISTIC, 1)),
5502+
};
5503+
xGoogReqIdInterceptor.checkExpectedUnaryXGoogRequestIds(wantUnaryValues);
53505504
}
53515505
}
53525506

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
@RunWith(JUnit4.class)
4545
public class XGoogSpannerRequestIdTest {
46-
public static long UNNECESSARY = -1;
46+
public static long NON_DETERMINISTIC = -1;
4747

4848
@Test
4949
public void testEquals() {
@@ -185,7 +185,7 @@ public MethodAndRequestId[] accumulatedStreamingValues() {
185185
public void checkExpectedUnaryXGoogRequestIds(MethodAndRequestId... wantUnaryValues) {
186186
MethodAndRequestId[] gotUnaryValues = this.accumulatedUnaryValues();
187187
sortValues(gotUnaryValues);
188-
for (int i = 0; i < gotUnaryValues.length && false; i++) {
188+
for (int i = 0; i < gotUnaryValues.length; i++) {
189189
System.out.println("\033[33misUnary: #" + i + ":: " + gotUnaryValues[i] + "\033[00m");
190190
}
191191
assertEquals(wantUnaryValues, gotUnaryValues);
@@ -199,7 +199,7 @@ private void sortValues(MethodAndRequestId[] values) {
199199
public void checkExpectedStreamingXGoogRequestIds(MethodAndRequestId... wantStreamingValues) {
200200
MethodAndRequestId[] gotStreamingValues = this.accumulatedStreamingValues();
201201
sortValues(gotStreamingValues);
202-
for (int i = 0; i < gotStreamingValues.length && false; i++) {
202+
for (int i = 0; i < gotStreamingValues.length; i++) {
203203
System.out.println(
204204
"\033[32misStreaming: #" + i + ":: " + gotStreamingValues[i] + "\033[00m");
205205
}
@@ -262,7 +262,8 @@ static void massageValues(MethodAndRequestId[] mreqs) {
262262
// hence we might need to be able to scrub the nth_request that won't match
263263
// nth_req in consecutive order of nth_client.
264264
if (mreq.method.compareTo("google.spanner.v1.Spanner/BatchCreateSessions") == 0) {
265-
mreqs[i] = new MethodAndRequestId(mreq.method, mreq.requestId.withNthRequest(UNNECESSARY));
265+
mreqs[i] =
266+
new MethodAndRequestId(mreq.method, mreq.requestId.withNthRequest(NON_DETERMINISTIC));
266267
}
267268
}
268269
}

0 commit comments

Comments
 (0)