public class Policy extends Object
Modifier and Type | Field and Description |
---|---|
boolean |
compress
Use zlib compression on command buffers sent to the server and responses received
from the server when the buffer size is greater than 128 bytes.
|
int |
connectTimeout
Socket connect timeout in milliseconds.
|
boolean |
failOnFilteredOut
Throw exception if
filterExp is defined and that filter evaluates
to false (transaction ignored). |
Expression |
filterExp
Optional expression filter.
|
int |
maxRetries
Maximum number of retries before aborting the current transaction.
|
PredExp[] |
predExp
Deprecated.
|
ReadModeAP |
readModeAP
Read policy for AP (availability) namespaces.
|
ReadModeSC |
readModeSC
Read policy for SC (strong consistency) namespaces.
|
Replica |
replica
Replica algorithm used to determine the target node for a single record command.
|
boolean |
sendKey
Send user defined key in addition to hash digest on both reads and writes.
|
int |
sleepBetweenRetries
Milliseconds to sleep between retries.
|
int |
socketTimeout
Socket idle timeout in milliseconds when processing a database command.
|
int |
timeoutDelay
Delay milliseconds after socket read timeout in an attempt to recover the socket
in the background.
|
int |
totalTimeout
Total transaction timeout in milliseconds.
|
Constructor and Description |
---|
Policy()
Default constructor.
|
Policy(Policy other)
Copy policy from another policy.
|
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj) |
int |
hashCode() |
void |
setPredExp(PredExp... predExp)
Deprecated.
|
void |
setTimeout(int timeout)
Create a single timeout by setting socketTimeout and totalTimeout
to the same value.
|
void |
setTimeouts(int socketTimeout,
int totalTimeout)
Set socketTimeout and totalTimeout.
|
public ReadModeAP readModeAP
Default: ReadModeAP.ONE
public ReadModeSC readModeSC
Default: ReadModeSC.SESSION
public Replica replica
Default: Replica.SEQUENCE
@Deprecated public PredExp[] predExp
filterExp
instead.
Optional predicate expression filter in postfix notation. If the predicate expression exists and evaluates to false, the transaction is ignored.
predExp and filterExp are mutually exclusive. If both are defined, predExp will be ignored.
Default: null
public Expression filterExp
predExp and filterExp are mutually exclusive. If both are defined, predExp will be ignored.
Default: null
Example:
Policy p = new Policy();
p.filterExp = Exp.build(Exp.eq(Exp.intBin("a"), Exp.val(11)));
public int connectTimeout
connectTimeout is useful when new connection creation is expensive (ie TLS connections) and it's acceptable to allow extra time to create a new connection compared to using an existing connection from the pool.
Default: 0
public int socketTimeout
If socketTimeout is zero and totalTimeout is non-zero, then socketTimeout will be set to totalTimeout. If both socketTimeout and totalTimeout are non-zero and socketTimeout > totalTimeout, then socketTimeout will be set to totalTimeout. If both socketTimeout and totalTimeout are zero, then there will be no socket idle limit.
If socketTimeout is non-zero and the socket has been idle for at least socketTimeout, both maxRetries and totalTimeout are checked. If maxRetries and totalTimeout are not exceeded, the transaction is retried.
For synchronous methods, socketTimeout is the socket timeout (SO_TIMEOUT). For asynchronous methods, the socketTimeout is implemented using a HashedWheelTimer.
Default: 30000ms
public int totalTimeout
The totalTimeout is tracked on the client and sent to the server along with the transaction in the wire protocol. The client will most likely timeout first, but the server also has the capability to timeout the transaction.
If totalTimeout is not zero and totalTimeout is reached before the transaction
completes, the transaction will abort with
AerospikeException.Timeout
.
If totalTimeout is zero, there will be no total time limit.
Default: 0 (no time limit)
public int timeoutDelay
When a transaction is stopped prematurely, the socket must be drained of all incoming data or closed to prevent unread socket data from corrupting the next transaction that would use that socket.
If a socket read timeout occurs and timeoutDelay is greater than zero, the socket will be drained until all data has been read or timeoutDelay is reached. If all data has been read, the socket will be placed back into the connection pool. If timeoutDelay is reached before the draining is complete, the socket will be closed.
Sync sockets are drained in the cluster tend thread at periodic intervals. Async sockets are drained in the event loop from which the async command executed.
Many cloud providers encounter performance problems when sockets are closed by the client when the server still has data left to write (results in socket RST packet). If the socket is fully drained before closing, the socket RST performance penalty can be avoided on these cloud providers.
The disadvantage of enabling timeoutDelay is that extra memory/processing is required to drain sockets and additional connections may still be needed for transaction retries.
If timeoutDelay were to be enabled, 3000ms would be a reasonable value.
Default: 0 (no delay, connection closed on timeout)
public int maxRetries
If maxRetries is exceeded, the transaction will abort with
AerospikeException.Timeout
.
WARNING: Database writes that are not idempotent (such as add()) should not be retried because the write operation may be performed multiple times if the client timed out previous transaction attempts. It's important to use a distinct WritePolicy for non-idempotent writes which sets maxRetries = 0;
Default for read: 2 (initial attempt + 2 retries = 3 attempts)
Default for write: 0 (no retries)
Default for partition scan or query with null filter: 5
(6 attempts. See ScanPolicy.ScanPolicy()
comments.)
No default for legacy scan/query. No retries are allowed for these commands.
public int sleepBetweenRetries
The sleep only occurs on connection errors and server timeouts which suggest a node is down and the cluster is reforming. The sleep does not occur when the client's socketTimeout expires.
Reads do not have to sleep when a node goes down because the cluster does not shut out reads during cluster reformation. The default for reads is zero.
The default for writes is also zero because writes are not retried by default. Writes need to wait for the cluster to reform when a node goes down. Immediate write retries on node failure have been shown to consistently result in errors. If maxRetries is greater than zero on a write, then sleepBetweenRetries should be set high enough to allow the cluster to reform (>= 3000ms).
Default: 0 (do not sleep between retries)
public boolean sendKey
Default: false (do not send the user defined key)
public boolean compress
This option will increase cpu and memory usage (for extra compressed buffers),but decrease the size of data sent over the network.
Default: false
public boolean failOnFilteredOut
filterExp
is defined and that filter evaluates
to false (transaction ignored). The AerospikeException
will contain result code ResultCode.FILTERED_OUT
.
This field is not applicable to batch, scan or query commands.
Default: false
public Policy(Policy other)
public Policy()
public final void setTimeout(int timeout)
public final void setTimeouts(int socketTimeout, int totalTimeout)
@Deprecated public final void setPredExp(PredExp... predExp)
filterExp
instead.
Set predicate expression filter in postfix notation. If the predicate expression exists and evaluates to false, the transaction is ignored.
Postfix notation is described here: http://wiki.c2.com/?PostfixNotation
Example:
// Record last update time > 2017-01-15 policy.setPredExp( PredExp.recLastUpdate(), PredExp.integerValue(new GregorianCalendar(2017, 0, 15)), PredExp.integerGreater() );
Copyright © 2012–2021 Aerospike, Inc. All rights reserved.