Interface AsyncTransactionManager
-
- All Superinterfaces:
AutoCloseable
public interface AsyncTransactionManager extends AutoCloseable
An interface for managing the life cycle of a read write transaction including all its retries. SeeTransactionContext
for a description of transaction semantics.At any point in time there can be at most one active transaction in this manager. When that transaction is committed, if it fails with an
ABORTED
error, callingresetForRetryAsync()
would create a newAsyncTransactionManager.TransactionContextFuture
. The newly created transaction would use the same session thus increasing its lock priority. If the transaction is committed successfully, or is rolled back or commit fails with any error other thanABORTED
, the manager is considered complete and no further transactions are allowed to be created in it.Every
AsyncTransactionManager
should either be committed or rolled back. Failure to do so can cause resources to be leaked and deadlocks. Easiest way to guarantee this is by callingclose()
in a finally block.- See Also:
DatabaseClient#transactionManagerAsync()
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
AsyncTransactionManager.AsyncTransactionFunction<I,O>
Each step in a transaction chain is defined by anAsyncTransactionManager.AsyncTransactionFunction
.static interface
AsyncTransactionManager.AsyncTransactionStep<I,O>
AsyncTransactionManager.AsyncTransactionStep
is returned byTransactionContextFuture#then(AsyncTransactionFunction)
andAsyncTransactionStep#then(AsyncTransactionFunction)
and allows transaction steps that should be executed serially to be chained together.static interface
AsyncTransactionManager.CommitTimestampFuture
ApiFuture
that returns the commitTimestamp
of a Cloud Spanner transaction that is executed using anAsyncTransactionManager
.static interface
AsyncTransactionManager.TransactionContextFuture
ApiFuture
that returns aTransactionContext
and that supports chaining of multipleAsyncTransactionManager.TransactionContextFuture
s to form a transaction.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description AsyncTransactionManager.TransactionContextFuture
beginAsync()
Creates a new read write transaction.void
close()
Closes the manager.com.google.api.core.ApiFuture<Void>
closeAsync()
Closes the transaction manager.com.google.api.core.ApiFuture<CommitResponse>
getCommitResponse()
Returns theCommitResponse
of this transaction.TransactionManager.TransactionState
getState()
Returns the state of the transaction.AsyncTransactionManager.TransactionContextFuture
resetForRetryAsync()
Creates a new transaction for retry.com.google.api.core.ApiFuture<Void>
rollbackAsync()
Rolls back the currently active transaction.
-
-
-
Method Detail
-
beginAsync
AsyncTransactionManager.TransactionContextFuture beginAsync()
Creates a new read write transaction. This must be called before doing any other operation and can only be called once. To create a new transaction for subsequent retries, see#resetForRetry()
.
-
rollbackAsync
com.google.api.core.ApiFuture<Void> rollbackAsync()
Rolls back the currently active transaction. In most cases there should be no need to call this explicitly sinceclose()
would automatically roll back any active transaction.
-
resetForRetryAsync
AsyncTransactionManager.TransactionContextFuture resetForRetryAsync()
Creates a new transaction for retry. This should only be called if the previous transaction failed withABORTED
. In all other cases, this will throw anIllegalStateException
. Users should backoff before calling this method. Backoff delay is specified bySpannerException.getRetryDelayInMillis()
on theSpannerException
throw by the previous commit call.
-
getState
TransactionManager.TransactionState getState()
Returns the state of the transaction.
-
getCommitResponse
com.google.api.core.ApiFuture<CommitResponse> getCommitResponse()
Returns theCommitResponse
of this transaction.
-
close
void close()
Closes the manager. If there is an active transaction, it will be rolled back. Underlying session will be released back to the session pool.- Specified by:
close
in interfaceAutoCloseable
-
closeAsync
com.google.api.core.ApiFuture<Void> closeAsync()
Closes the transaction manager. If there is an active transaction, it will be rolled back. The underlying session will be released back to the session pool. The returnedApiFuture
is done when the transaction (if any) has been rolled back.
-
-