Skip to content

Commit 1b79a2c

Browse files
fix: Fix transaction tag issue with the blind-write
1 parent 2349908 commit 1b79a2c

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.cloud.spanner.SessionClient.SessionOption;
3333
import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl;
3434
import com.google.cloud.spanner.spi.v1.SpannerRpc;
35+
import com.google.common.base.Strings;
3536
import com.google.common.base.Ticker;
3637
import com.google.common.collect.Lists;
3738
import com.google.common.util.concurrent.MoreExecutors;
@@ -511,6 +512,10 @@ ApiFuture<Transaction> beginTransactionAsync(
511512
if (sessionReference.getIsMultiplexed() && mutation != null) {
512513
requestBuilder.setMutationKey(mutation);
513514
}
515+
if (sessionReference.getIsMultiplexed() && !Strings.isNullOrEmpty(transactionOptions.tag())) {
516+
requestBuilder.setRequestOptions(
517+
RequestOptions.newBuilder().setTransactionTag(transactionOptions.tag()).build());
518+
}
514519
final BeginTransactionRequest request = requestBuilder.build();
515520
final ApiFuture<Transaction> requestFuture;
516521
XGoogSpannerRequestId reqId = this.getRequestIdCreator().nextRequestId(this.getChannel(), 1);

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,6 +1898,31 @@ public void testReadWriteExecuteQueryWithTag() {
18981898
.isEqualTo("app=spanner,env=test,action=txn");
18991899
}
19001900

1901+
@Test
1902+
public void testBlindWriteWithTransactionTag() {
1903+
DatabaseClient client =
1904+
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
1905+
String transactionTag = "app=spanner,env=test,action=txn";
1906+
TransactionRunner runner = client.readWriteTransaction(Options.tag(transactionTag));
1907+
runner.run(
1908+
transaction -> {
1909+
transaction.buffer(Mutation.newInsertBuilder("abc").set("id").to(1L).build());
1910+
return null;
1911+
});
1912+
1913+
List<BeginTransactionRequest> beginTransactionRequests =
1914+
mockSpanner.getRequestsOfType(BeginTransactionRequest.class);
1915+
assertThat(beginTransactionRequests).hasSize(1);
1916+
if (isMultiplexedSessionsEnabled()) {
1917+
assertThat(beginTransactionRequests.get(0).getRequestOptions().getTransactionTag())
1918+
.isEqualTo(transactionTag);
1919+
}
1920+
List<CommitRequest> commitRequests = mockSpanner.getRequestsOfType(CommitRequest.class);
1921+
assertThat(commitRequests).hasSize(1);
1922+
assertThat(commitRequests.get(0).getRequestOptions().getTransactionTag())
1923+
.isEqualTo(transactionTag);
1924+
}
1925+
19011926
@Test
19021927
public void testReadWriteExecuteReadWithTag() {
19031928
DatabaseClient client =

0 commit comments

Comments
 (0)