Skip to content

Commit 8327f21

Browse files
authored
feat: add TransactionExecutionOptions support to executor. (#2396)
This PR adds support for TransactionExecutionOptions to Cloud Client Executor Framework.
1 parent e34084d commit 8327f21

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
import com.google.spanner.executor.v1.SpannerAsyncActionResponse;
141141
import com.google.spanner.executor.v1.StartBatchTransactionAction;
142142
import com.google.spanner.executor.v1.StartTransactionAction;
143+
import com.google.spanner.executor.v1.TransactionExecutionOptions;
143144
import com.google.spanner.executor.v1.UpdateCloudBackupAction;
144145
import com.google.spanner.executor.v1.UpdateCloudDatabaseDdlAction;
145146
import com.google.spanner.executor.v1.UpdateCloudInstanceAction;
@@ -227,13 +228,16 @@ private static class ReadWriteTransaction {
227228
private Mode finishMode;
228229
private SpannerException error;
229230
private final String transactionSeed;
231+
private final boolean optimistic;
230232
// Set to true when the transaction runner completed, one of these three could happen: runner
231233
// committed, abandoned or threw an error.
232234
private boolean runnerCompleted;
233235

234-
public ReadWriteTransaction(DatabaseClient dbClient, String transactionSeed) {
236+
public ReadWriteTransaction(
237+
DatabaseClient dbClient, String transactionSeed, boolean optimistic) {
235238
this.dbClient = dbClient;
236239
this.transactionSeed = transactionSeed;
240+
this.optimistic = optimistic;
237241
this.runnerCompleted = false;
238242
}
239243

@@ -318,7 +322,10 @@ public void startRWTransaction() throws Exception {
318322
Runnable runnable =
319323
() -> {
320324
try {
321-
runner = dbClient.readWriteTransaction();
325+
runner =
326+
optimistic
327+
? dbClient.readWriteTransaction(Options.optimisticLock())
328+
: dbClient.readWriteTransaction();
322329
LOGGER.log(Level.INFO, String.format("Ready to run callable %s\n", transactionSeed));
323330
runner.run(callable);
324331
transactionSucceeded(runner.getCommitTimestamp().toProto());
@@ -537,7 +544,8 @@ public synchronized void startReadOnlyTxn(
537544
}
538545

539546
/** Start a read-write transaction. */
540-
public synchronized void startReadWriteTxn(DatabaseClient dbClient, Metadata metadata)
547+
public synchronized void startReadWriteTxn(
548+
DatabaseClient dbClient, Metadata metadata, TransactionExecutionOptions options)
541549
throws Exception {
542550
if ((rwTxn != null) || (roTxn != null) || (batchTxn != null)) {
543551
throw SpannerExceptionFactory.newSpannerException(
@@ -548,7 +556,7 @@ public synchronized void startReadWriteTxn(DatabaseClient dbClient, Metadata met
548556
String.format(
549557
"There's no active transaction, safe to create rwTxn: %s\n", getTransactionSeed()));
550558
this.metadata = metadata;
551-
rwTxn = new ReadWriteTransaction(dbClient, transactionSeed);
559+
rwTxn = new ReadWriteTransaction(dbClient, transactionSeed, options.getOptimistic());
552560
LOGGER.log(
553561
Level.INFO,
554562
String.format(
@@ -2246,7 +2254,7 @@ private Status executeStartTxn(
22462254
Level.INFO,
22472255
"Starting read-write transaction %s\n",
22482256
executionContext.getTransactionSeed());
2249-
executionContext.startReadWriteTxn(dbClient, metadata);
2257+
executionContext.startReadWriteTxn(dbClient, metadata, action.getExecutionOptions());
22502258
}
22512259
executionContext.setDatabaseClient(dbClient);
22522260
executionContext.initReadState();

0 commit comments

Comments
 (0)