Interface TransactionRetryListener
- All Known Implementing Classes:
TransactionRetryListenerImpl
@InternalApi
public interface TransactionRetryListener
Cloud Spanner can abort any read/write transaction because of potential deadlocks or other
internal reasons. When a transaction is aborted, the entire transaction should be retried. A
Connection can automatically retry a transaction internally and check whether the results
that are returned during a retry attempt are equal to the results during the original
transaction. This is done by keeping track of a SHA-256 checksum of all the results that are
returned by Spanner during both transactions.
This listener class for internal transaction retries allow client applications to do
additional testing or logging of transaction retries. Transaction retry listeners of a Connection can be added using Connection.addTransactionRetryListener(TransactionRetryListener).
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic enumThe result of a retry. -
Method Summary
Modifier and TypeMethodDescriptiondefault voidretryDmlAsPartitionedDmlFailed(UUID executionId, Statement statement, Throwable exception) This method is called when an atomic DML statement failed to be retried as a Partitioned DML statement.default voidretryDmlAsPartitionedDmlFinished(UUID executionId, Statement statement, long lowerBoundUpdateCount) This method is called when an atomic DML statement has been successfully retried as a Partitioned DML statement.default voidretryDmlAsPartitionedDmlStarting(UUID executionId, Statement statement, TransactionMutationLimitExceededException exception) This method is called when an atomic DML statement is retried as a Partitioned DML statement.voidretryFinished(com.google.cloud.Timestamp transactionStarted, long transactionId, int retryAttempt, TransactionRetryListener.RetryResult result) This method is called when a retry has finished.voidretryStarting(com.google.cloud.Timestamp transactionStarted, long transactionId, int retryAttempt) This method is called when a retry is about to start.
-
Method Details
-
retryStarting
void retryStarting(com.google.cloud.Timestamp transactionStarted, long transactionId, int retryAttempt) This method is called when a retry is about to start.- Parameters:
transactionStarted- The start date/time of the transaction that is retrying.transactionId- An internally assigned ID of the transaction (unique during the lifetime of the JVM) that can be used to identify the transaction for logging purposes.retryAttempt- The number of retry attempts the current transaction has executed, including the current retry attempt.
-
retryFinished
void retryFinished(com.google.cloud.Timestamp transactionStarted, long transactionId, int retryAttempt, TransactionRetryListener.RetryResult result) This method is called when a retry has finished.- Parameters:
transactionStarted- The start date/time of the transaction that is retrying.transactionId- An internally assigned ID of the transaction (unique during the lifetime of the JVM) that can be used to identify the transaction for logging purposes.retryAttempt- The number of retry attempts the current transaction has executed, including the current retry attempt.result- The result of the retry indicating whether the retry was successful or not.
-
retryDmlAsPartitionedDmlStarting
default void retryDmlAsPartitionedDmlStarting(UUID executionId, Statement statement, TransactionMutationLimitExceededException exception) This method is called when an atomic DML statement is retried as a Partitioned DML statement.- Parameters:
executionId- a generated, unique ID for this execution. The same ID is passed in to the methodsretryDmlAsPartitionedDmlFinished(UUID, Statement, long)andretryDmlAsPartitionedDmlFailed(UUID, Statement, Throwable)when the execution finishes or fails.statement- the statement that is being retried as Partitioned DMLexception- the mutation-limit-exceeded exception that was returned by Spanner during the initial execution.
-
retryDmlAsPartitionedDmlFinished
default void retryDmlAsPartitionedDmlFinished(UUID executionId, Statement statement, long lowerBoundUpdateCount) This method is called when an atomic DML statement has been successfully retried as a Partitioned DML statement.- Parameters:
executionId- the unique ID of this statement executionstatement- the statement that was successfully retried as Partitioned DMLlowerBoundUpdateCount- the lower-bound update count returned by Spanner after executing the statement as Partitioned DML
-
retryDmlAsPartitionedDmlFailed
default void retryDmlAsPartitionedDmlFailed(UUID executionId, Statement statement, Throwable exception) This method is called when an atomic DML statement failed to be retried as a Partitioned DML statement.- Parameters:
executionId- the unique ID of this statement executionstatement- the statement that failed to be retried as Partitioned DMLexception- the exception that was returned when the statement was executed as Partitioned DML
-