@Deprecated public class IdempotenceAwareRetryPolicy extends Object implements RetryPolicy
In case of write timeouts or unexpected errors, this policy will always return RetryPolicy.RetryDecision.rethrow() if the statement is deemed
non-idempotent (see isIdempotent(Statement)).
For all other cases, this policy delegates the decision to the child policy.
RetryPolicy.RetryDecision| Constructor and Description |
|---|
IdempotenceAwareRetryPolicy(RetryPolicy childPolicy)
Deprecated.
Creates a new instance.
|
| Modifier and Type | Method and Description |
|---|---|
void |
close()
Deprecated.
Gets invoked at cluster shutdown.
|
void |
init(Cluster cluster)
Deprecated.
Gets invoked at cluster startup.
|
protected boolean |
isIdempotent(Statement statement)
Deprecated.
Determines whether the given statement is idempotent or not.
|
RetryPolicy.RetryDecision |
onReadTimeout(Statement statement,
ConsistencyLevel cl,
int requiredResponses,
int receivedResponses,
boolean dataRetrieved,
int nbRetry)
Deprecated.
Defines whether to retry and at which consistency level on a read timeout.
|
RetryPolicy.RetryDecision |
onRequestError(Statement statement,
ConsistencyLevel cl,
DriverException e,
int nbRetry)
Deprecated.
Defines whether to retry and at which consistency level on an unexpected error.
|
RetryPolicy.RetryDecision |
onUnavailable(Statement statement,
ConsistencyLevel cl,
int requiredReplica,
int aliveReplica,
int nbRetry)
Deprecated.
Defines whether to retry and at which consistency level on an unavailable exception.
|
RetryPolicy.RetryDecision |
onWriteTimeout(Statement statement,
ConsistencyLevel cl,
WriteType writeType,
int requiredAcks,
int receivedAcks,
int nbRetry)
Deprecated.
Defines whether to retry and at which consistency level on a write timeout.
|
public IdempotenceAwareRetryPolicy(RetryPolicy childPolicy)
childPolicy - the policy to wrap.public RetryPolicy.RetryDecision onReadTimeout(Statement statement, ConsistencyLevel cl, int requiredResponses, int receivedResponses, boolean dataRetrieved, int nbRetry)
RetryPolicyNote that this method may be called even if requiredResponses >= receivedResponses
if dataPresent is false (see ReadTimeoutException.wasDataRetrieved()).
onReadTimeout in interface RetryPolicystatement - the original query that timed out.cl - the requested consistency level of the read that timed out. Note that this can never
be a serial consistency level.requiredResponses - the number of responses that were required to achieve the requested
consistency level.receivedResponses - the number of responses that had been received by the time the timeout
exception was raised.dataRetrieved - whether actual data (by opposition to data checksum) was present in the
received responses.nbRetry - the number of retry already performed for this operation.RetryDecision.RETHROW is returned, a ReadTimeoutException will be thrown for the operation.public RetryPolicy.RetryDecision onWriteTimeout(Statement statement, ConsistencyLevel cl, WriteType writeType, int requiredAcks, int receivedAcks, int nbRetry)
RetryPolicyNote that if a statement is not idempotent, the driver will
never retry it on a write timeout (this method won't even be called).
onWriteTimeout in interface RetryPolicystatement - the original query that timed out.cl - the requested consistency level of the write that timed out. If the timeout occurred
at the "paxos" phase of a Lightweight
transaction, then cl will actually be the requested serial consistency level. Beware that serial consistency
levels should never be passed to a RetryDecision as this would
invariably trigger an InvalidQueryException. Also, when cl is serial, then writeType is always CAS.writeType - the type of the write that timed out.requiredAcks - the number of acknowledgments that were required to achieve the requested
consistency level.receivedAcks - the number of acknowledgments that had been received by the time the
timeout exception was raised.nbRetry - the number of retry already performed for this operation.RetryDecision.RETHROW is returned, a WriteTimeoutException will be thrown for the
operation.public RetryPolicy.RetryDecision onUnavailable(Statement statement, ConsistencyLevel cl, int requiredReplica, int aliveReplica, int nbRetry)
RetryPolicyonUnavailable in interface RetryPolicystatement - the original query for which the consistency level cannot be achieved.cl - the requested consistency level for the operation. If the operation failed at the
"paxos" phase of a Lightweight
transaction, then cl will actually be the requested serial consistency level. Beware that serial consistency
levels should never be passed to a RetryDecision as this would
invariably trigger an InvalidQueryException.requiredReplica - the number of replica that should have been (known) alive for the
operation to be attempted.aliveReplica - the number of replica that were know to be alive by the coordinator of the
operation.nbRetry - the number of retry already performed for this operation.RetryDecision.RETHROW is returned, an UnavailableException will be thrown for the operation.public RetryPolicy.RetryDecision onRequestError(Statement statement, ConsistencyLevel cl, DriverException e, int nbRetry)
RetryPolicyThis method might be invoked in the following situations:
SocketOptions.getReadTimeoutMillis());
OVERLOADED error, SERVER_ERROR,
READ_FAILURE or WRITE_FAILURE.
Note that when such an error occurs, there is no guarantee that the mutation has been
applied server-side or not. Therefore, if a statement is not
idempotent, the driver will never retry it (this method won't even be called).
onRequestError in interface RetryPolicystatement - the original query that failed.cl - the requested consistency level for the operation. Note that this is not necessarily
the achieved consistency level (if any), and it is never a serial one.e - the exception that caused this request to fail.nbRetry - the number of retries already performed for this operation.RetryDecision.RETHROW is returned, the DriverException passed to this method will be thrown for the operation.public void init(Cluster cluster)
RetryPolicyinit in interface RetryPolicycluster - the cluster that this policy is associated with.public void close()
RetryPolicyThis gives the policy the opportunity to perform some cleanup, for instance stop threads that it might have started.
close in interface RetryPolicyprotected boolean isIdempotent(Statement statement)
The current implementation inspects the statement's idempotent flag; if this flag is not set, then it inspects QueryOptions.getDefaultIdempotence().
Subclasses may override if they have better knowledge of the statement being executed.
statement - The statement to execute.true if the given statement is idempotent, false otherwiseCopyright © 2012–2023. All rights reserved.