CLIENT-1622 Create a new NettyTlsContext for each AerospikeClient instance by default when using netty and TLS. Also, allow NettyTlsContext to be shared across AerospikeClient instances via a new TlsPolicy field, "nettyContext".
CLIENT-1622 Create a new NettyTlsContext for each AerospikeClient instance by default when using netty and TLS. Also, allow NettyTlsContext to be shared across AerospikeClient instances via a new TlsPolicy field, "nettyContext".
Add async getClusterStats(ClusterStatsListener listener) to provide more accurate statistics when running both in/out of eventloop threads.
Add Exp.expr() to merge precompiled expressions into a greater expression.
Add ScanResume example.
Add url, organization and license tags to pom.xml.
CLIENT-1611 Set partition's last digest received only after the scan callback returns. If the scan callback throws an exception, the last digest will not be set and that record will be returned again if the scan is resumed at a later time.
If getClusterStats() is called from an eventloop thread, do not block and use cross-thread references instead.
Add EventLoops.next() comments regarding non-atomic sequence counter implementations.
Remove old deprecated PredExp tests.
Support Netty/io_uring eventloops for async commands.
Add eventLoopType command line argument to examples, benchmarks and test.
CLIENT-1602 Expand client policy support in benchmarks.
CLIENT-1560 Relogin to node when quick node restart detected.
CLIENT-1560 Check Cluster.authEnabled before using session token.
CLIENT-1575 Force login when creating a new cluster tend connection and user authentication is enabled and the session is null.
CLIENT-1581 Retry on TLS handshake errors for async Netty commands.
CLIENT-1598 Reduce max concurrent connection requests to 20 (from 50) for all event loops when creating min connections on node creation.
CLIENT-1604 Return consistent PartitionStatus array in PartitionFilter when scanPartitions()/queryPartitions() fails.
CLIENT-1604 Support sleepBetweenRetries policy in async scan/query retry by scheduling retry at a future time.
Require TLS configuration if authMode == PKI.
Catch NoClassDefFoundError when performing EventLoopGroup instanceof checks to determine eventLoopType.
Allow Throwable exceptions in AerospikeException constructors.
Fix Exp.geoBin() doc example.
CLIENT-1573 Refresh and add all new peers nodes until no more peers are available in cluster tend.
CLIENT-1573 Set "Node.rebalanceChanged" to "Cluster.rackAware" when creating node.
CLIENT-1574 Avoid using previous failed node when possible in batch retry.
Use SortedMap interface in the MapOrder detection method.
Remove LogPolicy() debug message.
CLIENT-1556 If the Bin constructor's map argument is an instance of TreeMap, set sorted attribute when sending bin to the server. Also, add a new map Bin constructor that accepts MapOrder as an argument.
CLIENT-1557 Support a list of preferred racks rather than a single rack when replica is PREFER_RACK.
CLIENT-1569 Support PKI authentication where the TLS certificate's common name (CN) specifies the Aerospike user name. This feature requires server version 5.7+.
CLIENT-1571 Support batch read operations.
CLIENT-1572 Support scan-show and query-show info commands.
Add a byte array constructor for Expression.
Use github actions to run unit tests on push and pull requests. Remove travis.
CLIENT-1567 Add seed and peer nodes at the same time on startup. Refresh peers of new nodes in same cluster tend iteration.
Remove supported feature checks in examples because each feature is supported on minimum server version (4.9).
Deprecate old Value.getFromRecordObject().
Override hashCode and equals for KeyRecord.
Check for null value in get methods.
CLIENT-1547 Allow async batch read calls with sequence listeners to deliver partial results when InvalidNode exception occurs for some keys.
Upgrade default Netty library version to 4.1.65.Final.
CLIENT-1554 Fix async connection accounting when timeoutDelay policy is enabled.
For scan exception MAX_RETRIES_EXCEEDED, include all retry sub-exceptions in exception message.
Upgrade Bouncy Castle crypto version to 1.69.
CLIENT-1548 Revert CLIENT-1511 and replace with simpler TCP keep-alive error handling. TCP keep-alive is still disabled by default.
CLIENT-1549 Catch and swallow exceptions generated from log callback.
CLIENT-1550 Do not create Key object when parsing batch read results because it's no longer used.
CLIENT-1544 Make TCP keep-alive optional. Enable when "ClientPolicy.keepAlive" field is instantiated and the native NETTY_EPOLL library is specified.
CLIENT-1544 Perform only one cluster tend in waitTillStabilized() because the tend now requests partition maps in same iteration as adding the nodes.
CLIENT-1544 Attempt to contact an invalid node (referenced by seeds or peers) only once for each cluster tend iteration.
CLIENT-1544 Add invalidNodeCount to ClusterStats and also provide direct access in "Cluster.getInvalidNodeCount()". invalidNodeCount is the count of referenced nodes that can't be added to the cluster in the most recent cluster tend iteration.
CLIENT-1544 Add parent node to AsyncPool and remove node argument in AsyncPool methods.
CLIENT-1544 Try to catch unexpected exception in NettyConnector.
Call end() when done with Inflater/Deflater.
Remove unused result code COMMAND_REJECTED.
CLIENT-1448 Mention ListWriteFlags in ListPolicy constructor doc.
DOCS-217 Fix REVERSE_RANK doc to say "Return reverse value order."
CLIENT-1537 Use separate boolean to indicate cluster is closed instead of setting commands "pending" integer to a fixed value.
CLIENT-1537 Add "try/catch" blocks around async code that cannot fail. Log a message and stacktrace with a Level of ERROR if an exception is caught in this critical code.
CLIENT-1537 Align EventLoop "pending" (pending for entire eventloop) with EventState "pending" (pending for each cluster within an eventloop) so modifications occur at the same time.
CLIENT-1537 Change async connection recovery to not modify "pending". Connection recovery is now independent of "pending" limits and accounting.
CLIENT-1537 Increment node error count on server timeouts.
Fix equals() in BoolIntValue to cast other to BoolIntValue instead of BooleanValue.
CLIENT-1461 Support boolean particle type. If "Value.UseBoolBin" is true, a boolean is sent to the server as a boolean bin instead of an integer bin. Server version 5.6+ is required when "Value.UseBoolBin" is true. Default is false.
CLIENT-1475 Support new math, bit, and conditional expressions. These expressions require server version 5.6+.
CLIENT-1486 Support user quotas and statistics. This feature requires server version 5.6+.
CLIENT-1501 Remove Policy.priority, ScanPolicy.scanPercent and ScanPolicy.failOnClusterChange. The server no longer supports these fields. See Incompatible API change.
CLIENT-1511 Support TCP keep-alive when using netty-transport-native-epoll library. When keep-alive detects an invalid socket in a connection pool, an event is sent that is used to close that socket and remove it from the connection pool.
Support UUID value type.
Do not keep connection on all client side errors.
CLIENT-1493 Check for timeout in all netty callbacks.
CLIENT-1493 Catch netty connection close exceptions.
CLIENT-1493 If connection pool is full, abort connection balance for that iteration.
CLIENT-1493 Decrement connection total when AsyncConnector fails before AsyncConnection is instantiated.
CLIENT-1493 Allow connections to expire and disable connection creation when errorRate circuit breaker is triggered.
CLIENT-1494 Detect quick node restart when restarted node never left the cluster. If detected, reset error count and balance connections.
CLIENT-1473 Accept new boolean particle type on reads, but continue writing boolean as an integer bin. This is an interim step that allows rolling upgrades with boolean support when server version 5.6 is released.
CLIENT-1482 Add Node getPeersGeneration(), getPartitionGeneration() and getRebalanceGeneration().
CLIENT-1487 Remove ability to use old authentication protocol since the new authentication protocol was created in server version 4.1 and this client already requires server version 4.9+.
Implement more accurate ClusterStats by collecting async data directly in event loop threads.
Support enums in Value.get().
CLIENT-1488 Reserve async connection slots in advance for AsyncConnector. This should prevent a node's async connection count from exceeding asyncMaxConnsPerNode.
CLIENT-1485 Remove ability to configure password hash as the password when using authentication.
Fix potential null pointer exception in QueryAggregateCommand.
Convert preceding spaces to tabs.
Do not run tests on enterprise features when using community edition.
CLIENT-1454 Support scan pagination with PartitionFilter.
Check for null in Host, Key equals methods.
Remove redundant deadline assignment in NioCommand.
Add support for MacOS/BSD Kqueue native netty transport.
In setXDRFilter(), remove XDR filter if filter expression is null.
CLIENT-1438 Replace MapWriteMode with MapWriteFlags where possible.
Remove redundant node assignment in AerospikeException.Timeout.
Make IAerospikeClient comments/declarations consistent with AerospikeClient.
Avoid deprecation warnings when using netty and junit.
CLIENT-1407 Support optional connectTimeout policy. If connectTimeout greater than zero, it will be applied to creating a connection plus optional user authentication.
CLIENT-1430 Allow async command argument eventLoop to be null. If null, round-robin event loop distribution (eventLoops.next()) is used to set eventLoop.
Start HashWheeledTimer as soon as async event loop starts running.
CLIENT-1391 Reset peers, partition and rebalance generations on node tend errors. This forces a client node refresh when a node is quickly restarted with the same generation, but with different peers, partition maps or rack nodes.
Check for null value in Record.getGeoJSONString().
Deprecate Record.getGeoJSON(). Use Record.getGeoJSONString() instead.
Use non-atomic increment in async examples/tests when counter is only modified by a single event loop thread.
CLIENT-1377 Reject command when assigned node's error rate exceeds ClientPolicy.maxErrorRate per ClientPolicy.errorRateWindow. The node's error count is incremented on any error that causes the connection to close (socket errors and client timeouts) plus ResultCode.DEVICE_OVERLOAD. Attempt retry before throwing AerospikeException.Backoff. Default maxErrorRate (0) disables error rate rejection.
Retry on ResultCode.DEVICE_OVERLOAD.
CLIENT-1375 Add Expression.getBase64() to return base64 encoded string of packed expression bytes.
CLIENT-1378 Add setXDRFilter().
Deprecate Policy.priority, ScanPolicy.failOnClusterChange and MapOperation.decrement().
CLIENT-1390 Fix NullPointerException that could occur after TLS connection pool is used and minConnsPerNode is defined.
CLIENT-1373 Retrofit support for old PredExp in addition to new Expressions. Both expression filters will be supported for 1 year in order to ease the transition to new Expression APIs. After that, PredExp support will be permanently removed. Also, support server version 4.9+ instead of the more strict 188.8.131.52+ requirement. Expression API usage still requires server 184.108.40.206+.
Add Exp.memorySize(). This method requires server version 5.3+.
Remove extraneous newline in ClusterStats toString().
Add exp package to javadocs.
CLIENT-1359 Replace PredExp with new Expressions. Expression filters give access to the full data type APIs (List, Map, Bit, HyperLogLog, Geospatial) and expanded metadata based filtering, to increase the power of filters in selecting records. This client requires server version 220.127.116.11+. See Incompatible API change.
CLIENT-1369 Remove legacy client code for old servers since this client now requires server version 18.104.22.168+.
CLIENT-1181 Add Log.setCallbackStandard().
Add hashCode() and equals() to Policy and WritePolicy.
CLIENT-1356 Wait until seed node is fully validated before creating minimum connections.
CLIENT-1358 Expand recoverable connections scope to include async netty commands in connect state.
CLIENT-1355 Skip orphan seeds that do not have peers when other seeds have peers.
Replace HashMap with LinkedHashMap when creating bins for read. This is done to preserve bin order, so client returns bins in the same order as they have been written.
CLIENT-1310 Allow ScanPolicy scanPercent to be sent for server versions >= 4.9 when scanPercent is changed from the default. Also, throw an exception if both scanPercent and maxRecords are changed from the default. scanPercent/maxRecords are mutually exclusive.
CLIENT-1336 Fail immediately with detailed message when a seed connection error occurs and seed host tlsName defined, but client tlsPolicy is not defined.
Fix errors/warnings generated by newer versions of javadoc.
CLIENT-1307 Fix async netty connection recovery to handle cases where connection channel pipeline has not been initialized. Also, handle connection recovery exceptions gracefully. Connection recovery is used when a timeout occurs and timeoutDelay policy is defined.
Fix Role documentation.
Add new Bin constructor that accepts byte array and particle type.
Bump default netty.version from 4.1.45.Final to 4.1.50.Final.
CONNECTOR-65 Support XDR client emulation. See WritePolicy xdr.
CLIENT-1293 When preallocating async TLS connections, wait for TLS handshake to complete before placing connection in pool.
CLIENT-1291 Allow maxSocketIdle to be set to zero (no reap). Connections retrieved from pools in transaction threads will not be checked for maxSocketIdle when maxSocketIdle is zero. Idle connections will still be trimmed down from peak connections to min connections in the cluster tend thread using a hard-coded 55 second limit when maxSocketIdle is zero.
CLIENT-1287 If a batch request to a node fails, continue processing other node responses for async batch read methods that accept a sequence listener (ExistsSequenceListener, BatchSequenceListener, RecordSequenceListener).
Add AerospikeClient getCluster().
Add ExecuteTask getTaskId().
Add create nested map and create nested list examples.
Verify varargs length in Execute(), so if empty operations does not override the original operations set in Statement.
CLIENT-1278 Support minimum connections.
Add ScanPolicy copy constructor.
Add more detailed docs for CTX.listIndexCreate() and CTX.mapKeyCreate().
Add more HyperLogLog (HLL) tests.
Add ACT random algorithm to benchmarks.
Add serviceAlternate option to benchmarks.
Move extensions to separate repository (https://github.com/aerospike-community/aerospike-client-java-extensions).
Update QueryPolicy docs to mention maxRecords only supported on query with null filter.
Fix travis server config.
CLIENT-1201 Support maxRecords in scans. This feature requires server versions >= 4.9.
CLIENT-1202 Support creation of list/map in a CDT context. This feature requires server versions >= 4.9.
CLIENT-1234 Support HyperLogLog (HLL) operations. This feature requires server versions >= 4.9.
Add new PartitionFilter after(Key key) to select records after the key's digest in the partition containing the digest.
Add retry functionality for reactor client.
CLIENT-1160 For single record transactions, send socketTimeout to the server instead of totalTimeout when socketTimeout < totalTimeout.
CLIENT-1218 Set compression level to BEST_SPEED (1) when compression is enabled.
Change default netty version from 4.1.11 to 4.1.45.
Remove unnecessary repositories tag in benchmark pom.xml.
Fix Replica javadoc comment.
CLIENT-1170 Support partition scans. This feature requires server versions >= 4.9.
Add reactor-query-engine extension library.
Add toString() to PredExp subclasses.
CLIENT-1171 Upgrade jbcrypt version to 0.4 in pom.xml used in maven central repository.
Support async create index, drop index, and info commands.
Upgrade jbcrypt version to 0.4.
CLIENT-1156 Support compressed commands and responses. This feature requires Enterprise Server versions >= 4.8.
CLIENT-1151 Support sorted maps in AerospikeClient.put() by adding Bin constructor that accepts list of entries and a map order.
CLIENT-1161 Use new sindex-exists info command when checking for dropIndex task completion.
Support ByteBuffer type in list/map entries.
Add test for nested map lookup by map value.
Add loginTimeout and connectTimeout command line arguments to benchmarks.
Clarify when to make scan callbacks thread-safe in scan examples.
Document that Statement instance is not suitable for reuse between method calls because it's modified inside query methods.
CLIENT-1162 Update connection lastUsed after command's last socket read instead of command end.
Remove obsolete transaction-queues server config in travis.
CLIENT-1123 Support delete record operation in operate(). This feature requires server versions >= 4.7.
CLIENT-1127 Support write operations in background scan/query. This feature requires server versions >= 4.7.
CLIENT-1128 Support recordsPerSecond in Statement class to limit scan/query throughput. This feature requires server versions >= 4.7.
CLIENT-1129 Add total opened/closed connection counts per node to cluster statistics.
Add new NioEventLoops constructor that allows daemon threads and thread pool names to be specified.
CLIENT-1133 Allow error code to be empty when parsing info command errors. Also, change info command default error code to generic server error (1).
Remove client support for bit operations on nested list/maps because the server will not support this functionality in the near future.
Add the transient keyword to node/policy in AerospikeException.
Add final keyword to ensure that the client library compiles under Java 1.7 as well as 1.8.
Fix documentation result for BitOperation.get().
CLIENT-1120 Support predicate expressions for all transactions. This feature requires server versions >= 4.7.
CLIENT-1119 Do not verify record digest in batch read. The returned digests might not be sent back in future server releases.
CLIENT-1121 On netty async connection close, do not attempt to remove InboundHandler because it may not exist if the connection never succeeds.
CLIENT-1115 Support bitwise operations. This feature requires server versions >= 4.6.
CLIENT-1116 Support nested CDT operations. This feature requires server versions >= 4.6.
CLIENT-1118 Support mixed security modes in cluster to enable rolling upgrade with security changes.
Fix TlsPolicy javadoc.
Document default value in policy fields.
Benchmarks - Add clusterName command line argument.
Benchmarks - When replica command line argument is specified, set batch policy in addition to read policy.
Benchmarks - Default asyncMaxCommands to 100.
CLIENT-1089 Use first valid seed node when iterating through seeds on cluster initialization. That seed node will provide the other peer nodes in the cluster.
CLIENT-1113 Fix class cast exception when timeoutDelay is enabled when using netty async commands.
TOOLS-1342 Support write only (write) privilege for user roles. This feature requires server version that also supports write only privilege.
TOOLS-1343 Support IP address whitelist functionality for user roles.
CLIENT-1078 For replica PREFER_RACK, do not retry on same node where command failed if a fallback node exists on any rack.
Add policy socketTimeout, totalTimeout and maxRetries to exception messages when available.
Wrap socket IOException in an AerospikeException.Connection.
Add --sendKey command line argument to benchmarks.
CLIENT-1075 Retry when socket errors occur during user authentication on newly created connections.
CLIENT-1077 Retry when current node has exhausted all connections.
Remove references to old deprecated SSLv3 protocol.
CLIENT-1068 Support new relaxed read modes for SC namespaces.
Replace linearizeRead boolean with ReadModeSC enum. See Incompatible change.
Rename Policy consistencyLevel to readModeAP.
Add readModeAP and readModeSC command line arguments to benchmarks.
CLIENT-1063 In async/netty, decrement node's total connection count when new connections are attempted, but fail to connect.
CLIENT-1066 Wrap byte keys in ByteBuffer when returning a TreeMap.
Generate "Cluster has been closed" exception if client/cluster was closed prior to issuing a database command.
Do not retry on error code NO_MORE_CONNECTIONS.
Throw IllegalArgumentException when resource not found.
Fix examples "-d" command line argument to log debug messages.
In query engine, convert starts_with, ends_with and containing to use predexp instead of lua.
In query engine, Remove lua code generation. Convert Map and List operations to predexp. Add new qualifier exception type.
In query engine, Fix incorrect iteration type for mapkeys.
CLIENT-1059 Use stack based connection pools for more aggressive trimming of idle connections.
CLIENT-1057 Conform to server fallback and retry behavior specification.
AER-6009 Support new server "truncate-namespace" info command.
Add rackId and preferRack replica arguments to benchmarks.
QueryEngine improvements and fixes. Thanks to Aloren for the improvements.
CLIENT-1055 Add iteration and node to more AerospikeException messages.
CLIENT-1055 Log policy variables on errors when Aerospike log is enabled in DEBUG mode.
Default socketTimeout to 30 seconds for all commands.
Remove old deprecated AsyncClient. Async functionality still exists in AerospikeClient methods that take in an event loop argument. See Incompatible change.
Remove old deprecated Statement setFilters() and getFilters(). The server accepts only one filter.
Remove "Value.UseDoubleType" global variable. Always use server double type to store floating point values.
Remove "ClientPolicy.requestProleReplicas". Replicas will always be requested.
Remove all unused old batch direct protocol code.
CLIENT-1053 Do not clear partition map entry when a node reports that it no longer owns that partition entry. The client will now wait until another node claims ownership of that partition with the proper regime. This is done to remove any possible gaps in node ownership.
CLIENT-1056 If batch read transaction fails on a node, retry batch keys from that node to other nodes when replica policy is SEQUENCE and maxRetries is not exceeded.
Fix getNode() to return master node on write operations when chosen replica is not the default.
Roundup benchmark latency results when necessary.
Check for null in Host equals().
AER-5957 Support rack aware clients.
CLIENT-1049 Provide more descriptive error message when namespace can't be found in partition map.
Support ignoreCase for EQ qualifier in query-engine extension. Enhancement provided by Aloren.
Remove the ability to force old batch direct protocol on the client because the server will be removing support for the old batch direct protocol. See Incompatible change.
OPS-2813 For write transactions, use user defined "as_policy_write.replica" for replica policy instead of hard coded AS_POLICY_REPLICA_MASTER.
Remove unused error codes.
Change admin message version to 2.
CLIENT-1047 Recover connection after client timeout. Set Policy.timeoutDelay to value greater than zero (3000 ms recommended) to enable connection recovery.
AER-5945 Add INFINITY and WILDCARD values for use in CDT map/list comparators.
AER-5955 Support truncate info command argument "lut=now" for servers that require it.
Upgrade maven-compiler-plugin version to 3.8.0.
Fix docs to note that the server executes operations in the same order as the operations array in operate() call.
Remove system-path from travis aerospike.conf.
Add getProcessSize() and getQueueSize() to EventLoop interface.
Update ClusterStats to include event loop statistics.
Add ClusterStats toString().
Use standard apidocs directory when creating javadocs.
Create sources and javadocs on demand, but not automatically.
Change travis script to perform "mvn install" instead of "mvn package".
Require minimum java version 1.8. Refer to Incompatible change.
Move query engine code from aerospike-helper repository to extensions directory.
Support travis CI.
CLIENT-1036 Give more descriptive messages for all exceptions.
CLIENT-1038 Throw InvalidNode exception instead of returning random node when master and prole nodes are unavailable for AP mode (now consistent with SC mode).
CLIENT-1040 Add descriptive error messages to InvalidNode exception.
Log info message when regime < old regime.
Replace "Environment.Newline" with "System.lineSeparator()". Delete "Environment.java".
Support ability to switch between GNU and Bouncy Castle crypto libraries. See Crypto.
Create new extensions directory.
Add reactor-client library to extensions. AerospikeReactorClient extends AerospikeClient to provide a Reactive streams interface. Thanks to Sergii for this new library!
Use parent pom for version, dependency and plugin management. Thanks to Nastya for this contribution!
Add new run_tests script.
CLIENT-1031 Support TLS mutual authentication when using netty async framework.
Do not try to detect load balancer if address is localhost.
AER-5891 Support list/map nearest key/value get/remove operations (relative rank range). This feature requires server versions >= 22.214.171.124.
AER-5892 Support ListWriteFlags, NO_FAIL and PARTIAL. Add MapWriteFlags which includes NO_FAIL and PARTIAL. This feature requires server versions >= 126.96.36.199.
Support cluster statistics for connection and thread pool usage.
CLIENT-1025 Convert signed byte to int correctly (with & 0xFF) in admin protocol.
Set socketTimeout to totalTimeout when totalTimeout > 0 and socketTimeout is zero for both sync and async commands.
Use IdentityHashMap for maps where key's hashCode and equals is not defined.
Document that benchmarks "replica" default is "sequence".
CLIENT-1024 Support scan/query consistency validation using cluster key. Set failOnClusterChange to true in ScanPolicy/QueryPolicy to enable this validation. This feature requires Aerospike Server version >= 188.8.131.52.
CLIENT-1019 Disable load balancer detection if server does not support "service-clear-std" info command. This will allow client to work with old server versions. Also, continue with original seed if server's return IP address is invalid (probably internal cloud IP address).
In query, always return all bins if binNames array is empty.
CLIENT-1011 Support cluster seed that is a load balancer.
Add new info request which takes a list of info requests.
Add support for multiple batch namespaces in benchmarks. Thanks to anirudh-raja for the enhancement.
Add CDT map value list range example.
CLIENT-1015 Set connect timeout for TLS connections.
Change default socket idle timeout for scan/query to 30 seconds.
Add separate READ_REPLACE workload in benchmarks, so it will display correctly in parameter summary.
Command line authentication mode is now case-insensitive in benchmarks, examples and test.
Support authentication mode (ClientPolicy.authMode). When user authentication is enabled, the mode specifies internal server authentication or external (LDAP etc) authentication.
Support separate login timeout (ClientPolicy.loginTimeout) when authentication is enabled.
Support TLS specifically for logins (TlsPolicy.forLoginOnly) in addition to full TLS. If enabled, TLS will be used for login and clear sockets will be used for transactions.
Support UDF function calls in benchmarks. Thanks to anirudh-raja for the enhancement.
CLIENT-1005 Send socket timeout to server for queries that do not have a filter (effectively a scan).
CLIENT-1001 Add support for maxSocketIdle check in addition to socket peek in async NIOConnection.
Handle list extension type returned by server on sorted list operations.
Default "AerospikeException.resultCode" to generic "ResultCode.CLIENT_ERROR" instead of zero.
Support LDAP authentication.
Add list set operation with ListPolicy argument.
Do not send ListOrder argument on list append() and list increment() because these operations are not valid for ordered lists.
Fix list increment() argument passing.
Support PrivilegeCode.DATA_ADMIN in fromId().
Make PredExp serializable.
Support async delay queue per event loop. When EventPolicy.maxCommandsInProcess is reached, future async commands are stored in the delay queue for later execution. This is useful for limiting socket usage while allowing for a burst of async commands. The delay queue is not enabled by default.
Add new list and map operations on client side.
Return IndexTask from dropIndex().
Add option to print Aerospike Benchmarks version.
Add alternative latency format (alt) in benchmarks that includes transaction count.
Add latency summary in benchmarks.
Prevent rogue node from taking ownership of a partition previously owned by legitimate strong consistency node.
In benchmarks, perform a single write when write specified in batch mode.
In benchmarks, do not multiply batch transactions by batch size, so batch tps is really batch transactions per second.
Remove enterprise requirement in truncate docs.
Add inDoubt to AerospikeException. inDoubt indicates if a write command may have completed even though an exception was thrown. This scenario can occur on a client timeout for a command that has been sent to the server.
Add forceSingleNode to ClientPolicy for testing purposes (default false). forceSingleNode uses only the first seed node when communicating with the cluster. Do not enable in a production environment.
Add javadocs comment about 8KB limit for keys.
Support SSLContext configuration in TlsPolicy.
Remove TlsPolicy encryptOnly field because the server has dropped support for it.
Disable retries by default for writes.
Use read defaults (maxRetries = 2) on operate calls when the policy is null and all operations are reads.
Set query idle socket_timeout default to 10 seconds.
Make SERVER_NOT_AVAILABLE a client generated error.
Use PARTITION_UNAVAILABLE for server error code 11.
Support Server Strong Consistency mode.
CLIENT-938 Throw exception in createIndex() when index already exists. Also, throw exception in dropIndex() when index does not exist. See Incompatible change.
CLIENT-929 Remove LDT functionality. Large data types have been deprecated on the server.
Do not allow nodes into cluster until node partition maps are fully initialized (partition-generation != -1).
In waitTillStabilized(), replace timeout with max cluster tend iterations(3).
There is no need to search partition map on a single node cluster.
Rename ResultCode NO_XDS to ALWAYS_FORBIDDEN.
Support CDT server list increment operation. Requires Aerospike Server 3.15 or greater.
Add new Record getGeoJSONValue() and getGeoJSONString().
CLIENT-934 Direct NIO async socket reads fail when socket buffer size greater than ByteBuffer capacity. Fix by setting ByteBuffer limit to socket buffer receive size whenever a new ByteBuffer needs to be created.
CLIENT-933 Client does not always revert to seeds when entire cluster is unreachable. Fix by reverting to seeds after all node info requests fail 5 consecutive times (5 seconds) regardless of cluster size.
Add copy constructors for policy classes that did not have them.
Add null check for exceptions in Cluster::seedNodes(). Thanks to Kenneth Jorgensen for the fix.
CLIENT-919 Support user configurable ThreadLocalData.DefaultBufferSize
Always check for maxRetries regardless of totalTimeout setting.
Distinguish between client and server timeout in exception message.
Fix null pointer exception in async commands when connection fails, a retry occurs, and the socket idle timeout is in effect.
Retry async commands by placing commands at the end of the queue so other async commands have a chance to run.
Treat socketTimeout as a socket idle timeout when processing both sync and async commands.
Fix async direct NIO command where socket read event was not registered after partial socket write completed.
Fix null pointer exception on synchronous batch, scan, query commands when a retry occurs.
Decrement async connection count by calling closeAsyncConnection() instead of socket close() directly when connection validation fails.
Remove waitTillComplete() and notifyComplete() in async examples because most async applications should not use these synchronization methods. Async examples will now run in parallel, so the log message order will be mixed.
Only set "peers.genChanged" to true when peers protocol is supported by the server.
Disallow GeoJSON type as a key.
Handle polling tasks with a timeout the same way as a no-timeout task.
On AerospikeClient close(), return before actual shutdown if called from an event loop thread. This is done to prevent deadlock.
Support Netty Epoll event loops (EpollEventLoopGroup) on Linux based operating systems.
Fix Connection.IsClosed() bug (introduced in 4.0.0) by restoring lastUsed timestamp on connect. Cluster tend connections will now stay open between tend intervals.
Complete async rewrite. AerospikeClient now supports both async and sync methods. Async methods can use either Netty or direct NIO event loops.Async methods also allow the target event loop to be specified. Benchmarks and examples have been modified to use the new async methods.
The old AsyncClient is still supported, but has been marked obsolete. The async methods in AerospikeClient perform significantly faster than the old AsyncClient, so it's recommended to port your async applications to use the new AerospikeClient async methods.
See Async Documentation.
Split Policy timeout into socketTimeout and totalTimeout.
Changed Policy replica default to Replica.SEQUENCE.
Changed Policy maxRetries default to 2.
Removed Policy retryOnTimeout. If a transaction timed out on socketTimeout, retries will now occur until maxRetries is exceeded or totalTimeout is reached.
See Incompatible API change for more details on Policy changes.
CLIENT-891 Propagate batch read consistencyLevel to sub-transactions.
AER-5650 Fixed PredExp.geoJSONValue().
Return key not found exception (instead of returning null record) for UDF execute() or operate() command where operations include a write. This is done to be consistent with other writes (put(), add()…) when key is not found.
In cluster tend, set node’s new peers generation only if all referenced peers are added to the cluster.
Support ByteValue on client side. These values are sent/received to/from the server as integers.
In ExecuteTask, task is now not considered complete when the task is not found.
CLIENT-864 Add predicate expression function PredExp.recDigestModulo().
CLIENT-867 Support configurable scan socket write timeout on server side (ScanPolicy.socketTimeout).
CLIENT-878 Fix node reconnect failure after cluster-wide restart.
Support query filtering with predicate expressions. Requires Aerospike Server versions >= 3.12.
Support new truncate namespace/set functionality. Requires Aerospike Server versions >= 3.12.
Support multiple connection pools per node to reduce contention on machines with large number of cpu cores.
Add/Use Statement.setFilter() because the old setFilters() only allowed one filter.
Convert exception to AerospikeException when necessary.
Mark LDT functionality as deprecated.
CLIENT-813 Authenticate user in security mode if tend connection fails and a new tend connection is created.
Add LuaCache.clearPackage() which can be called to clear client's lua cache.
Verify Policy.scanPercent > 0 and <= 100.
Support TLS on command line in benchmarks, examples and test.
Support TLS serial number exclude list.
Support TLS search "subject alternative names" in addition to certificate names.
Support TLS mutual authentication.
Set default TLS protocol to TLSv1.2.
NullValue is now cached to avoid unnecessary object instantiations and improve performance. Fix provided by Ganet.
Restructure benchmarks. Support ACCEPT and REJECT async modes.
Remove methods that have been deprecated for over a year.
Support TLS 1.2 secure socket protocol. Dependent on future Aerospike Server release.
Support IPv6 socket protocol. Dependent on Aerospike Server 3.10+.
Support cluster-name verification. Dependent on Aerospike Server 3.10+.
Support new peers info protocol. Dependent on Aerospike Server 3.10+.
Support retryOnTimeout policy field.
Support "Replica.SEQUENCE" for single record reads.
Minimum Java version is now 7.
Close selectorManagers if cluster initialize fails.
Make RecordSetIterator and ResultSetIterator return consistent hasNext() value regardless of many times it is called.
Handle case where multiple nodes go down simultaneously, but still protect against split brain rogue node.
Support durable deletes.
Close socket on connect error so underlying file descriptor can be recycled.
Fix map tests according to new server behavior.
Always use master node for record UDF calls.
Do not peek for map extension type when map is empty.
Use parse error when appropriate.
Support new server map operations. Requires Aerospike Server versions 3.8.4 and above.
Add AerospikeClient.registerUdfString() to register lua functions contained in a string.
Add AerospikeClient.queryAggregateNode() to perform an aggregation query on a specific node.
Set default main class for target jars in benchmarks and examples.
For single node cluster, drop node if 5 consecutive info requests fail without checking for seeds. Seeds will be checked in next cluster tend iteration.
Avoid stomping AdminCommand buffer when opening new connections for enterprise administration commands.
Add geoWithinRegion(), geoWithinRadius() and geoContains() query filter methods with IndexCollectionType argument.
Add geo example and tests.
Close socket if connect() succeeds, but getInputStream() or getOutputStream() fails.
Skip over unknown type extensions in Unpacker.
Do not add key to hashmap if it is null in Unpacker.
xorshift128+ algorithm has changed slightly.
In benchmark, generate a predictable value for first bin in integer mode.
Rework NodeValidator to handle all edge cases.
Ensure connection is closed if NodeValidator returns a duplicate node.
Catch connection failure and decrement connectionCount.
Rename ClientPolicy maxThreads to maxConnsPerNode. See Incompatible API change.
Enforce maxConnsPerNode as a hard limit. Return new result code NO_MORE_CONNECTIONS if this limit would be exceeded.
Use separate connection for tend thread to guarantee a tend connection.
Support new async policy timeoutDelay which delays closing of connection if a timeout occurred. The delay may allow the transaction to finish so the socket can be reused. The user is still notified immediately of the timeout and the delayed response is discarded.
Validate async connections using non-blocking read of 1 byte.
Retry async connections in connection pool until a valid connection is found or pool is exhausted.
Remove all other async retries.
Reduce result codes that require closing of socket.
Support GeoJSON in list/map.
Remove methods that have been deprecated for over one year.
Do not test LDT if server has disabled LDT.
Use ClientPolicy.timeout for connection timeout when refreshing nodes in cluster tend.
CLIENT-629 Support "services-alternate" info request during cluster tend.
Added new list range operations.
Support long key ranges in benchmarks.
CLIENT-590 Pass in set name for batch reads when BatchPolicy.sendSetName is true. This is necessary when authentication is enabled and security roles are defined on a per set basis. Requires Aerospike Server versions >= 3.7.3.
CLIENT-650 Generate scan/query task ids using RandomShift instead of nano time.
Enforce server's single query filter constraint on client.
Task waitTillComplete()/queryIfDone() no longer treats error conditions as done. Instead, the error is stored and status request is retried until timeout. If timeout, the last error is thrown as an exception.
In benchmark insert mode, write exactly the number of keys specified.
Support new list operations (ListOperation) that can be used in client operate(). This functionality requires Aerospike Server versions >= 3.7.
Support ScanPolicy.includeLDT flag. If includeLDT is true, LDT data structures will be returned on scan. The default remains false.
Added new query filter geoWithinRadius(). Also, renamed geoWithin() to geoWithinRegion().
Support double when returning lua number values in aggregation queries.
Support ycsb format and micro-second latency output in benchmarks.
Support complex command sequences (ie. read x records, write y records with percentage variation) in benchmarks.
Added default policy getters to IAerospikeClient and IAsyncClient. Have IAerospikeClient inherit from Closeable.
Added LoadState.install(globals) to LuaInstance constructor.
Increased ClientPolicy.maxSocketIdle default to 55 seconds.
IsConnected() now returns false when all nodes haven't responded to cluster tend requests for 5 consecutive iterations (usually 5 seconds).
Only read one batch/scan/query record group per async iteration to improve fairness and give other transactions the chance to complete before timing out.
Support new server geo-spatial queries. Available in Server Version 3.7 and above.
CLIENT-515 Benchmark enhancement for expiration of record as commandline option.
Added new unit tests.
Check for null in LargeList.exists().
For "jobs" info command used to track scan/query jobs, handle both old and new server formats.
Override ttl, so tests will work regardless of default-ttl configuration on the server.
Support message pack format specification additions in list/map deserializations.
Support new server double data type. This functionality requires Aerospike Server versions >= 3.6.0 and is currently disabled by default. See More Information.
Use jobs info command for ExecuteTask wait.
Added extra information to async timeout exception.
Added junit tests.
Check if asynchronous selection key has been initialized before checking key's interestOps.
Do not re-add asynchronous command to timeout queue on retry. It only needs to be added once.
Do not re-queue asynchronous command if authentication is enabled and succeeds. Just set interest ops to write.
Always run asynchronous authentication status check in selector thread (never offload to another thread).
Send original key (with namespace/set) back to sequence listeners in asynchronous batch.
Support new batch index protocol which allows multiple namespaces, bin name filters, and read types (read, exists) to be specified in a single batch call. This new functionality is supported by Aerospike Server versions >= 3.6.0 (which has not been released yet). The old batch direct protocol is still supported for compatibility with older servers.
Added Record.getTimeToLive() which converts server absolute time back to expiration ttl.
Implement equals on every extended Value class.
Implement hashCode and equals on Bin, Value and Filter.
Ignore sleepBetweenRetries when in async mode.
Change ClientPolicy.failIfNotConnected default to true.
Added ThreadDaemonFactory which prepends "Aerospike" prefix to thread name.
Ensure command is not being simultaneously processed in task thread before timing out in async mode.
Mark connection's lastUsed as volatile.
AER-3648 Handle duplicate node-ids caused by multiple ethernet interfaces.
Fix LargeList.filter() command arguments.
Transfer timeout from command to future task.
Check for zero-sized arrays and call onSuccess() in async batch get.
Support Iterable interface in RecordSet and ResultSet.
Support new data-admin security role for enterprise edition.
Show node IP address in timeout exception.
Support distributing read commands over replicated nodes in addition to master node. See "ClientPolicy.requestProleReplicas" and "Policy.replica". This functionality is disabled by default and can be enabled by users if using Aerospike server versions >= 3.5.9.
Support asynchronous execute() for single records. Added asynchronous User-Defined Function (UDF) call example.
Added new LargeList methods which are supported by Aerospike server versions >= 3.5.8.
Replaced configuration userModule/createModule with LargeList.setPageSize().
Removed unnecessary LargeList getCapacity() and setCapacity().
If the call to onSuccess() generates an exception in async mode, call onFailure(). This is important in cases where user's code is waiting for a completion notification which wasn't yet called in onSuccess().
Fixed a bug with Value.equals().
Read resource files using resource stream instead of File.
Support reading User-Defined Functions (UDFs) from resources.
Support boolean bin values on client side. The server does not natively handle boolean, so store as long. Use Record.getBoolean(name) to retrieve.
Update lua list/map/bytes library to be consistent with latest server changes.
Removed as.lua resource file.
Added Bin constructors for list/map. Previous code that wrote list/map bins with the default object constructor may now need to be modified to preserve previous behavior. See Incompatible API change.
Added list bin append via User-Defined Function (UDF) example (UserDefinedFunction.appendListUsingUdf()).
Make mismatched batch digests an error condition.
Fix unpacker bytes to short conversion for negative numbers < -128.
Remove zero size packet exception and keep processing query/scan/batch. The server will eventually send the finish notification.
Ensure query threads are initialized before threads are aborted when a query initialization exception occurs.
Always return 64 bit integers (long) for numbers retrieved from the server. Code that casts record values to Integer must be changed to call "Record.getInt()" which performs the proper casting. See Incompatible API change.
Support secondary indexes on bins containing a collection.
Support asynchronous query.
Support maxConcurrent in asynchronous batch, scan and query.
Add asynchronous query and store key examples.
Add IAerospikeClient and IAsyncClient interfaces that should be more mock friendly.
Set default set in benchmarks to "testset".
Support new server error codes.
Support user-defined roles with namespace/set scoping. Rename UserRoles to User.
Send key on both reads and writes when "Policy.sendKey" is true.
Fix user key send buffer byte size calculation.
Make receiving a zero-sized data packet from server an error condition which results in a socket close.
Support read consistency level.
Support transaction commit level on writes.
Support double/float on client-side. Server will store these values as longs.
Support large list remove range.
Separate large collection userModule into createModule and filterModule.
Use xorshift128plus algorithm to generate random values in benchmarks.
Validate that value type can be used as a key.
Server has been handling NOBINDATA flag correctly for a long time on read record header, so remove old workaround code.
Check if server enables LDT before running LDT examples.
Create generic thread Executor class used by scan, batch, and udf execute.
Change "Policy.maxRetries" default from 2 to 1.
Change scan/query maxRetries value to zero in default constructor (used to be changed in transaction code).
Create separate default policies for asynchronous commands.
Removed deprecated RecordExistsAction generation enum values. Use "WritePolicy.generationPolicy" instead.
Add udf methods that take WritePolicy (instead of base Policy) as an argument, so ttl can be specified.
Support large list and large stack operations in benchmarks.
Support record replace option in benchmarks.
Empty blocking queues instead of interrupting threads on query cancel. Thread interrupts can possibly occur after thread task has completed and can cause problems when thread is re-used from a thread pool.
Send user key in multi-operation call if set in write policy.
Always send taskId on query/scan.
Fix aggregation query race condition.
Handle record not found case in large collection size() and getCapacity().
Disable doclint when generating javadocs in java 8.
Add queryNode() for querying on a single node.
Generate query taskId if not set. Change taskId from int to long.
Support batch get in benchmarks.
Return immediately if batch keys length is zero.
Detect "split cluster" case where rogue node thinks it's a one-node cluster.
Convert AerospikeException from a checked exception to a runtime exception.
Batch performance improvements.
Add BatchPolicy. Run batch requests in sequence on transaction thread when BatchPolicy.maxConcurrentThreads = 1.
Add large list update().
Large list find() now returns null when requested record or item entry does not exist. Previously, an exception was thrown.
Add Record integer conversion methods.
Add new feature in benchmark to read user defined keys from a given file.
Support new server error codes.
Unblock query threads when caller calls close before all records have been read and the queue is full.
Calculate send user key size when sendKey is enabled.
Check for null when converting lua object to java object.
Support user/role administration and authentication.
Support key storage/retrieval functionality. Note that "Key.userKey" field type has changed from "Object" to "Value".
Support new lua bytes library.
Store default policies in client so they don't have to be instantiated on each command.
Add IP translation capability when using Amazon instances.
Add large collection Add(List) method that takes in a list.
Make cluster tend interval configurable.
Upgrade luaj library from 3.0-beta to 3.0.
Allow runbenchmarks command to run without arguments.
Wakeup async selector when offloaded thread registers a read request.
Fix bin name filters when running query without additional filters.
Parse info response for errors.
Check if task has already completed before querying servers for status.
Support setting LuaConfig.SourceDirectory from command line (i.e. java -Dlua.dir="directorypath" myapp).
Support passing list/map to client lua functions in queryAggregrate().
Support remove() in large collections.
Classes implementing the 'close()' method now implement the java.io.Closeable interface to enable the use of java7 try-with-resources construct.
Add IntelliJ project file extension to .gitignore.
Use "LuaCache.class.getClassLoader().getResourceAsStream(path)" instead of "ClassLoader.getSystemResourceAsStream(path)" when loading lua resource files.
Propagate error message when query aggregation fails.
Use more efficient algorithm to determine if all scan/batch/query threads have completed.
Update copyright notice.
Handle null for lua list and map elements.
Fix length calculation for udf calls.
Add new result codes.
Keep connection on more errors than before.
Overhaul benchmark code. Support reporting of not found errors after data has been initialized.
Check for null in log enabled methods.
Check for null bins in Record.toString().
Use AtomicReferenceArray for partition map node array.
Reduce cluster tend polling interval to one second.
Declare complete as volatile for batch/scan/query threads.
Handle nested lists/maps in aggregations.
Use thread pool for lua thread.
Put connection back into pool for some error codes.