Java Client Library Release Notes

  • 4.3.1
    Release Date: February 20, 2019

    Features

    • 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.

  • 4.3.0
    Release Date: January 24, 2019

    Features

    • 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.

    Fixes

    • 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().

  • 4.2.3
    Release Date: November 27, 2018

    Features

    • 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.

    Fixes

    • 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.

  • 4.2.2
    Release Date: October 26, 2018

    Features

    • 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.

    Fixes

    • 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.

  • 4.2.1
    Release Date: October 11, 2018

    Features

    • Add getProcessSize() and getQueueSize() to EventLoop interface.

    • Update ClusterStats to include event loop statistics.

    • Add ClusterStats toString().

    Fixes

    • 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".

  • 4.2.0
    Release Date: October 2, 2018

    Features

    • Require minimum java version 1.8. Refer to Incompatible change.

    • Move query engine code from aerospike-helper repository to extensions directory.

    • Support travis CI.

    Fixes

    • 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".

  • 4.1.11
    Release Date: September 4, 2018

    Features

    • 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.

  • 4.1.10
    Release Date: August 23, 2018

    Fixes

    • CLIENT-1031 Support TLS mutual authentication when using netty async framework.

    • Do not try to detect load balancer if address is localhost.

  • 4.1.9
    Release Date: July 31, 2018

    Features

    • AER-5891 Support list/map nearest key/value get/remove operations (relative rank range). This feature requires server versions >= 4.3.0.0.

    • AER-5892 Support ListWriteFlags, NO_FAIL and PARTIAL. Add MapWriteFlags which includes NO_FAIL and PARTIAL. This feature requires server versions >= 4.3.0.0.

    • Support cluster statistics for connection and thread pool usage.

    Fixes

    • 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".

  • 4.1.8
    Release Date: June 4, 2018

    Features

    • 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 >= 4.3.0.2.

    Fixes

    • 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.

  • 4.1.7
    Release Date: May 17, 2018

    Known Issues

    • CLIENT-1019 Client will work only with server versions 3.11.x or above. Fixed in version 4.1.8

    Features

    • 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.

    Fixes

    • 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.

  • 4.1.6
    Release Date: April 20, 2018

    Features

    • 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.

    Fixes

    • CLIENT-1005 Send socket timeout to server for queries that do not have a filter (effectively a scan).

  • 4.1.5
    Release Date: March 16, 2018

    Fixes

    • 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.

  • 4.1.4
    Release Date: March 5, 2018

    Features

    • Support LDAP authentication.

    Fixes

    • 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.

  • 4.1.3
    Release Date: February 16, 2018

    Features

    • 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 (not released on server yet).

    • 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.

    Fixes

    • 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.

  • 4.1.2
    Release Date: January 12, 2018

    Features

    • 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.

    Fixes

    • Add javadocs comment about 8KB limit for keys.

  • 4.1.1
    Release Date: December 7, 2017

    Features

    • Support SSLContext configuration in TlsPolicy.

    Fixes

    • 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.

  • 4.1.0
    Release Date: November 10, 2017

    Features

    • Support Server Strong Consistency mode (not released on server yet).

    Fixes

    • 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.

  • 4.0.8
    Release Date: August 29, 2017

    Features

    • Support CDT server list increment operation. Requires Aerospike Server 3.15 or greater.

    • Add new Record getGeoJSONValue() and getGeoJSONString().

    Fixes

    • 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.

  • 4.0.7
    Release Date: August 7, 2017

    Features

    • CLIENT-919 Support user configurable ThreadLocalData.DefaultBufferSize

    • Support QueryPolicy.includeBinData

    Fixes

    • Always check for maxRetries regardless of totalTimeout setting.

    • Distinguish between client and server timeout in exception message.

  • 4.0.6
    Release Date: July 7, 2017

    Fixes

    • 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.

  • 4.0.5
    Release Date: July 5, 2017

    Fixes

    • 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.

  • 4.0.4
    Release Date: June 27, 2017

    Fixes

    • Fix null pointer exception on synchronous batch, scan, query commands when a retry occurs.

  • 4.0.3
    Release Date: June 19, 2017

    Fixes

    • Decrement async connection count by calling closeAsyncConnection() instead of socket close() directly when connection validation fails.

  • 4.0.2
    Release Date: June 16, 2017

    Fixes

    • 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.

  • 4.0.1
    Release Date: May 30, 2017

    Features

    • Support Netty Epoll event loops (EpollEventLoopGroup) on Linux based operating systems.

    Fixes

    • 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.

  • 4.0.0
    Release Date: May 22, 2017

    Features

    • 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.

    Fixes

    • 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.

  • 3.3.4
    Release Date: April 4, 2017

    Features

    • CLIENT-864 Add predicate expression function PredExp.recDigestModulo().

    • CLIENT-867 Support configurable scan socket write timeout on server side (ScanPolicy.socketTimeout).

    Fixes

    • CLIENT-878 Fix node reconnect failure after cluster-wide restart.

  • 3.3.3
    Release Date: March 15, 2017

    Features

    • 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.

    Fixes

    • Add/Use Statement.setFilter() because the old setFilters() only allowed one filter.

    • Convert exception to AerospikeException when necessary.

  • 3.3.2
    Release Date: January 4, 2017

    Features

    • Mark LDT functionality as deprecated.

    Fixes

    • 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.

  • 3.3.1
    Release Date: November 16, 2016

    Features

    • 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.

    Fixes

    • 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.

  • 3.3.0
    Release Date: October 4, 2016

    Features

    • 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.

    Fixes

    • 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.

  • 3.2.5
    Release Date: August 29, 2016

    Features

    • Support durable deletes.

    Fixes

    • 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.

  • 3.2.4
    Release Date: July 1, 2016

    Fixes

    • Do not peek for map extension type when map is empty.

    • Use parse error when appropriate.

  • 3.2.3
    Release Date: June 1, 2016

    Features

    • 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.

    • Add Record.equals().

    • Set default main class for target jars in benchmarks and examples.

    Fixes

    • 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 commmands.

  • 3.2.2
    Release Date: April 12, 2016

    Features

    • Add geoWithinRegion(), geoWithinRadius() and geoContains() query filter methods with IndexCollectionType argument.

    • Add geo example and tests.

    Fixes

    • 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.

  • 3.2.1
    Release Date: March 3, 2016

    Fixes

    • Rework NodeValidator to handle all edge cases.

    • Ensure connection is closed if NodeValidator returns a duplicate node.

    • Catch connection failure and decrement connectionCount.

  • 3.2.0
    Release Date: February 24, 2016

    Features

    • 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.

    Fixes

    • Do not test LDT if server has disabled LDT.

    • Use ClientPolicy.timeout for connection timeout when refreshing nodes in cluster tend.

  • 3.1.9
    Release Date: February 2, 2016

    Features

    • CLIENT-629 Support "services-alternate" info request during cluster tend.

    • Added new list range operations.

    • Support long key ranges in benchmarks.

    Fixes

    • 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.

  • 3.1.8
    Release Date: December 10, 2015

    Features

    • 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().

    Fixes

    • Support double when returning lua number values in aggregation queries.

  • 3.1.7
    Release Date: November 4, 2015

    Features

    • 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.

    Fixes

    • 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.

  • 3.1.6
    Release Date: October 5, 2015

    Features

    • 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.

    Fixes

    • Check for null in LargeList.exists().

  • 3.1.5
    Release Date: September 8, 2015

    Features

    • Add LargeList.exists().

    Fixes

    • 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.

  • 3.1.4
    Release Date: July 31, 2015

    Features

    • Support new server double data type. This functionality requires Aerospike Server versions >= 3.6.0 (not released yet) and is currently disabled by default. See More Information.

    • Use jobs info command for ExecuteTask wait.

    • Added extra information to async timeout exception.

    • Added Value.getFromRecordObject().

    • Added junit tests.

    Fixes

    • 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.

  • 3.1.3
    Release Date: June 26, 2015

    Features

    • 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.

    • Added AerospikeClient.removeUdf().

    Fixes

    • 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.

  • 3.1.2
    Release Date: May 14, 2015

    Features

    • Support Iterable interface in RecordSet and ResultSet.

    • Support new data-admin security role for enterprise edition.

    • Show node IP address in timeout exception.

    • Update license.

  • 3.1.1
    Release Date: April 15, 2015

    Features

    • 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 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().

    Fixes

    • 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.

  • 3.1.0
    Release Date: March 18, 2015

    Features

    • Support reading user defined functions 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.

    • Added Record.getString(name).

    • 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 example (UserDefinedFunction.appendListUsingUdf()).

    Fixes

    • Make mismatched batch digests an error condition.

  • 3.0.35
    Release Date: February 19, 2015

    Fixes

    • 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.

  • 3.0.34
    Release Date: February 6, 2015

    Features

    • 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.

    Fixes

    • 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.

  • 3.0.33
    Release Date: January 9, 2015

    Features

    • 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.

    Fixes

    • 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.

  • 3.0.32
    Release Date: November 18, 2014

    Features

    • 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.

    • Removed "Record.duplicates".

    • Add udf methods that take WritePolicy (instead of base Policy) as an argument, so ttl can be specified.

    • Add LargeMap.exists().

    • Support large list and large stack operations in benchmarks.

    • Support record replace option in benchmarks.

    Fixes

    • 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.

    • Fix LargeSet.exists().

  • 3.0.31
    Release Date: October 28, 2014

    Features

    • Always send taskId on query/scan.

    Fixes

    • Fix aggregation query race condition.

    • Handle record not found case in large collection size() and getCapacity().

    • Disable doclint when generating javadocs in java 8.

  • 3.0.30
    Release Date: October 10, 2014

    Features

    • 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.

    Fixes

    • Return immediately if batch keys length is zero.

    • Detect "split cluster" case where rogue node thinks it's a one-node cluster.

  • 3.0.29
    Release Date: September 25, 2014

    Features

    • 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.

    Fixes

    • 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.

  • 3.0.28
    Release Date: August 28, 2014

    Features

    • 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.

    Fixes

    • 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.

  • 3.0.27
    Release Date: August 1, 2014

    Features

    • 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.

    Fixes

    • Use "LuaCache.class.getClassLoader().getResourceAsStream(path)" instead of "ClassLoader.getSystemResourceAsStream(path)" when loading lua resource files.

    • Propagate error message when query aggregation fails.

  • 3.0.26
    Release Date: June 24, 2014

    Features

    • Use more efficient algorithm to determine if all scan/batch/query threads have completed.

    • Update copyright notice.

    Fixes

    • Handle null for lua list and map elements.

    • Fix length calculation for udf calls.

  • 3.0.25
    Release Date: June 9, 2014

    Features

    • Add new result codes.

    Fixes

    • 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.

  • 3.0.24
    Release Date: May 8, 2014

    Fixes

    • 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.