@Deprecated public class IdempotenceAwareRetryPolicy extends Object implements RetryPolicy
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)
RetryPolicy
requiredResponses >= receivedResponses
if dataPresent
is
false
(see
ReadTimeoutException.wasDataRetrieved()
).onReadTimeout
in interface RetryPolicy
statement
- 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)
RetryPolicy
not idempotent
, the driver will never retry it on a
write timeout (this method won't even be called).onWriteTimeout
in interface RetryPolicy
statement
- 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)
RetryPolicy
onUnavailable
in interface RetryPolicy
statement
- 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)
RetryPolicy
SocketOptions.getReadTimeoutMillis()
);OVERLOADED
error or a SERVER_ERROR
.not idempotent
, the driver will never retry it
(this method won't even be called).onRequestError
in interface RetryPolicy
statement
- 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)
RetryPolicy
init
in interface RetryPolicy
cluster
- the cluster that this policy is associated with.public void close()
RetryPolicy
close
in interface RetryPolicy
protected boolean isIdempotent(Statement statement)
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–2018. All rights reserved.