Java Client Library Release Notes

  • 8.1.0
    Release Date: March 21, 2024
    • The aerospike-client package has been split into aerospike-client-jdk8 and aerospike-client-jdk21. aerospike-client-jdk8 requires JDK versions 8+. aerospike-client-jdk21 supports virtual threads and requires JDK versions 21+. The dependency artifactId in your pom file must be changed accordingly.

    Features

    • CLIENT-2802 Add async connection latency to metrics.

    • CLIENT-2810 Include sub-exceptions in the main exception message when a transaction fails after at least one retry.

    • CLIENT-2816 Support QueryDuration enum in QueryPolicy. The QueryDuration LONG_RELAX_AP enum value requires server version 7.1+.

    • CLIENT-2817 Support readTouchTtlPercent in Policy and BatchReadPolicy. This feature requires server version 7.1+.

    Fixes

    • CLIENT-2808 Use same message format in timeout exceptions as all other exceptions.

    • CLIENT-2813 Remove GeoJSON map key query example because the server no longer supports GeoJSON map keys.

    • CLIENT-2785 Update map key docs to say that only string, integer and byte[] types are allowed as map keys.

    • CLIENT-2785 Update sendKey policy doc to say what happens when a user key is sent on a read operation.

    • Update PartitionFilter.after() doc to say that records in other partitions than the key's partition are filtered out. Also, mention why after() is not accurate for a secondary index query. Both digest and bval are required to determine a secondary index query cursor and bval is not passed in as an argument.

    • Update Exp.cond() doc to say that all action expressions must return the same type, with the exception being Exp.unknown().

    • Upgrade netty version to 4.1.107.Final per snyk.

    • Upgrade netty io_uring version to 0.0.25.Final per snyk.

  • 8.0.2
    Release Date: February 5, 2024
    • The aerospike-client package has been split into aerospike-client-jdk8 and aerospike-client-jdk21. aerospike-client-jdk8 requires JDK versions 8+. aerospike-client-jdk21 supports virtual threads and requires JDK versions 21+. The dependency artifactId in your pom file must be changed accordingly.

    Features

    • CLIENT-2764 Support persistent list indexes.

    Fixes

    • CLIENT-2775 Do not use batch repeat flag on batch writes when sendKey policy is true.

    • CLIENT-2755 Return error when command line object spec is invalid in benchmarks. Also, cleanup DBObjectSpec class and fix random generation when run multiple times.

    • Upgrade netty version to 4.1.104.Final and netty io_uring version to 0.0.24.Final per Snyk.

    • Update add() docs to mention that the record/bin will be created by default when the record/bin does not already exist.

  • 8.0.1
    Release Date: January 17, 2024
    • The aerospike-client package has been split into aerospike-client-jdk8 and aerospike-client-jdk21. aerospike-client-jdk8 requires JDK versions 8+. aerospike-client-jdk21 supports virtual threads and requires JDK versions 21+. The dependency artifactId in your pom file must be changed accordingly.

    Fixes

    • CLIENT-2754 JDK8 Rename artifactId from aerospike-client to aerospike-client-jdk8.

    • CLIENT-2754 JDK21 Rename artifactId from aerospike-client to aerospike-client-jdk21.

    • CLIENT-2753 JDK21 Restore policy fields that were removed in version 8.0.0. The fields are ignored and deprecated since they are not necessary in the virtual threads implementation. This is done to preserve api compatibility between the new aerospike-client-jdk8 and aerospike-client-jdk21 packages.

  • 8.0.0
    Release Date: January 5, 2024
    • CLIENT-2741 Require Java JDK 21.

    Features

    • CLIENT-2741 Support virtual threads. This will boost sync command performance while retaining the simplicity of the sync api. Async command performance is unchanged.

    • CLIENT-2741 Replace thread local variables with heap-allocated variables.

    • CLIENT-2741 Run sync batch/scan/query node commands on virtual threads.

    • CLIENT-2741 Support ability for the user to run sync single record commands on virtual threads.

    • CLIENT-2741 Remove ClientPolicy threadPool and sharedThreadPool variables. See Incompatible API change.

    • CLIENT-2741 Remove BatchPolicy maxConcurrentThreads. All sync batch node commands are now run in parallel on virtual threads. See Incompatible API change.

  • 7.2.1
    Release Date: January 4, 2024

    Features

    • CLIENT-2737 Add setters to applicable policies. This is done to facilitate Spring's ConfigurationProperties.

    • Support transactions only on given partitions in benchmarks.

    Fixes

    • CLIENT-2667 In Java proxy client, create/Throw invalid namespace exception at the end of applicable batch reads on invalid namespace errors to be consistent with the java native client.

    • CLIENT-2674 Replace SimpleDateFormat/Date with DateTimeFormatter/LocalDateTime.

    • CLIENT-2706 In scan/query with maxRecords set, mark node's partitions for retry on next scan/query page when that node returns records that are discarded due to exceeding maxRecords.

    • CLIENT-2720 Include all partition unavailable errors in the scan/query sub-exception list.

    • Fix ACT random command line argument in benchmark code.

    • Use Thread.getName() in ThreadLocalData debug log messages.

    • Upgrade to netty 4.1.103.Final, grpc 1.59.0 and commons-cli 1.6.0.

    • Change ListExp/MapExp doc examples to use EXISTS when searching keys/values in list/map.

    • Clarify the purpose of gCallbackSet in Log.isSet() api doc.

  • 7.2.0
    Release Date: October 25, 2023

    Features

    • CLIENT-2293 Convert a batch node command to a single record command when the batch size for that node is one. This improves performance for small batch sizes.

    • CLIENT-2570 Support Exp.recordSize(). This feature requires server version 7.0+.

    • CLIENT-2584 Support secondary index on a blob (byte[]). This feature requires server version 7.0+.

    • CLIENT-2597 Support Record.getBytes().

    • CLIENT-2598 Support persistent map indexes. This feature requires server version 7.0+.

    Fixes

    • CLIENT-2483 Add returnType argument to relevant MapExp.removeBy() and ListExp.removeBy() methods. See Incompatible API change.

    • CLIENT-2439 Document valid map key types (string, integer, byte[], list).

    • CLIENT-2528 On scan/query where maxRetries is reached and there are no stored errors, throw exception with ResultCode.PARTITION_UNAVAILABLE because that is the only retryable error that does not result in stored errors.

    • CLIENT-2554 Use the standard Base64 class instead of the old javax.xml.bind.DatatypeConverter for base64 encoding/decoding. DatatypeConverter was used when bouncycastle crypto was enabled. DatatypeConverter has been removed from newer versions of the java JDK.

    • CLIENT-2554 Change PartitionParser to not send the trailing newline to the Base64 decoder, because this decoder does not allow the newline.

    • CLIENT-2554 Add manifest filters to examples/benchmarks “pom.xml” to fix jar-with-dependencies jar signing errors when running with bouncycastle crypto and newer versions of the java JDK.

    • CLIENT-2554 Fix the set_crypto sed script when running on Linux.

    • CLIENT-2600 Change latencyColumns default to 7 and latencyShift default to 1 in MetricsPolicy.

    • Fix ClusterStats doc to say invalidNodeCount and retryCount are cumulative since the client was started.

    • Update operate() docs to mention the bin result type will be a list when multiple operations occur on the same bin.

    • Change SERVER_NOT_AVAILABLE doc to say "Connection to server failed".

    • Upgrade netty version to 4.1.99.Final per Snyk.

    • Upgrade netty iouring version to 0.0.23.Final per Snyk.

  • 7.1.0
    Release Date: August 17, 2023

    Features

    • CLIENT-2469 Support rolling log policy (MetricsPolicy.reportSizeLimit) in MetricsWriter.

    Fixes

    • CLIENT-2513 Return java serialized blobs as raw byte[] instead of throwing an exception. See Incompatible API change.

    • Move LatencyType to from "com.aerospike.client.cluster" to "com.aerospike.client.metrics".

    • Allow info response field "build_ee_sha" to be null in test because it will be null for community builds.

  • 7.0.0
    Release Date: August 2, 2023

    Features

    • CLIENT-2352 Support extended client metrics. The current implementation periodically writes all metrics snaphots to a file.

    Fixes

    • CLIENT-2252 Remove all code that used java runtime serialization/deserialization. Deserialization of java runtime serialized objects has been identified as a security risk (CVE-2023-36480) by CodeQL team members @atorralba (Tony Torralba) and @joefarebrother (Joseph Farebrother). See Incompatible API change.

    • CLIENT-2455 Default Value.UseBoolBin to true. If true, the boolean (instead of integer) data type will be used on writes of boolean bins. See Incompatible API change

    • CLIENT-2323 Remove all references to single-bin mode. Server version 6.4 will remove single-bin functionality.

    • Remove Replica doc sentence that said "Scan and query are not affected by replica algorithm." as that is no longer true.

  • 6.2.0
    Release Date: August 7, 2023

    Fixes

    • CLIENT-2252 Disable java runtime serialization/deserialization. Deserialization of java runtime serialized objects has been identified as a security risk (CVE-2023-36480) by CodeQL team members @atorralba (Tony Torralba) and @joefarebrother (Joseph Farebrother). See Incompatible API change.

  • 6.1.11
    Release Date: June 21, 2023

    Fixes

    • CLIENT-2349 Catch Throwable whenever code depends on handling all possible exceptions.

    • Upgrade core netty version to 4.1.94.Final and netty-incubator-transport-native-io_uring to 0.0.21.Final.

    • Remove check for "single-bin" server configuration in tests since future Aerospike server versions will not support it.

  • 6.1.10
    Release Date: May 18, 2023

    Features

    • CLIENT-2073 Support read replica policy in scan/query. This includes PREFER_RACK which allows scan/query to be directed at local rack nodes when possible.

    • CLIENT-2304 Add Exp.inf() and Exp.wildcard().

    • CLIENT-2324 Support packing of Short, Byte, Character, Enum and UUID entries in list/map. Enum and UUID are packed as strings.

    Fixes

    • CLIENT-2314 Add socket connect time to totalTimeout deadline when connectTimeout is defined for sync commands. Async commands already behave this way.

    • CLIENT-2324 Fix ByteValue’s integer conversions by applying bitmask “(val & 0xff)” to the byte value.

    • CLIENT-2329 Handle case when scan/query maxRecords is defined and less than the number of assigned nodes. In this scenario, the scan/query previously could consistently return 0 records even when some records are still available in nodes that were not included in the maxRecords distribution.

    • CLIENT-2299 Only run ttl tests when the server configuration supports ttl.

    • Update doc to emphasize that Statement.setOperations() only works for background queries.

    • Update Exp.val(Map<?,?> map) doc to explain which map classes to use for ordered and unordered maps.

  • 6.1.9
    Release Date: April 12, 2023

    Fixes

    • CLIENT-2280 Set correct return types in list/map read expressions.

    • CLIENT-2280 Set bool return type for list read expressions with ListReturnType.EXISTS.

    • CLIENT-2280 Set bool return type for map read expressions with MapReturnType.EXISTS.

    • CLIENT-2280 Set map return type for map read expressions with MapReturnType.UNORDERED_MAP or MapReturnType.ORDERED_MAP.

    • CLIENT-2264 Add minor clarifications to javadoc.

  • 6.1.8
    Release Date: March 31, 2023

    Features

    • CLIENT-2216 Add infoTimeout to QueryPolicy. This timeout is used when running the "cluster-stable" info command during a query when failOnClusterChange is enabled and the server version is less than 6.0.

    • CLIENT-2244 Add SortedMap Bin constructor.

    • CLIENT-2244 Deprecate Map Bin constructor with extra MapOrder argument.

    • CLIENT-2181 Add TestMapExp sortedMapEquality() test.

    Fixes

    • Upgrade netty version to 4.1.89.Final.

    • Update listener docs. Remove mention of batch termination on exception in batch listener onRecord() docs because parallel batch node commands will still run to completion. Distinguish between batch behavior and scan/query behavior on onRecord() exception in RecordSequenceListener.

    • Document potential issue when using paginated queries and not iterating through all records in the RecordSet. Emphasize that PartitionFilter.after() does not work for a secondary index query.

  • 6.1.7
    Release Date: February 15, 2023

    Features

    • CLIENT-2142 Support ORDERED_MAP and UNORDERED_MAP return types in map operations. This feature requires server version 6.3+.

    Fixes

    • CLIENT-2143 Throw last exception received when scan/query maxRetries is exceeded.

    • Use DefaultParser instead of now deprecated PosixParser in benchmarks, examples and test command line applications.

    • Upgrade netty library version to 4.1.77.

    • Upgrade luaj-jse library version to 3.0.1.

    • Add example code in docs to demonstrate how to combine bit flags.

    • Document version specific behavior for Statement setIndexName().

    • Update HLLOperation params doc.

  • 6.1.6
    Release Date: January 4, 2023

    Fixes

    • CLIENT-2036 Document that the bin name limit is 15 characters.

    • CLIENT-2060 Only allow the cluster instance to be closed once. Future close calls are ignored after the first close call.

    • CLIENT-2112 Reset the foreground query “done” indicator before checking for errors in PartitionTracker.isComplete(). This resolves a potential hang when running queries that fail after multiple retryable errors.

    • Change TestIndex.createDrop() to ensure all nodes have dropped the index using direct info commands.

    • Change QueryPolicy.shortQuery doc to say "less than 100 records per node".

  • 6.1.5
    Release Date: December 6, 2022

    Features

    • CLIENT-2009 Support ClientPolicy closeTimeout which specifies how long to wait for pending async commands to complete before the cluster is closed.

    Fixes

    • CLIENT-1951 Consider all replicas when retrying a foreground scan/query after a partition unavailable error.

    • CLIENT-1996 Return Long instance when parsing an integer particle type even if integer byte length is not equal to 8. Currently, the server always returns length 8 for integer particle types.

    • CLIENT-2002 Check for error in info command response string when parsing racks and partitions.

    • CLIENT-2003 Handle "java.lang.Short" as a numeric Value. Also, add "Bin(String name, short value)" constructor and "Value.get(short)".

    • CLIENT-2022 Prevent batch operation with an invalid namespace from causing the entire batch to fail.

    • Mention that ClientPolicy clusterName must match the server config "cluster-name" in the service section.

  • 6.1.4
    Release Date: October 25, 2022

    Fixes

    • CLIENT-1932 Retry a foreground scan/query partition to a different replica when a partition unavailable error occurs.

    • CLIENT-1945 Allow parent BatchPolicy sendKey to be applied to all batch keys in batch write commands.

  • 6.1.3
    Release Date: October 19, 2022

    Fixes

    • CLIENT-1842 Throw exception when a read operation is used in a background query (execute()) or any operation is used in a foreground query (query()).

    • CLIENT-1860 Throw exception in estimateSizeUtf8() when the string is malformed.

    • CLIENT-1860 Use Charset “StandardCharsets.UTF_8” instead or charset name “UTF8” in UTF8 conversion methods.

    • CLIENT-1861 Validate that asyncMaxConnsPerNode >= event loop count.

  • 6.1.2
    Release Date: September 8, 2022

    Features

    • CLIENT-1806 Add functions for CDT context conversion to/from bytes/base64 encoded string.

    • Add operate() example that reads multiple bins.

    Fixes

    • CLIENT-1813 Handle background and aggregation queries with set names that do not exist on server nodes. The client now terminates a background/aggregation query when the server returns KEY_NOT_FOUND_ERROR on non-existent sets. Previous versions would timeout by default because the client was waiting for the INFO3_LAST bit to be set, which is not returned by the server.

    • Prevent division by zero if the node array is empty in getRandomNode().

    • Add Filter colType and packedCtx fields to equals() and hashCode().

    • Update default values in run_benchmark usage.

    • Align Value factory method with the primitive char.

  • 6.1.1
    Release Date: August 18, 2022

    Features

    • CLIENT-1805 Add "Value.ReturnMapForKeyValue" boolean. If true, the client will always return a map when "MapReturnType.KEY_VALUE" is specified in a map read operation and the server returns a list of key/value pairs. The default is false.

    Fixes

    • Remove check for 0x04 map extension bit in unpackMap() because the server never sends it.

    • Remove link to non-existent screenshot in examples readme.

    • DOCS-633 Add constraint "indexBitCount + minHashBitCount must be <= 64" to HLL api doc.

    • DOCS-766 Improve api doc for "BatchPolicy.maxConcurrentThreads".

    • Mention that PartitionFilter is both a filter and a cursor in api doc.

    • Extend api doc for MapExp.put().

  • 6.1.0
    Release Date: July 12, 2022

    Features

    • CLIENT-1780 Support creating a secondary index on elements within a CDT using context. This feature requires server version 6.1+.

    • CLIENT-1766 Add "Expression.fromBase64(byte[])" and "Expression.fromBase64(String)".

    • CLIENT-1786 Add "Value.DisableDeserializer". If set to true, disable default java object deserialization.

    • CLIENT-1772 Change client configuration defaults.

    • CLIENT-1772 Set maxConnsPerNode default from 300 to 100.

    • CLIENT-1772 Set asyncMaxConnsPerNode default from 300 to 100 via defaulting to maxConnsPerNode.

    • CLIENT-1772 Set maxSocketIdle default from 55 to 0 sec.

    • CLIENT-1772 Set maxErrorRate default from 0 to 100.

    • CLIENT-1772 Set totalTimeout default from 0 to 1000 ms for all commands except scan/query.

    • Allow buffers to be managed by descendants of Command.

    • Support CodeQL and Dependabot github actions.

    Fixes

    • CLIENT-1758 Assume background query is complete when the server 6.0+ returns "not found" in "query-show" info command. Keep old behavior when using server versions less than 6.0.

    • CLIENT-1759 Set correct batch read operation attribute for operations that do not include a bin name (ie Operation.get()).

    • CLIENT-1768 Allow read all bins operation (Operation.get()) to be used in batch operations. Disable respondAllOps policy when read all bins operation is used.

    • CLIENT-1767 Set scan/query iteration on each scan/query node sub-exception. The sub-exceptions are then displayed in the final scan/query exception message.

    • Do not obfuscate aggregation query errors when client side lua packages fail to load.

    • Auto close input output streams.

  • 6.0.1
    Release Date: June 2, 2022

    Features

    • CLIENT-1720 Set new flag bit on batch commands to instruct the server to return the key specific error code on an error that stops a response.

    • CLIENT-1733 Add ListReturnType.EXISTS and MapReturnType.EXISTS. This feature requires server version 6.1+.

    • CLIENT-1741 Add "Value.DisableSerializer". If set to true, disable default java object serialization.

    Fixes

    • CLIENT-1704 Fail on cluster initialization if the seed node is valid, but all seed node peers are not reachable and failIfNotConnected is true. This scenario occurs in AWS installations when peer nodes are configured with AWS internal IP addresses and the client is external to AWS.

    • Prevent the possibility of skipping an active node in getRandomNode() when accessing concurrently.

    • Do not expect duplicate records to exist in query examples because server version 6.1+ dedups query records.

    • Fix warnings generated by java 17.

  • 6.0.0
    Release Date: March 31, 2022

    Features

    • CLIENT-1654 Support partition query. This feature requires server version 6.0+.

    • CLIENT-1653 Support batch write, batch UDF execute and batch delete. This feature requires server version 6.0+.

    • CLIENT-1652 Support udf-admin, sindex-admin and truncate privileges. This feature requires server version 6.0+.

    • CLIENT-1677 Remove old deprecated PredExp. See Incompatible API change.

    Fixes

    • CLIENT-1656 Set Netty TLS handshake timeout when a timeout is defined.

    • CLIENT-1688 Add scan/query partition errors from multiple threads under lock.

    • Add RegexFlag to public docs.

  • 5.2.0
    Release Date: August 7, 2023

    Fixes

    • CLIENT-2252 Disable java runtime serialization/deserialization. Deserialization of java runtime serialized objects has been identified as a security risk (CVE-2023-36480) by CodeQL team members @atorralba (Tony Torralba) and @joefarebrother (Joseph Farebrother). See Incompatible API change.

  • 5.1.11
    Release Date: December 7, 2021

    Fixes

    • CLIENT-1637 Continue processing scans when "partition unavailable" errors occur. "partition unavailable" is not a fatal error for partition scans and the server will continue sending back results for other partitions. Previous clients aborted the scan and put the connection back into the pool which might cause unprocessed results to be sent to a different transaction.

  • 5.1.10
    Release Date: November 19, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Fixes

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

  • 5.1.9
    Release Date: November 11, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

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

    Fixes

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

  • 5.1.8
    Release Date: September 20, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

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

    Fixes

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

  • 5.1.7
    Release Date: August 6, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Fixes

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

  • 5.1.6
    Release Date: August 2, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

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

    Fixes

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

  • 5.1.5
    Release Date: June 29, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

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

    Fixes

    • CLIENT-1554 Fix async connection accounting when timeoutDelay policy is enabled.

  • 5.1.4
    Release Date: June 24, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

    • For scan exception MAX_RETRIES_EXCEEDED, include all retry sub-exceptions in exception message.

    • Upgrade Bouncy Castle crypto version to 1.69.

    Fixes

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

  • 5.1.3
    Release Date: June 8, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

    • Add Exp.boolBin().

    Fixes

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

  • 5.1.2
    Release Date: May 12, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Fixes

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

  • 5.1.1
    Release Date: May 10, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Fixes

    • Fix equals() in BoolIntValue to cast other to BoolIntValue instead of BooleanValue.

  • 5.1.0
    Release Date: April 30, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, we strongly recommend that you upgrade to Java client 5.1.11 at the earliest opportunity.

    Features

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

    Fixes

    • Do not keep connection on all client side errors.

  • 5.0.7
    Release Date: April 11, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Fixes

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

  • 5.0.6
    Release Date: March 31, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Features

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

    Fixes

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

  • 5.0.5
    Release Date: February 24, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Features

    • CLIENT-1454 Support scan pagination with PartitionFilter.

    Fixes

    • Check for null in Host, Key equals methods.

    • Remove redundant deadline assignment in NioCommand.

  • 5.0.4
    Release Date: February 5, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Features

    • Add support for MacOS/BSD Kqueue native netty transport.

    • In setXDRFilter(), remove XDR filter if filter expression is null.

    Fixes

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

  • 5.0.3
    Release Date: January 22, 2021
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Features

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

    Fixes

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

  • 5.0.2
    Release Date: December 11, 2020
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.

    Features

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

    • Add ResultCode.LOST_CONFLICT.

    • Deprecate Policy.priority, ScanPolicy.failOnClusterChange and MapOperation.decrement().

    Fixes

    • CLIENT-1390 Fix NullPointerException that could occur after TLS connection pool is used and minConnsPerNode is defined.

  • 5.0.1
    Release Date: November 11, 2020
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.
    • Requires server version 4.9+.

    Features

    • 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 5.2.0.4+ requirement. Expression API usage still requires server 5.2.0.4+.

    • Add Exp.memorySize(). This method requires server version 5.3+.

    Fixes

    • Remove extraneous newline in ClusterStats toString().

    • Add exp package to javadocs.

  • 5.0.0
    Release Date: October 21, 2020
    • A bug affecting this version of the Java client has been identified. If your application uses scans, but does not use Policy.priority , ScanPolicy.scanPercent or ScanPolicy.failOnClusterChange, you can safely upgrade to Java client 5.1.11. We strongly recommend that you do so at the earliest opportunity.
    • Requires server version 5.2.0.4+. It's not recommended to use this client version since client 5.0.1 has more relaxed server version requirements.

    Features

    • 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 5.2.0.4+. See Incompatible API change.

    • CLIENT-1369 Remove legacy client code for old servers since this client now requires server version 5.2.0.4+.

    • CLIENT-1181 Add Log.setCallbackStandard().

    • Add hashCode() and equals() to Policy and WritePolicy.

    Fixes

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

  • 4.5.0
    Release Date: August 7, 2023

    Fixes

    • CLIENT-2252 Disable java runtime serialization/deserialization. Deserialization of java runtime serialized objects has been identified as a security risk (CVE-2023-36480) by CodeQL team members @atorralba (Tony Torralba) and @joefarebrother (Joseph Farebrother). See Incompatible API change.

  • 4.4.20
    Release Date: January 5, 2021

    Fixes

    • CLIENT-1637 Continue processing scans when "partition unavailable" errors occur. "partition unavailable" is not a fatal error for partition scans and the server will continue sending back results for other partitions. Previous clients aborted the scan and put the connection back into the pool which might cause unprocessed results to be sent to a different transaction.

  • 4.4.18
    Release Date: September 22, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

    • CLIENT-1355 Skip orphan seeds that do not have peers when other seeds have peers.

  • 4.4.17
    Release Date: August 17, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

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

  • 4.4.16
    Release Date: August 14, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    Bug Fixes

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

  • 4.4.15
    Release Date: July 15, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    Bug Fixes

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

  • 4.4.14
    Release Date: June 26, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

    • Add new Bin constructor that accepts byte array and particle type.

    Bug Fixes

    • Bump default netty.version from 4.1.45.Final to 4.1.50.Final.

  • 4.4.13
    Release Date: June 10, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

    • CONNECTOR-65 Support XDR client emulation. See WritePolicy xdr.

    Bug Fixes

    • CLIENT-1293 When preallocating async TLS connections, wait for TLS handshake to complete before placing connection in pool.

  • 4.4.12
    Release Date: May 27, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

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

    Bug Fixes

    • Verify varargs length in Execute(), so if empty operations does not override the original operations set in Statement.

  • 4.4.11
    Release Date: May 6, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

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

    Bug Fixes

  • 4.4.10
    Release Date: April 5, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

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

    Bug Fixes

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

  • 4.4.9
    Release Date: February 11, 2020
    • A bug affecting this version of the Java client has been identified.
      • If your application uses scans, we strongly recommend that you upgrade to Java client 4.4.20 at the earliest opportunity.

    New Features

    • CLIENT-1170 Support partition scans. This feature requires server versions >= 4.9.
    • Add reactor-query-engine extension library.
    • Add toString() to PredExp subclasses.

    Bug Fixes

    • CLIENT-1171 Upgrade jbcrypt version to 0.4 in pom.xml used in maven central repository.

  • 4.4.8
    Release Date: January 3, 2020

    Features

    • Support async create index, drop index, and info commands.

    Fixes

    • Upgrade jbcrypt version to 0.4.

  • 4.4.7
    Release Date: December 5, 2019

    Features

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

    Fixes

    • CLIENT-1162 Update connection lastUsed after command's last socket read instead of command end.

    • Remove obsolete transaction-queues server config in travis.

  • 4.4.6
    Release Date: October 1, 2019

    Features

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

    Fixes

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

  • 4.4.5
    Release Date: August 20, 2019

    Features

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

    Fixes

    • CLIENT-1121 On netty async connection close, do not attempt to remove InboundHandler because it may not exist if the connection never succeeds.

  • 4.4.4
    Release Date: August 9, 2019

    Features

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

    Fixes

    • Fix TlsPolicy javadoc.

  • 4.4.3
    Release Date: July 23, 2019

    Features

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

    Fixes

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

  • 4.4.2
    Release Date: June 10, 2019

    Features

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

    Fixes

    • CLIENT-1078 For replica PREFER_RACK, do not retry on same node where command failed if a fallback node exists on any rack.

  • 4.4.1
    Release Date: May 16, 2019

    Features

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

    Fixes

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

  • 4.4.0
    Release Date: March 28, 2019

    Features

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

    Fixes

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

  • 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

    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.

    Known Issues

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

  • 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
    • If using the security feature with Aerospike Enterprise Edition Server 4.6 or later, this version is not compatible -- please upgrade to Aerospike Java Client version 4.1.6 or later.

    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
    • If using the security feature with Aerospike Enterprise Edition Server 4.6 or later, this version is not compatible -- please upgrade to Aerospike Java Client version 4.1.6 or later.

    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.

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

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

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

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

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