C# Client Library Release Notes

  • 7.4.0
    Release Date: July 25, 2024

    Features

    • CLIENT-3058 Perf Change write utf8 bytes directly into destination. These community changes provided by GitHub user RokasBalevicius provide performance boosts to the ByteUtil class when using StringToUtf8().

    • CLIENT-3014 Recover sync connection after timeout. Using the new TimeoutDelay field on Policy, when a timeout occurs in the sync version of the client, it will attempt to recover the connection in the background. Note that this is not available for async connections.

  • 7.3.0
    Release Date: June 14, 2024

    Features

    • CLIENT-2981/CLIENT-2987 Perf Change ripmd160 from class to struct to avoid allocations, avoid heap allocation in ValueRipemd160. These community changes provided by GitHub users RokasBalevicius and wipiano provide performance boosts to the Util class ValueRipemd160.

    Fixes

    • CLIENT-2907 Scan and QueryPolicy constructor inconsistency. Add copy constructors and inherit from base Policy class.

    • CLIENT-2909 ExecuteTask inconsistencies. Add GetTaskId() method to ExecuteTask.

    • CLIENT-2958 Background Query avoid override of operations. This bug was happening when the user performed a query execute operation but did not provide the optional argument of Operation[], which overrode the operations in the Statement causing a Parameter Error.

    • CLIENT-2973 Make scans work in a mixed cluster of 5.7 and 6.4 nodes.

  • 7.2.0
    Release Date: April 30, 2024

    Features

    • CLIENT-2698 Metrics. The metrics feature includes a default implementation with a metrics policy and can be overwritten by the user.

    Fixes

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

    • CLIENT-2840 Retry when IOException is thrown.

  • 7.1.0
    Release Date: March 27, 2024

    Features

    • CLIENT-2788 Move proxy client to own assembly. The proxy client now lives in its own directory in the repo, has it's own namespace, and can be found on NuGet as Aerospike.Client.Proxy.

    • CLIENT-2679 Add code coverage. Added tools and coverage build option to AerospikeTest to obtain unit test information.

    • CLIENT-2824 Add support for query duration. This is feature for server version 7.1+. The QueryPolicy field shortQuery is depreciated for new server versions as queryDuration replaces it. shortQuery is still available and will eventually be removed.

    • CLIENT-2830 Support for readTouchTtlPercent. This is a feature for server version 7.1+. This field is added to Policy and BatchReadPolicy. It is used for determining how record TTL is affected on reads.

    • CLIENT-2441 Map Key Documentation Update. In a future Aerospike server release, map key types of int, string, and byte[] will be the only types accepted.

    Fixes

    • CLIENT-2797 Allowing inner Exception to be null in AerospikeException constructor. This was a community pull request provided by m-wilmo.

    • CLIENT-2799 Fix excessive allocations in PartitionParser. This was a community pull request provided by verdie-g to optimize part of PartitionParser.

    • CLIENT-2765 Operation and Expression signature inconsistency using ListReturnType or MapReturnType.

    • CLIENT-2763 Include partition unavailable errors for scans and queries, handle case when max records is less than number of assigned nodes. This is to provide more error information in the case of Partition Unavailable errors.

  • 7.0.1
    Release Date: December 19, 2023

    Fixes

    • CLIENT-2734 Fix error in nuget package to link to correct dependencies.

  • 7.0.0
    Release Date: December 8, 2023

    Features

    • CLIENT-2691 Update server info test to work with 7.0 community edition server.

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

    • Update NuGet Package NeoLua to latest version, 1.13.14.

    • Remove NuGet package Iconic.Zlib.Netstandard for compression, instead use System.IO.Compression.

    Fixes

    • CLIENT-2695 Update parsing of GeoJson record on read to cast to GeoJson object. Previously, the code was returning GeoJson objects on read as a string.

  • 6.2.1
    Release Date: June 14, 2024

    Fixes

    • CLIENT-2973 Make scans work in a mixed cluster of 5.7 and 6.4 nodes.

  • 6.2.0
    Release Date: November 6, 2023

    Features

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

    • CLIENT-2589 SINDEX Support for Blobs. This feature requires server version 7.0+.

    • CLIENT-2574 Add support for Exp.RecordSize(). This feature requires server version 7.0+.

    • CLIENT-2486 Add inverted logic to removeBy methods. See Incompatible API change.

  • 6.1.0
    Release Date: August 15, 2023

    Features

    • CLIENT-2180 Support read replica policy in scan and query. This enables rackaware queries within the client.

    • CLIENT-1456 Improve Error Code Documentation. Added comments containing the integer error code for easier debugging.

    • CLIENT-2470 Return csharp blob as byte array. See Incompatible API change.

    Fixes

    • CLIENT-2256 Fix race condition in test, add try catch finally. The race condition was TestAsyncBatch, and was causing the test to hang.

    • CLIENT-2282 Set correct return types for list and map expressions. Added switch to ensure return type is set correctly.

    • Bump Microsoft.Windows.Compatibility in /AerospikeDemo. This is to fix a Snyk alert.

    • Bump Microsoft.Windows.Compatibility in /AerospikeAdmin. This is to fix a Snyk alert.

  • 6.0.1
    Release Date: March 29, 2023

    Features

    • CLIENT-1966 Use generics in Value classes.

    • CLIENT-1965 Change from class to enum for ParticleType.

    • CLIENT-2184 Add test for ordered maps with expression.

    Fixes

    • Update codeql-analysis file with new directory structure.

    • Add code that should include documentation file in nuget package.

    • Update asyncMaxCommands description.

  • 6.0.0
    Release Date: February 3, 2023

    Features

    • CLIENT-2123 Set minimum Visual Studio version to 2022.

    • CLIENT-2123 Set minimum .NET version to 6.

    • CLIENT-2123 Merge Core and Framework solutions into a single unified .NET 6 solution.

    • CLIENT-2163 Add AerospikeBenchmarks project.

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

    • CLIENT-2124 Disable code that used Microsoft's deprecated BinaryFormatter. See Incompatible API change.

    Fixes

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

  • 5.3.3
    Release Date: May 9, 2024

    Fixes

    • CLIENT-2924 Retry when IOException is thrown.

  • 5.3.2
    Release Date: January 4, 2023

    Fixes

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

    • 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 QueryPolicy.shortQuery doc to say "less than 100 records per node".

  • 5.3.1
    Release Date: December 6, 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.

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

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

    • Remove unused node parameter in RackParser and query commands.

    • Mention that async sequence listener callbacks are not thread-safe.

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

  • 5.3.0
    Release Date: October 19, 2022

    Features

    • CLIENT-1862 Add clusterName context to log messages. To enable, use Log.SetContextCallback().

    • CLIENT-1862 Replace clusterId with clusterName in cluster log messages.

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

  • 5.2.3
    Release Date: September 8, 2022

    Features

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

    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.

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

  • 5.2.2
    Release Date: August 15, 2022

    Fixes

    • CLIENT-1798 Check if socketWatch is active before checking socketTimeout in async CheckTimeout(). This prevents unexpected async command termination (introduced in 5.2.1) from occurring when the command is sitting in the delay queue and has not started execution yet.

    • DOCS-766 Improve documentation for BatchPolicy maxConcurrentThreads field.

  • 5.2.1
    Release Date: August 11, 2022

    Features

    • CLIENT-1796 Avoid Stopwatch allocations in AsyncCommand. Use new struct ValueStopwatch.

    • CLIENT-1796 Allow AsyncCommand references to be GCed before latent timeout checks occur.

    • CLIENT-1796 Pool WeakReference(s) in AsyncTimeoutQueue.

    Fixes

    • Do not check raw records returned in QueryGeoCollection example because the server now dedups duplicate records.

    • Remove check for 0x04 map extension bit when unpacking a map because the server never sends it.

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

  • 5.2.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[])", "Expression.FromBase64(char[])" and "Expression.FromBase64(string)".

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

    • CLIENT-1755 Add clusterId to node's ToString(). Add "Create cluster" and "Close cluster" debug messages.

    • 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 asyncMaxCommands default from 200 to 100.

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

    • Support CodeQL github action.

    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.

  • 5.1.1
    Release Date: May 25, 2022

    Features

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

    Fixes

    • CLIENT-1706 Add configurable buffer segment size (asyncBufferSize) to AsyncClientPolicy. The default is 128 KB.

    • CLIENT-1706 Pre-allocate async BufferPool on AsyncClient initialization.

    • CLIENT-1706 Eliminate async BufferPool resizing.

  • 5.1.0
    Release Date: May 12, 2022

    Features

    • CLIENT-887 Support TLS in AsyncClient.

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

    • Call ThreadPool UnsafeQueueUserWorkItem() for sync batch and query sub-commands.

    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.

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

    • Set minimum Visual Studio version to 2017.

    • Set minimum .NET Framework version to 4.7.2.

    Fixes

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

  • 4.2.8
    Release Date: May 9, 2024

    Fixes

    • CLIENT-2924 Retry when IOException is thrown.

  • 4.2.7
    Release Date: December 7, 2021

    Features

    • Add low level functions for strongly typed unpacking of values from list/map bins.

    • Add custom parser tests.

    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.2.6
    Release Date: November 22, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 at the earliest opportunity.

    Fixes

    • CLIENT-1636 Fix race condition in AsyncCommandDelayingQueue that might result in a new async command being ignored.

  • 4.2.4
    Release Date: October 18, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 at the earliest opportunity.

    Features

    • Add Exp.expr() to merge precompiled expressions into a greater expression.

    • Allow record parse customization. This gives finer control over memory allocations and how the received data is interpreted.

    • Make ThreadLocalData.THREAD_LOCAL_CUTOFF public and modifiable.

    • Add ScanResume example.

    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.

    • Do not retry scan on QUOTA_EXCEEDED.

  • 4.2.3
    Release Date: September 17, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 at the earliest opportunity.

    Fixes

    • CLIENT-1580 Allow null sessionExpiration for compatibility with older servers.

    • CLIENT-1604 Return consistent PartitionStatus array in PartitionFilter when sync/async ScanPartitions() or async QueryPartitions() fails.

    • CLIENT-1604 Retry scan on QUOTA_EXCEEDED.

    • Require TLS configuration if authMode == PKI.

    • Fix Exp.GeoBin() doc example.

    • Allow User and Password properties to not be specified in unit test configuration.

  • 4.2.2
    Release Date: August 11, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 at the earliest opportunity.

    Features

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

    • CLIENT-1567 Add seed and peer nodes at the same time on startup. Refresh peers of new nodes in same cluster tend iteration.

    Fixes

    • CLIENT-1574 Avoid using previous failed node when possible in batch retry.

    • Set "Node.rebalanceChanged" to "Cluster.rackAware" when creating node.

    • Remove supported feature checks in AerospikeDemo because each feature is supported on minimum server version (4.9).

    • Only read volatile sessionToken if cluster username is defined.

    • Do not run durable delete tests on community servers.

  • 4.2.1
    Release Date: July 15, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 at the earliest opportunity.

    Features

    • CLIENT-1556 Add 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.

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

    • Add Exp.BoolBin().

    Fixes

    • 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.InvalidNodeCount". invalidNodeCount is the count of referenced nodes that cannot be added to the cluster in the most recent cluster tend iteration.

    • CLIENT-1550 Do not create Key object when parsing batch read results because it is no longer used.

    • CLIENT-1560 Relogin to node when quick node restart detected. Also, use volatile references to node's sessionToken.

    • DOCS-217 Fix REVERSE_RANK doc to say "Return reverse value order."

  • 4.2.0
    Release Date: April 30, 2021
    • A bug affecting this version of the C# client has been identified. If your application uses scans, we strongly recommend that you upgrade to C# client 4.2.7 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-1502 Support aggregation queries in .NET Core. Upgrade to NeoLua 1.3.13.

    Fixes

    • CLIENT-1494 Detect quick node restart when restarted node never left the cluster. If detected, reset error count and balance connections.

    • CLIENT-1502 Remove unused largelist_example.lua from AerospikeTest.

    • CLIENT-1519 Retry on server timeout if maxRetries and totalTimeout have not been reached. Increment error count on server timeout.

  • 4.1.6
    Release Date: April 14, 2021
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Features

    • CLIENT-1454 Support scan pagination with PartitionFilter.

    Fixes

    • CLIENT-1499 Check for null node and connection in AsyncCommand.FailOnApplicationError().

    • CLIENT-1499 Do not keep connection on all client side errors.

    • CLIENT-1499 Do not copy old node reference on retry. Node is initialized at the start of the retry.

    • CLIENT-1487 Remove ability to use old authentication protocol since the new authentication protocol was created in server version 4.1 and the client already requires server version 4.9+.

    • CLIENT-1485 Remove ability to configure password hash as the password when using authentication.

    • Create new async connections sequentially when balancing async connections from cluster tend.

    • Rename namespace BCrypt.Net to Aerospike.Client.

  • 4.1.5
    Release Date: March 17, 2021
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Features

    • CLIENT-1460 Support AsyncClientPolicy asyncMaxCommandInQueue. Reject new async commands if asyncMaxCommandInQueue > 0 and delay queue size >= asyncMaxCommandInQueue.

    • CLIENT-1473 Accept new bool particle type on reads, but continue writing bool as an integer bin. This is an interim step that allows rolling upgrades with bool support when server version 5.6 is released.

  • 4.1.4
    Release Date: March 2, 2021
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1459 Fix .NET Core on Linux issues.

    • If SocketAsyncEventArgs.BytesTransferred is zero on send, close connection and retry if maxRetries not reached.

    • Fix infinite loop in Util.GetErrorMessage() when exception's InnerException is always populated on all levels.

    • Fix Log.Callback doc to say the log is disabled by default.

  • 4.1.3
    Release Date: February 5, 2021
    • A bug affecting this version of the C# 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 C# client 4.2.7. 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.

    Fixes

    • CLIENT-1446 Add ShouldSerializeNode() to AerospikeException. This method signals the Newtonsoft JSON serializer to ignore the node member variable when serializing an AerospikeException instance.

  • 4.1.2
    Release Date: January 19, 2021
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1415 Enforce hard limit on asyncMaxConnsPerNode.

    • CLIENT-1396 Avoid wrapping AerospikeException within another AerospikeException when using async commands.

    • CLIENT-1391 Consolidate generation reset in RefreshFailed().

  • 4.1.1
    Release Date: December 18, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Features

    • Add Exp.Val(ulong val).

    • CLIENT-1387 Deprecate MapOperation.Decrement(). Use MapOperation.Increment() with a negative value instead.

    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.

    • CLIENT-1395 Fix NullReferenceException when async query is run with failOnClusterChange set to true.

  • 4.1.0
    Release Date: December 8, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. We strongly recommend that you do so at the earliest opportunity.

    Features

    • Set Framework minimum version to Visual Studio 15 and .NET Framework 4.5.

    • CLIENT-1375 Add Expression.GetBase64() to return base64 encoded string of packed expression bytes.

    • CLIENT-1378 Add AerospikeClient.SetXDRFilter().

    • Add ResultCode.LOST_CONFLICT

    • Deprecate Policy.priority and ScanPolicy.failOnClusterChange.

    Fixes

    • CLIENT-1385 Allow async socketTimeout/totalTimeout to be specified together and enforce totalTimeout when command is in delay queue.

    • CLIENT-1386 Force volatile partition map reads when it occurs from a non cluster tend thread.

  • 4.0.3
    Release Date: November 11, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. 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+.

  • 4.0.2
    Release Date: November 2, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. 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 4.0.3 has more relaxed server version requirements.

    Fixes

    • CLIENT-1372 Do not put SocketAsyncEventArgs back into pool when preparing for normal (non-split) async batch retry. The SocketAsyncEventArgs instance is used in the retry.

  • 4.0.1
    Release Date: October 28, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. 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 4.0.3 has more relaxed server version requirements.

    Fixes

    • CLIENT-1370 Fix NullReferenceException in async batch that can happen when multiple retries occur.

    • Remove extraneous newline in ClusterStats ToString().

  • 4.0.0
    Release Date: October 21, 2020
    • A bug affecting this version of the C# 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 C# client 4.2.7. 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 4.0.3 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().

    Fixes

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

  • 3.9.16.1
    Release Date: December 8, 2022

    Features

    • CLIENT-1788 Support client metrics per cluster instance.

    • CLIENT-1788 Support read/write/batch/query latency metrics on each node.

  • 3.9.16
    Release Date: February 15, 2022

    Fixes

    • CLIENT-1459 Fix .NET Core on Linux issues.

    • CLIENT-1459 If SocketAsyncEventArgs.BytesTransferred is zero on send, close connection and retry if maxRetries not reached.

    • CLIENT-1459 Fix infinite loop in Util.GetErrorMessage() when exception's InnerException is always populated on all levels.

    • CLIENT-1446 Add ShouldSerializeNode() to AerospikeException. This method signals the Newtonsoft JSON serializer to ignore the node member variable when serializing an AerospikeException instance.

  • 3.9.15
    Release Date: January 5, 2022

    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.

  • 3.9.14
    Release Date: August 20, 2021
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1580 Allow null sessionExpiration for compatibility with older servers.

  • 3.9.13
    Release Date: July 19, 2021
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1560 Relogin to node when quick node restart detected. Also, add volatile keyword to node's sessionToken.

  • 3.9.12
    Release Date: November 2, 2020
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1372 Do not put SocketAsyncEventArgs back into pool when preparing for normal (non-split) async batch retry. The SocketAsyncEventArgs instance is used in the retry.

  • 3.9.11
    Release Date: October 28, 2020
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    Fixes

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

    • CLIENT-1370 Fix NullReferenceException in async batch that can happen when multiple retries occur.

    • Remove extraneous newline in ClusterStats ToString().

  • 3.9.10
    Release Date: September 18, 2020
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    Fixes

    • CLIENT-1350 Always fail server certificate validation if SslPolicyErrors exist. If SslPolicyErrors do not exist, then match tlsName with subject common name or subject alternative names.

  • 3.9.9
    Release Date: August 7, 2020
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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.

    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

  • 3.9.4
    Release Date: April 5, 2020
    • A bug affecting this version of the C# client has been identified. You can safely upgrade to C# client 3.9.15 and we strongly recommend that you do so at the earliest opportunity.

    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.

    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

  • 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<object>/IDictionary<object,object> 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 (UDFs). 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.