C# Client Library Release Notes

  • 3.9.9
    Release Date: August 7, 2020

    Fixes

    • CLIENT-1338 Restart stopwatch in async batch retry when socketTimeout is defined and totalTimeout is not defined. Also, queue timeout just before retry execution to be consistent with initial attempt.

  • 3.9.8
    Release Date: July 20, 2020

    Fixes

    • CLIENT-1335 Apply lock to async batch retry logic and separate AsyncBatchExecutor from AsyncMultiExecutor.

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

  • 3.9.7
    Release Date: July 13, 2020

    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.

    • Add Cluster property to AerospikeClient.

    • Add OperateListBounded test.

    Fixes

    • Add [Flags] attribute to all enums that are used as bit flags.

  • 3.9.6
    Release Date: May 18, 2020

    Features

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

    Fixes

    • CLIENT-1289 Always send integers with size 8 bytes in wire protocol.

  • 3.9.5
    Release Date: May 8, 2020

    Known Issues

    • This client sends byte/short/int bins to the server using 1/2/4 bytes. This will cause problems when negative numbers are sent and the bin is used in a secondary index query, lua function or different language client. Fixed in version 3.9.6

    Features

    • CLIENT-1278 Support minimum connections.

    • Add create nested map and create nested list examples.

    Fixes

    • CLIENT-1279 Handle all native integer types (including short/ushort) when packing items in list/map.

    • CLIENT-1281 Prevent recursive error stack overflow for async commands.

    • Update QueryPolicy docs to mention maxRecords only supported on query with null filter.

  • 3.9.4
    Release Date: April 5, 2020

    Known Issues

    • This client sends byte/short/int bins to the server using 1/2/4 bytes. This will cause problems when negative numbers are sent and the bin is used in a secondary index query, lua function or different language client. Fixed in version 3.9.6

    Features

    • CLIENT-1170 Support partition scans. This feature requires server versions >= 4.9.

    • 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 operations. This feature requires server versions >= 4.9.

    Fixes

    • CLIENT-1160 For single record transactions, send socketTimeout to the server instead of totalTimeout when socketTimeout < totalTimeout.

    • CLIENT-1200 Allow keys of type byte/sbyte. Optimize integer size sent to server when possible.

    • CLIENT-1218 Set compression level to BestSpeed (1) when compression is enabled.

    • Only run enterprise feature tests when using enterprise cluster.

    • Fix Replica doc comment.

  • 3.9.3
    Release Date: February 20, 2020

    Fixes

    • Do not zero socket SendBufferSize and ReceiveBufferSize on Unix or MacOS platforms.

    • In nuspec file, target net452 instead of net to fix warning.

    • Simplify compress policy online doc.

  • 3.9.2
    Release Date: December 5, 2019

    Features

    • CLIENT-1156 Support compressed commands and responses. This feature requires Enterprise Server versions >= 4.8.

    • CLIENT-1161 Use new sindex-exists info command when checking for DropIndex task completion.

    • Add IRecordSet and IResultSet derived interfaces for easier usage within mocking libraries.

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

    • Add icon to nuspec file.

    Fixes

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

    • Fix online docs so DateTime uses months that start at 1.

    • Call AuthenticateAsClient on .NET Core.

    • Add TestCategory attribute when running .NET Core tests.

  • 3.9.1
    Release Date: October 2, 2019

    Features

    • CLIENT-1129 Add total opened/closed connection counts per node to cluster statistics.

    Fixes

    • CLIENT-1128 Move QueryPolicy recordsPerSecond field to Statement in order to add support for background queries (via Execute()).

    • Remove client support for bit operations on nested list/maps because the server will not support this functionality in the near future.

  • 3.9.0
    Release Date: September 24, 2019

    Features

    • CLIENT-1120 Support predicate expressions for all transactions. This feature requires server versions >= 4.7.

    • 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 ScanPolicy recordsPerSecond field to limit scan throughput. This feature requires server versions >= 4.7.

    • CLIENT-1132 Support binary serialization in .NET Core.

    • Target .NET Core client library to .NET Standard 2.0.

    Fixes

    • CLIENT-1119 Do not verify record digest in batch read as it's redundant.

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

    • Fix documentation result for BitOperation.get().

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

    • Declare AerospikeException.SetInDoubt() as internal.

  • 3.8.1
    Release Date: June 28, 2019

    Features

    • Add policy socketTimeout, totalTimeout and maxRetries to exception messages when available.

    • TOOLS-1342 Support write only (write) privilege for user roles. This feature requires Aerospike Enterprise Server 4.6.

    • TOOLS-1343 Support IP address whitelist functionality for user roles. This feature requires Aerospike Enterprise Server 4.6.

    • Expose client policies from IAerospikeClient interface.

    • Expose Cluster and NodeAddress from Node.

    Fixes

    • CLIENT-1077 Perform retry when current node has exhausted all connections.

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

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

  • 3.8.0
    Release Date: March 28, 2019

    Features

    • CLIENT-1059 Use stack based connection pools for more aggressive trimming of idle connections.

    • CLIENT-1068 Support new relaxed read modes for SC namespaces.

    • Replace linearizeRead boolean with ReadModeSC enum. See Incompatible API change.

    • Rename Policy consistencyLevel to readModeAP.

    • Extract interface IAsyncClient from AsyncClient for better extensibility. Enchancement provided by akovalov.

    • Add ClusterStats.ToString().

    • Add readModeAP and readModeSC arguments to benchmarks.

    Fixes

    • Async Socket SendBufferSize/ReceiveBufferSize should not be set to zero on MacOS.

    • Do not retry on error code NO_MORE_CONNECTIONS.

    • Change MS nuspec file to use new license tag.

  • 3.7.0
    Release Date: February 4, 2019

    Features

    • CLIENT-1057 Conform to server fallback and retry behavior specification.

    • CLIENT-1055 Add iteration and node to more AerospikeException messages.

    • AER-6009 Support new server "truncate-namespace" info command.

    • Default socketTimeout to 30 seconds for all commands.

    • Remove old deprecated Statement Filters property. Use Filter property instead. The server accepts only one filter. See Incompatible API change.

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

    • Use custom BufferedConnection that calls Poll() before every socket read, so tight timeouts can be enforced on batch reads.

    • Fix GetNode() to return master node on write operations when chosen replica is not the default.

  • 3.6.8
    Release Date: November 27, 2018

    Features

    • AER-5957 Support rack aware clients.

    • AER-5955 Support truncate info command argument "lut=now" for servers that require it.

    • AER-5945 Add INFINITY and WILDCARD values for use in CDT map/list comparators.

    • CLIENT-1049 Provide more descriptive error message when namespace can't be found in partition map.

    Fixes

    • Fix docs to note that the server executes operations in the same order as the operations array in Operate() call.

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

    • Remove unused error codes.

    • Change admin message version to 2.

  • 3.6.7
    Release Date: October 3, 2018

    Features

    • Support running an aggregation query with lua code in a string. See "QuerySum.cs" example.

    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.

    • Fix KeyNotFoundException in "NodeValidator.SetAddress()".

  • 3.6.6
    Release Date: July 31, 2018

    Features

    • 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

    • Set socketTimeout to totalTimeout when totalTimeout > 0 and socketTimeout is zero for both sync and async commands.

    • Disable Interlocked with volatile variable warning in projects.

  • 3.6.5
    Release Date: June 18, 2018

    Features

    • CLIENT-1024 Support scan/query consistency validation using cluster key. Set failOnClusterChange to true in ScanPolicy/QueryPolicy to enable this validation.

    • CLIENT-1020 Add QueryList example.

    • Support list/map nearest key/value get/remove operations.

    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.

  • 3.6.4
    Release Date: May 21, 2018

    Features

    • CLIENT-1011 Support cluster seed that is a load balancer.

    • Add new info request which takes a list of info requests.

    • Add CDT map value list range example.

    Fixes

    • Make AssemblyVersion the same as AssemblyFileVersion.

    • Change default socket idle timeout for scan/query to 30 seconds.

    • Authentication mode property is now case-insensitive.

    • Improve ConsistencyLevel online doc.

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

    Fixes

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

  • 3.6.2
    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 C# Client version 3.6.3 or later.

    Fixes

    • Handle list extension type returned by server on sorted list operations.

    • Default "AerospikeException.resultCode" to generic "ResultCode.CLIENT_ERROR" instead of zero.

  • 3.6.1
    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 C# Client version 3.6.3 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.

  • 3.6.0
    Release Date: February 15, 2018

    Features

    • Upgrade Aerospike .NET Core solution to Visual Studio 2017. Older Visual Studio versions are no longer supported for .NET Core. The Aerospike .NET Framework solution still supports Visual Studio 2010 or greater.

    • Move AerospikeClient source code back into .NET Framework and link from .NET Core.

    • Add new list and map operations.

    • Return IndexTask from DropIndex().

    • Enhance AerospikeDemo benchmarks.

      • Support batch reads.
      • Support alternate latency display format.
      • Support latency summary when benchmarks end.
      • Support throughput (tps) limit for sync benchmarks.

    Fixes

    • Prevent rogue node from taking ownership of a partition previously owned by legitimate strong consistency node.

    • Remove enterprise requirement in truncate docs.

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

  • 3.5.2
    Release Date: December 14, 2017

    Features

    • Add new async "MaxCommandAction.DELAY" mode. This mode limits the number of concurrent async commands to be executed, but allows new commands to be queued for later execution. Unlike "MaxCommandAction.BLOCK", "MaxCommandAction.DELAY" does not block the current thread when waiting for a new command slot. Thanks to Fabien Barbier for the enhancement!

  • 3.5.1
    Release Date: December 7, 2017

    Fixes

    • Replace BlockingCollection with ConcurrentQueue where possible.

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

  • 3.5.0
    Release Date: November 13, 2017

    Features

    • Policy rewrite. See Incompatible API change for more details.

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

    • CLIENT-890 Try different node when the current node fails.

    • Support Strong Consistency mode for servers that also support Strong Consistency mode.

    • Support CDT list increment operation.

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

    • CLIENT-930 Remove LDT client methods. 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).

    • Add copy constructors for policy classes that did not have them.

    • Rename ResultCode NO_XDS to ALWAYS_FORBIDDEN.

  • 3.4.5
    Release Date: October 23, 2017

    Features

    • Support "QueryPolicy.includeBinData". Default is true.

    Fixes

    • Fix NeoLua dependency version at exactly "0.9.14" in nuget specification. AerospikeClient only works with this version.

  • 3.4.4
    Release Date: June 16, 2017

    Fixes

    • Target .NET Standard 1.5. Thanks to Brian Williams for the fix.

    • Enable retry logic for async batch commands. Thanks to windsnow98 for the fix.

    • Only set "peers.genChanged" to true when peers protocol is supported by the server.

    • Handle polling tasks with a timeout the same way as a no-timeout task.

  • 3.4.3
    Release Date: May 23, 2017

    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.

    • In ExecuteTask, task is now not considered complete when the task is not found.

    • Change BaseTask.IsDone() to re-request status after delay when “not found” status is returned.

    • Always issue asynchronous batch node requests in parallel.

    • Add retry for connection timeout. Thanks to windsnow98 for the fix.

    • Add optimization to project.json. Thanks to windsnow98 for the fix.

    • Merge async RetryOnInit() and RetryAfterInit() into ConnectionFailed().

    • Catch async exception if OnFailure() fails.

  • 3.4.2
    Release Date: April 4, 2017

    Features

    • CLIENT-865 Add predicate expression function PredExp.RecDigestModulo().

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

    Fixes

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

    • Remove unnecessary Register() from PredExp example.

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

  • 3.4.0
    Release Date: January 31, 2017

    Features

    • Support .NET Core 1.1.

  • 3.3.2
    Release Date: January 9, 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.

    • Verify Policy.scanPercent > 0 and <= 100.

  • 3.3.1
    Release Date: November 16, 2016

    Features

    • Support TLS serial number exclude list.

    • Support TLS search "subject alternative names" in addition to certificate names.

    • Support TLS mutual authentication.

    Fixes

    • NullValue is now cached to avoid unnecessary object instantiations and improve performance.

    • 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 durable deletes. Dependent on Aerospike Server 3.10+.

    • Support retryOnTimeout policy field.

    • Support "Replica.SEQUENCE" for single record reads.

    Fixes

    • Always use master node for record UDF calls.

    • Fix parsing of empty map bins.

    • Use TrySetException instead of SetException in async task ListenerAdapter. Fix provided by jholovacs.

    • Handle case where multiple nodes go down simultaneously, but still protect against split brain rogue node.

    • Perform async single record retries by cloning async command.

  • 3.2.4
    Release Date: July 13, 2016

    Features

    • Allow AerospikeClient to be mocked in unit tests.

    Fixes

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

    • Use parse error when appropriate.

  • 3.2.3
    Release Date: June 8, 2016

    Features

    • Support new server map operations. Requires Aerospike Server version 3.8.4 and above.

    • Add AerospikeClient.RegisterUdfString() to register lua functions contained in a string.

    • Use server double particle type for double by default.

    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 13, 2016

    Features

    • Add GeoWithinRegion(), GeoWithinRadius() and GeoContains() query filter methods with IndexCollectionType argument.

    • Add QueryGeoCollection example.

    Fixes

    • Fix BaseTask.Wait() when index has already been created.

    • Skip over unknown type extensions in Unpacker.

    • xorshift128+ algorithm has changed slightly.

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

    • Reduce result codes that require closing of socket.

    • Support GeoJSON in list/map.

    • Remove methods that have been deprecated for over one year.

    Fixes

    • CLIENT-590 Pass in set name for batch reads when BatchPolicy.sendSetName is true.

    • Do not test LDT if server has disabled LDT.

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

  • 3.1.7
    Release Date: January 28, 2016

    Features

    • Support list operations (ListOperation) that can be used in client Operate(). Requires Aerospike Server versions 3.7 and above.

    • Support geo-spatial queries. Requires Aerospike Server versions 3.7 and above.

    • Support ScanPolicy.includeLDT flag. If includeLDT is true, LDT data structures will be returned on scan. The default remains false.

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

    • CLIENT-623 Support set/get properties in Statement class.

    Fixes

    • Use async buffer pool that contains a single large byte array with byte segments allocated to each async command. This was done to reduce the effects of memory pinning because only one single byte array is being pinned. Also, the large byte array will be placed on the LOH (large object heap) which is not compacted by default.

    • Task Wait()/QueryIfDone() no longer treats error conditions as done. Instead, the error is stored and the status request is retried until timeout. If timeout, the last error is thrown as an exception.

    • Move RandomShift from AerospikeDemo to AerospikeClient. Generate default task ids using RandomShift instead of timestamp.

  • 3.1.6
    Release Date: November 6, 2015

    Features

    • Change ClientPolicy.maxSocketIdle default to 55 seconds.

    Fixes

    • Check for null in LargeList.exists().

    • IsConnected() now returns false when all nodes haven't responded to cluster tend requests for 5 consecutive iterations (usually 5 seconds).

    • Dispose of CancellationTokenRegistration when done with async task.

    • Fixed Async UDF example.

  • 3.1.5
    Release Date: September 8, 2015

    Features

    • Added LargeList.Exists().

    Fixes

    • Check for exception in RecordSet cancellation.

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

    • Added ability to bypass form prompt in AerospikeTest. Do not prompt with form by default.

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

    • Support asynchronous query and execute.

    Fixes

    • 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.TimeToLive which converts server absolute time back to expiration ttl.

    • Implement Equals on every extended Value class.

    • Implement GetHashCode and Equals on Bin, Value and Filter.

    • Ignore sleepBetweenRetries when in async mode.

    • Change ClientPolicy.failIfNotConnected default to true.

    • Limit ClientPolicy.maxSocketIdle to 24 hours.

    Fixes

    • Check for null in ByteUtil.BytesToHexString().

    • Check for zero-sized arrays and call onSuccess() in async batch get.

    • AER-3648: Handle duplicate node-ids caused by multiple ethernet interfaces.

    • Transfer timeout from command to future task.

  • 3.1.2
    Release Date: April 27, 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.

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

    • Support new data-admin security role for use in server's enterprise edition.

    • Show node in timeout exception.

    Fixes

    • Do not close AsyncWaitHandle because the disposed handle can be referenced after the exception is thrown. The handle will eventually get closed by the garbage collector.

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

  • 3.1.1
    Release Date: March 27, 2015

    Features

    • Added Task based methods to AsyncClient.

    • Added Record.getString(name).

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

    • Only optimize Util.ByteArrayEquals() when AS_OPTIMIZE_WINDOWS is enabled.

    • Make it easier to detect async command state when a node is removed from the cluster (which causes node's connections to be closed).

    • Remove LITE conditional statements which are no longer necessary.

    Fixes

    • Check all nodes before shutting down benchmarks when receiving benchmark errors.

    • Throw exception if bin name length > 14 characters on query.

  • 3.1.0
    Release Date: March 12, 2015

    Features

    • Replaced old unmanaged LuaInterface Lua interpreter (written in C) with a fully managed NeoLua Lua interpreter (written in C#). Since NeoLua uses the Lua 5.3 specification, slight code modifications may be necessary in your aggregation queries. Incompatible API change.

    • Removed AerospikeLite solution because it is no longer necessary. The default Aerospike solution is now fully managed.

    • Added capability to load Lua scripts from a resource.

    • Added new query methods that take in an "Action" callback argument.

    • C# clients are now available on NuGet.

    Fixes

    • Make mismatched batch digests an error condition.

  • 3.0.14
    Release Date: February 20, 2015

    Features

    • Optimize number/byte conversions.

    Fixes

    • Ensure query threads are initialized before threads are aborted when a query initialization exception occurs.

    • Remove zero size packet exception and keep processing query/scan. The server will eventually send the finish notification.

    • Support batch get when allowProleReads is true.

  • 3.0.13
    Release Date: February 9, 2015

    Features

    • Support secondary indexes on bins containing a collection.

    • 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

    • Server has been handling NOBINDATA flag correctly for a long time on read record header, so remove old workaround code.

    • Check if server enabled LDT before running LDT examples.

    • Make receiving a zero-sized data packet from server an error condition which results in a socket close.

    • Fix user key send buffer byte size calculation.

    • Check for null before performing client join.

  • 3.0.12
    Release Date: December 5, 2014

    Features

    • Support large list remove range.

    • Support read consistency level policy.

    • Support transaction commit level write policy.

    • Support double/float on client-side. Server will store these values as longs.

    • Implement IDisposable in AerospikeClient, RecordSet and ResultSet so the using statement can be used.

    • Use xorshift128plus algorithm to generate random values in benchmarks.

    Fixes

    • Validate that value type can be used as a key.

    • Separate large collection userModule into createModule and filterModule.

  • 3.0.10
    Release Date: November 19, 2014

    Features

    • Add "Debug IIS" and "Release IIS" configuration targets. These IIS targets use HttpContext to store reusable buffers (instead of using ThreadStatic).

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

    • Removed deprecated RecordExistsAction generation enum values. Use "WritePolicy.generationPolicy" instead.

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

    • Add LargeMap.exists().

    Fixes

    • Do not interrupt thread on scan and batch cancels.

    • Cancel token only once on query.

    • Filter out unreferenced bins in async batch.

    • Send user key in multi-operation call if set in write policy.

    • Fix LargeSet.exists().

  • 3.0.9
    Release Date: October 31, 2014

    Features

    • Use CancellationToken for queries instead of Thread.Interrupt().

    • Create generic thread Executor class which is used by synchronous scan, batch, and udf execute.

    Fixes

    • Fix aggregation query race condition.

    • Filter out null keys on aggregation queries.

    • Close lua instance if not able to put back into pool.

  • 3.0.8
    Release Date: October 23, 2014

    Features

    • Change taskId from int to long. Generate taskId if not set.

    • Always send taskId on queries. Set taskId on scans too.

    • Support more server error codes.

    • Try seeds when single node cluster stops responding to info requests.

    • Retrieve partition-generation at the same time as replicas-master.

    Fixes

    • Fix BlobValue.Pack() method.

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

    • Detect "split cluster" case where this node thinks it's a 1-node cluster.

  • 3.0.7
    Release Date: September 25, 2014

    Features

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

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

    • Return immediately if batch keys length is zero.

  • 3.0.6
    Release Date: August 28, 2014

    Features

    • Support key storage/retrieval functionality. Note that "Key.userKey" field type has changed from "Object" to "Value".

    • Store default policies in client so they don't have to be instantiated on each command.

    • Support new lua bytes library.

    • Make cluster tend interval configurable.

    • Add Remove() to LargeMap.

    • Add server side existence check example.

    Fixes

    • Fix bin name filters when running query without additional filters.

    • Check if task has already completed before querying servers for status.

    • Propagate error message when query aggregation fails.

    • Parse info response for errors.

    • Fix read/write percentage calculation in demo application.

  • 3.0.5
    Release Date: July 24, 2014

    Features

    • Support user/role administration and authentication with enterprise servers.

    • Add AerospikeAdmin application to manage users.

    • Add AerospikeLite solution which does not include Lua interpreter. AerospikeLite is a fully managed solution while Aerospike contains an unmanaged DLL (Lua interpreter).

    • Support x86 (32-bit) and x64 (64-bit) compile targets.

    • Use IList/IDictionary instead of List<object>/Dictionary<object,object> in large collection API.

    • Add Record.ToString().

    • Add AerospikeClient.Join() methods.

    • Add LargeList example.

    Fixes

    • Check for null in log enabled methods.

    • Fix estimated length calculation in udf calls.

  • 3.0.4
    Release Date: May 16, 2014

    Features

    • Support Policy.allowProleReads in synchronous batch operations.

    Fixes

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

    • Add new result codes. Keep connection on more errors than before.

  • 3.0.3
    Release Date: February 14, 2014

    Features

    • Use thread pool for batch, scan and query commands.

    • Add UPDATE_ONLY, REPLACE, REPLACE_ONLY, CREATE_ONLY to RecordExistsAction.

    • Removed dependency on msgpack library.

    Fixes

    • Move EXPECT_GEN_EQUAL, EXPECT_GEN_GT from RecordExistsAction to GenerationPolicy.

    • Throw exception when running scan/query and the cluster is empty.

    • Put connection back into pool for some error codes.

    • Give more detailed error message when UDF registration fails.

    • Handle new createIndex and dropIndex error codes.

    • Update license and copyright message.

  • 3.0.2
    Release Date: January 10, 2014

    Features

    • Allow records to be set to NO EXPIRE via sending -1 TTL. Requires server 2.7.4+ or 3.1.10+.

    • Created user configurable benchmarks.

    • Added Operate and QueryFilter examples.

    Fixes

    • Do not sleep if maxRetries has been reached or the transaction would timeout after sleepBetweenRetries is applied. Instead, timeout immediately. Also, never sleep if sleepBetweenRetries is zero.

  • 3.0.1
    Release Date: December 12, 2013

    Fixes

    • Optimize asynchronous performance.

    • Support automatic retry for asynchronous commands.

    • Use near contiguous buffer pool for asynchronous commands.

    • Use single thread-local buffer for both socket send and receive for synchronous commands.

  • 3.0.0
    Release Date: November 20, 2013

    Features

    • Introduced AerospikeClient.

    • Full support for Aerospike 3 servers. - User defined functions (UDF). UDF code is written in the Lua programming language. - Secondary index queries. - Secondary index queries with UDF aggregations. - Secondary index query/UDF execute. - Large Data Types (LDT) which allow the creation/management of a collection within a single bin.

    • Continued full support for Aerospike 2 servers.

    • Introduced AsyncClient. The client package now supports both synchronous (AerospikeClient) and asynchronous (AsyncClient) operations.

    • Enhanced node dunning methodology.