Skip to content

Commit bbdd857

Browse files
committed
fix: extract error details from SpannerException
1 parent 849b433 commit bbdd857

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ void appendToOptions(Options options) {
10121012
public int hashCode() {
10131013
return LastStatementUpdateOption.class.hashCode();
10141014
}
1015-
1015+
10161016
@Override
10171017
public boolean equals(Object o) {
10181018
return o instanceof LastStatementUpdateOption;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,9 @@ static ErrorDetails extractErrorDetails(Throwable cause) {
265265
if (cause instanceof ApiException) {
266266
return ((ApiException) cause).getErrorDetails();
267267
}
268+
if (cause instanceof SpannerException) {
269+
return ((SpannerException) cause).getErrorDetails();
270+
}
268271
prevCause = cause;
269272
cause = cause.getCause();
270273
}

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/RetryDmlAsPartitionedDmlMockServerTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public void testTransactionMutationLimitExceeded_isNotRetriedByDefault() {
8383
assertEquals(0, exception.getSuppressed().length);
8484
}
8585
assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class));
86+
ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
87+
assertTrue(request.getLastStatement());
8688
assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class));
8789
}
8890

@@ -108,6 +110,7 @@ public void testTransactionMutationLimitExceeded_canBeRetriedAsPDML() {
108110
ExecuteSqlRequest transactionalRequest =
109111
mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
110112
assertTrue(transactionalRequest.getTransaction().getBegin().hasReadWrite());
113+
assertTrue(transactionalRequest.getLastStatement());
111114

112115
// Partitioned DML uses an explicit BeginTransaction RPC.
113116
assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class));
@@ -117,6 +120,7 @@ public void testTransactionMutationLimitExceeded_canBeRetriedAsPDML() {
117120
ExecuteSqlRequest partitionedDmlRequest =
118121
mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(1);
119122
assertTrue(partitionedDmlRequest.getTransaction().hasId());
123+
assertFalse(partitionedDmlRequest.getLastStatement());
120124

121125
// Partitioned DML transactions are not committed.
122126
assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class));
@@ -163,6 +167,7 @@ public void testTransactionMutationLimitExceeded_retryAsPDMLFails() {
163167
ExecuteSqlRequest transactionalRequest =
164168
mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0);
165169
assertTrue(transactionalRequest.getTransaction().getBegin().hasReadWrite());
170+
assertTrue(transactionalRequest.getLastStatement());
166171

167172
// Partitioned DML uses an explicit BeginTransaction RPC.
168173
assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class));
@@ -172,6 +177,7 @@ public void testTransactionMutationLimitExceeded_retryAsPDMLFails() {
172177
ExecuteSqlRequest partitionedDmlRequest =
173178
mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(1);
174179
assertTrue(partitionedDmlRequest.getTransaction().hasId());
180+
assertFalse(partitionedDmlRequest.getLastStatement());
175181

176182
// Partitioned DML transactions are not committed.
177183
assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class));

0 commit comments

Comments
 (0)