Interface TransactionRunner
TransactionContext for a description of transaction
semantics. TransactionRunner instances are obtained by calling DatabaseClient.readWriteTransaction(TransactionOption...).
A TransactionRunner instance can only be used for a single invocation of run(TransactionCallable).
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic interfaceA unit of work to be performed in the context of a transaction. -
Method Summary
Modifier and TypeMethodDescriptionAllows overriding the default behaviour of blocking nested transactions.Returns theCommitResponseof this transaction.com.google.cloud.TimestampReturns the timestamp at which the transaction committed.<T> Trun(TransactionRunner.TransactionCallable<T> callable) Executes a read-write transaction, with retries as necessary.
-
Method Details
-
run
Executes a read-write transaction, with retries as necessary. The work to perform in each transaction attempt is defined bycallable, which may return an object as the result of the work.callablewill be retried if a transaction attempt aborts; implementations must be prepared to be called more than once. Any writes buffered bycallablewill only be applied if the transaction commits successfully. Similarly, the value produced bycallablewill only be returned by this method if the transaction commits successfully.callableis allowed to raise an unchecked exception. Typically this prevents further attempts to executecallable, and the exception will propagate from this method call. However, if a read or query incallabledetected that the transaction aborted,callablewill be retried even if it raised an exception. -
getCommitTimestamp
com.google.cloud.Timestamp getCommitTimestamp()Returns the timestamp at which the transaction committed. This method may only be called oncerun(TransactionCallable)has returned normally. -
getCommitResponse
CommitResponse getCommitResponse()Returns theCommitResponseof this transaction. -
allowNestedTransaction
TransactionRunner allowNestedTransaction()Allows overriding the default behaviour of blocking nested transactions.Note that the client library does not maintain any information regarding the nesting structure. If an outer transaction fails and an inner transaction succeeds, upon retry of the outer transaction, the inner transaction will be re-executed.
Use with care when certain that the inner transaction is idempotent. Avoid doing this when accessing the same db. There might be legitimate uses where access need to be made across DBs for instance.
E.g. of nesting that is discouraged, see
nestedReadWriteTxnThrowsnestedReadOnlyTxnThrows,nestedBatchTxnThrows,nestedSingleUseReadTxnThrows- Returns:
- this object
-