Go Client Library Release Notes

  • 7.7.2
    Release Date: November 1, 2024
    • Minor Fix release.

    Bug Fixes

    • [CLIENT-3156] Fix an issue where rack policy always returns the master node. Resolves #455

  • 7.7.1
    Release Date: September 23, 2024
    • Minor Improvement release.

    Improvements

    • [CLIENT-3112] Correctly handle new error messages/error codes returned by AS 7.2.
    • [CLIENT-3102] Add "XDR key busy" error code 32.
    • [CLIENT-3119] Use generics for a general code clean up.
    • Uses several new generic containers to simplify concurrent access in the client.
    • Uses a Guard as a monitor for the tend connection. This encapsulates synchronized tend connection management using said Guard.
    • Add documentation about client.WarmUp to the client initialization API.

    Bug Fixes

    • [CLIENT-3082] BatchGet with empty keys raises gRPC EOF error.
    • [CLIENT-3122] Fix nil dereference in the tend logic.

  • 7.6.1
    Release Date: August 12, 2024
    • Minor improvement release.

    Improvements

    • [CLIENT-3071] Increase info command max response buffer size to 64 MiB.

  • 7.6.0
    Release Date: July 22, 2024

    Improvements

    • [CLIENT-3045] Move proxy client build behind a build flag. This removes the GRPC compilation and potential namespace conflict from the default build and moves it behind the compiler build flag "as_proxy".
    • [CLIENT-3049] Use a specialized pool for GPRC connections to prevent premature reaping.

    Bug Fixes

    • [CLIENT-3022] Close() throws a nil pointer error on ProxyClient without Authentication.
    • [CLIENT-3044] Circular reference in between Client<->Cluster causes memory leak when the client is not closed manually.
    • [CLIENT-3046] Wrong return type in Single Key Batch Operations with Multiple Ops per Bin.
    • [CLIENT-3047] Fix pointer value assignment in baseMultiCommand.parseKey #443.
    • [CLIENT-3048] Use precomputed ops variable in batchIndexCommandGet.executeSingle #442.

  • 7.5.0
    Release Date: July 1, 2024
    • Minor feature and fix release.

    New Features

    • [CLIENT-2968] Support new v7.1 proxy features:
      • Info command.
      • QueryPolicy.QueryDuration
    • [CLIENT-3012] Support new server 7.1 info command error response strings.

    Improvements

    • [CLIENT-2997] Scans should work in a mixed cluster of v5.7 and v6.4 server nodes.
    • [CLIENT-3012] Support new server 7.1 info command error response strings.
    • [CLIENT-3020] Change ReadModeSC doc from server to client perspective.

    Bug Fixes

    • [CLIENT-3019] Prevent Goroutine leak in AuthInterceptor for the Proxy Client.

  • 7.4.0
    Release Date: May 20, 2024
    • Hotfix release.

    Improvements

    • Add code coverage tests to the Github Actions workflow.
    • Call the CancelFunc for the context.WithTimeout per linter suggestions in gRPC calls.
    • Minor clean up and remove dead code.

    Bug Fixes

    • [CLIENT-2943] Client.BatchGetOperate does not consider ops in single key transforms.
    • [CLIENT-2805] Client dev tests failing with new server map key restrictions.
    • Fix as_performance and app_engine build tags.

  • 7.3.0
    Release Date: May 8, 2024
    • This is a major feature release of the Go client and touches some of the fundamental aspects of the inner workings of it.

    • We suggest complete testing of your application before using it in production.

    • Warning: The ProxyClient in this version supports a feature in Aerospike Server v7.1 that breaks the Batch functionality in Aerospike Cloud as of the date of this release. If you are using that product, you need to use the Aerospike Go Client v7.1.0. We expect the issue to resolve in the near future.

    New Features

    • [CLIENT-2238] Convert batch calls with just one key per node in sub-batches to batch requests.
      • If the number keys for a sub-batch to a node is equal to 1, the client will use a direct operation command instead of batch commands to reduce the load on the server.
    • [CLIENT-2274] Use constant sized connection buffers and resize the connection buffers over time.
      • The client would use a single buffer on the connection and would grow it per demand in case it needed a bigger buffer, but would not shrink it. This helped with avoiding using buffer pools and the associated synchronization, but resulted in excessive memory use in case there were a few large records in the results, even if they were infrequent.
      • This changeset does the following:
        1. Will use a memory pool for large records only. Large records are defined as records bigger than aerospike.PoolCutOffBufferSize. This is a tiered pool with different buffer sizes. The pool uses sync.Pool under the cover, releasing unused buffers back to the runtime.
        2. By using bigger aerospike.DefaultBufferSize values, the user can imitate the old behavior, so no memory pool is used most of the time.
        3. Setting aerospike.MinBufferSize will prevent the pool using buffer sizes too small, having to grow them frequently.
        4. Buffers are resized every 5 seconds to the median size of buffers used over the previous period, within the above limits.
      • This change should result in much lower memory use by the client.
    • [CLIENT-2702] Support Client Transaction Metrics. The native client can now track transaction latencies using histograms. Enable using the Client.EnableMetrics API.

    Improvements

    • [CLIENT-2862] Use default batch policies when the record level batch policy is nil.
    • [CLIENT-2889] Increase grpc MaxRecvMsgSize to handle big records for the proxy client.
    • [CLIENT-2891] Export various batch operation struct fields. Resolves #247.
    • Remove dependency on xrand sub-package since the native API is fast enough.
    • Linter Clean up.
    • WritePolicy.SendKey documentation, thanks to Rishabh Sairawat
    • Replaced the deprecated ioutil.ReadFile with os.ReadFile. PR #430, thanks to Swarit Pandey

    Bug Fixes

    • [CLIENT-2905] Fix inconsistency of handling in-doubt flag in errors.
    • [CLIENT-2890] Support []MapPair return in reflection.
    • This fix supports unmarshalling ordered maps into map[K]V and []MapPair in the structs.

  • 7.2.1
    Release Date: April 10, 2024
    • This release updates the dependencies to mitigate security issues.

    Bug Fixes

    • [CLIENT-2869] - Update modules. Fix Allocation of Resources Without Limits or Throttling for golang.org/x/net/http2.

  • 7.2.0
    Release Date: March 28, 2024
    • Major Feature Release.

    New Features

    • [CLIENT-2766] - Support RawBlobValue in the Go client.
    • [CLIENT-2767] - Support Persistent List Indexes.
    • [CLIENT-2823] - Support QueryDuration.
    • [CLIENT-2831] - Support ReadPolicy.ReadTouchTTLPercent.
    • [CLIENT-2240] - Add more client statistics.
      • Adds the following statistics:
        • circuit-breaker-hits: Number of times circuit breaker was hit.
        • connections-error-other: Connection errors other than timeouts.
        • connections-error-timeout: Connection Timeout errors.
        • connections-idle-dropped: The connection was idle and dropped.
        • connections-pool-overflow: The command offered the connection to the pool, but the pool was full and the connection was closed.
        • exceeded-max-retries: Number of transactions where exceeded maximum number of retries specified in the policy.
        • exceeded-total-timeout: Number of transactions that exceeded the specified total timeout.
        • total-nodes: Total number of nodes in the cluster.
    • Export private fields in PartitionStatus and add Recordset.BVal.

    Improvements

    • [CLIENT-2784] - Do not use batch repeat flag on batch writes when policy.SendKey is set to true.
    • [CLIENT-2442] - Document that Only string, integer, bytes are allowed as map key types; Policy.SendKey clarification.
    • Reduce the required Go version to 1.20 to support EL9; Update the dependencies.
    • Update ExpCond() doc to say that all action expressions must return the same type.

    Bug Fixes

    • [CLIENT-2811] - RespondPerEachOp does not work for list operation. To allow backwards compatibility, this change will change the default value of RespondPerEachOp to true.
    • [CLIENT-2818] - Fix return type for ExpListRemoveByValueRange.
    • Update the proto gRPC files to resolve namespace issues.
    • Improve the tests for BatchOperations to run on Github Actions.
    • Fix tests that relied on the server nsup-period setting to be larger than zero.
    • Fix Truncate test on slow servers.

  • 7.1.0
    Release Date: January 25, 2024
    • Minor Release.

    New Features

    • Add TaskId() to ExecuteTask.
    • [CLIENT-2721] - Make PartitionFilter.Retry public.

    Improvements

    • Clean up documentation and remove dependency of examples to the v6 version of the client.

    Bug Fixes

    • [CLIENT-2725] - QueryExecute (background query) does not work without operations.
    • [CLIENT-2726] - Proxy does not handle invalid filter expression error in query.
    • [CLIENT-2727] - Go proxy: Query Pagination never complete.
    • [CLIENT-2728] - Fix an issue where Bin names were ignored if a FilterExpression was passed to the Query.
    • [CLIENT-2732] - Go proxy: Not able to multiple query calls with the same statement.
    • [CLIENT-2759] - Go proxy: Background query with Expression does not filter records.

  • 7.0.0
    Release Date: December 14, 2023
    • CAUTION
      • This is a breaking release. It is required to allow upgrading your programs to the Aerospike Server v7. This program upgrade process required as a prerequisite to upgrading your cluster, otherwise seemless cluster upgrade will not be possible. The changes and their rationale are documented in the following section.

    Breaking Changes

    • [CLIENT-2713] - Handle Normalized Integers in Maps and Lists.

      • Aerospike Server v7 normalizes all positive integers in Maps and Lists into unsigned values for various efficiency reasons, and returns them as uint64. This effectively means that the type of positive int64 values will be lost. Go client supported uint64 types in lists and maps, and this change breaks that functionality by normalizing the values and removing the sign bits in case they are not needed. To support all versions of the server before and after the v7 consistently, the Go client will now behave like other Aerospike smart clients and automatically convert all unsigned int64 values inside maps and lists into signed values. This means a math.MaxUint64 value in a List or Map will return as two's compliment: -1.
      • Example:

        client.Put(wpolicy, key, BinMap{"map": map[any]any{"max": uint64(math.MaxUint64), "typed": uint64(0)}})
        

        will return as:

        rec, err := client.Get(rpolicy, key)
        // rec.Bins will be:
        // BinMap{"map": map[any]any{"max": int64(-1), "typed": int64(0)}}
        
        • This will break all code that used to cast rec.Bins["map"].(map[any]any)["max].(uin64). As a result, all such code should cast to int64 and then convert back to uint64 via a sign switch.
        • If you didn't use uint64 values in Maps and Lists, you should not be affected by this change.
        • All the test cases that depended on the old behavior have been adapted to the new behavior.
    • [CLIENT-2719] - Typed GeoJSON and HLL deserialization.
      • The Go client would read GeoJSON and HLL values back as string and []byte respectively. So if you read a record with bins of these types and wrote it directly back to the database, the type of these fields would be lost.
      • The new version addresses this issue, but could be a breaking change if you have code that casts the values to the old string and []byte. You now need to cast these values to GeoJSONValue and HLLValue types respectively.
    • [CLIENT-2484] - Add returnType to supported ExpMapRemoveBy* and ExpListRemoveBy* methods.
    • [CLIENT-2319] - Revise BatchReadAPIs to accept BatchReadPolicy argument. NewBatchReadOps no longer takes binNames and changes ops parameter to variadic for consistency.
      • Changes the following Public API:
        func NewBatchRead(key *Key, binNames []string) *BatchRead {
        func NewBatchReadOps(key *Key, binNames []string, ops []*Operation) *BatchRead {
        func NewBatchReadHeader(key *Key) *BatchRead {
        
        to
        func NewBatchRead(policy *BatchReadPolicy, key *Key, binNames []string) *BatchRead {
        func NewBatchReadOps(policy *BatchReadPolicy, key *Key, ops ...*Operation) *BatchRead {
        func NewBatchReadHeader(policy *BatchReadPolicy, key *Key) *BatchRead {
        
    • Replace WritePolicy with InfoPolicy in client.Truncate.
    • Remove the deprecated ClientPolicy.RackId. Use Policy.RackIds instead.

    New Features

    • [CLIENT-2712] [CLIENT-2710] - Support read replica policy in scan/query.
      • This includes PREFER_RACK which allows scan/query to be directed at local rack nodes when possible.
    • [CLIENT-2434] - Use 'sindex-exists' command in DropIndexTask.
    • [CLIENT-2573] - Support ExpRecordSize().
    • [CLIENT-2588] - SINDEX Support for 'Blob' Type Elements.

    Improvements

    • [CLIENT-2694] - Use RawURLEncoding instead of RawStdEncoding in proxy authenticator.
    • [CLIENT-2616] - Update dependencies to the latest, require Go 1.21.
    • Remove HyperLogLog tests from the Github Actions suite.
    • Remove Go v1.18-v1.20 from the Github Actions Matrix.
    • Rename grpc proto definition files due to compiler limitations. Resolves #414

    Bug Fixes

    • [CLIENT-2318] - Fixes an issue where Expression in BatchPolicy takes precedence rather than BatchDeletePolicy in BatchDelete.

  • 6.15.1
    Release Date: April 10, 2024
    • This release updates the dependencies to mitigate security issues.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Bug Fixes

    • [CLIENT-2869] - Update modules. Fix Allocation of Resources Without Limits or Throttling for golang.org/x/net/http2.

  • 6.15.0
    Release Date: January 25, 2024
    • Backport fix release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

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

    Improvements

    • Format all the code in the repository.

    Bug Fixes

    • [CLIENT-2759] - Go proxy: Background query with Expression does not filter records.
      • The filter expressions of wither policies will be used.
      • Priority is with the Query Policy for backwards compatibility.
    • [CLIENT-2616] - Update more dependencies to the latest.
    • [CLIENT-2618] - Support persistent map indexes.
    • [CLIENT-2726] - Proxy does not handle invalid filter expression error in query.
    • [CLIENT-2725] - QueryExecute (background query) does not work without operations.
    • [CLIENT-2727] - Go proxy: Query Pagination never complete.
    • [CLIENT-2732] - Go proxy: Not able to multiple query calls with the same statement.
    • [CLIENT-2728] - Fix an issue where Bin names were ignored if a FilterExpression was passed to the Query.
    • [CLIENT-2318] - Expression in BatchPolicy takes precedence rather than BatchDeletePolicy.
    • [CLIENT-2434] - Use 'sindex-exists' command in DropIndexTask.
    • [CLIENT-2694] - Use RawURLEncoding instead of RawStdEncoding in proxy authenticator.
    • Rename GRPC proto definition files due to compiler limitations. Resolves #414

  • 6.14.1
    Release Date: November 1, 2023
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Security

    • [CLIENT-2624] - BatchGetOperate triggering SIGSEGV nil pointer in the Go client.
      • Caching of the operation is faulty and causes race conditions when used concurrently. This commit removes the caching which included a useless allocation and rarely, if ever, had any practical influence on performance.

  • 6.14.0
    Release Date: August 23, 2023
    • Major feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • Adds support for the Aerospike Proxy Server and DBaaS service.

  • 6.13.0
    Release Date: July 31, 2023
    • Minor feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • Add ClientPolicy.SeedOnlyCluster in ClientPolicy for using only seed nodes for connection. (Github #407) thanks to Sudhanshu Ranjan
    • [CLIENT-2307] Add ExpInfinityValue() and ExpWildCardValue().

    Improvements

    • [CLIENT-2317] Better handle setting the Error.InDoubt flag in commands.
    • [CLIENT-2379] Fix returning overall batch error.
    • Move particle type outside of internal and back to types/ dir.
    • Updated dependencies to address security advisories.
    • Improve tests in slow environments.
    • Remove atomic integer operations, move to Mutex.
    • [CLIENT-2315] Use BatchReadPolicy in BatchRead instead of BatchPolicy.
    • [CLIENT-2312] Remove support for old-style queries in very old server versions.
    • [CLIENT-2265] Increase the required Go version to 1.17 to be able to compile a dependency which itself was updated due to security issues.

    Bug Fixes

    • Removes race condition from the client, resolves #399.
    • [CLIENT-2339] Developer tests detecting race condition after updating query protocol.
    • Assign DefaultInfoPolicy on Client initialization.
    • Fixed panics in Read Command Reflection API. (Github #402) thanks to Yegor Myskin
    • [CLIENT-2283] Set correct return types in list/map read expressions.
    • [CLIENT-2316], [CLIENT-2317] BatchResult Err and ResultCode are not always set on errors, Incorrect in-doubt flag handling during batch operation.

  • 6.12.0
    Release Date: March 20, 2023
    • Minor feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Improvements

    • [CLIENT-2235] Minor documentation cleanup. Formatting, clarification and TODOs for next major version.
    • [CLIENT-2234] Export BatchRead.Policy.
    • Update Ginkgo and Gomega to the latest version to avoid security issues.

    Bug Fixes

    • [CLIENT-2230] The first row of batch records represented a server error instead of the overall error in the call.
    • [CLIENT-2233] Wrong FilterExpression size calculation in BatchOperate commands.

  • 6.11.0
    Release Date: March 9, 2023
    • Minor feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Improvements

    • [CLIENT-2116] Check for completion/cancellation of the Scan/Query before firing off commands to nodes.

    Bug Fixes

    • [CLIENT-2227] PARAMETER_ERROR using expressions and batch write. Wire protocol was violated when the estimateExpressionSize was called.

  • 6.10.0
    Release Date: February 8, 2023
    • Minor feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • [CLIENT-2170] Export MapReturnTypes, MapOrderTypes and MapWriteModes.
    • [CLIENT-2129], [CLIENT-2035] Adds Expression.Base64() and ExpFromBase64() to allow for serialization of expressions.

  • 6.9.1
    Release Date: January 23, 2023
    • Minor feature release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • [CLIENT-2138] Allow PartitionFilter to persist its cursor and retrieve the encoded cursor back to allow pagination. While the Go client supported pagination, it did not export the necessary data structures to allow that cursor to be persisted by the user. These data structures remain private, but two methods (PartitionFilter.EncodeCursor and PartitionFilter.DecodeCursor) are exported on the PartitionFilter to allow this mechanism to work.

  • 6.8.0
    Release Date: January 10, 2023
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • [CLIENT-1988] Added base64 encoding functions CDTContextToBase64 and Base64ToCDTContext for CDTContext.

    Improvements

    • Added an example for regexp expressions in Queries.

    Bug Fixes

    • [CLIENT-1204] Retry logic will keep retrying on KEY_NOT_FOUND errors until policy.MaxRetries is hit or record is returned to the client.

  • 6.7.0
    Release Date: December 5, 2022
    • Improves testing for float64 precision formatting between amd64 and aarch64.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Bug Fixes

    • [CLIENT-2019] - Write Batch operation with an invalid namespace record causes all batch transactions to fail.
    • [CLIENT-2020] - Support QueryPartitions with non-nil filter (secondary index query)

  • 6.6.0
    Release Date: November 8, 2022
    • Minor improvements and fix release.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Improvements

    • [CLIENT-1959] - Retry a foreground scan/query partition to a different replica when a partition unavailable error occurs.
    • [CLIENT-1957] - Handle Query, QueryExecute and QueryAggregate on non-existing sets without timing out.
    • [CLIENT-1956] - Return an error when a read operation is used in a background query.

    Bug Fixes

    • [CLIENT-1958] - Prevent division by zero if the node array is empty in Cluster.GetRandomNode().
    • [CLIENT-1955] - Allow BatchPolicy.SendKey to be applied to all batch keys in all batch commands. Batch commands used in BatchOperate take an independent policy object. We used to ignore the SendKey attribute in those policies.

  • 6.5.0
    Release Date: October 26, 2022
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • [CLIENT-1852] - Add ListSetWithPolicyOp to list operations.

    Bug Fixes

    • [CLIENT-1852] - Fix ListRemoveByIndexRangeOp index param type.
    • [CLIENT-1855] - Fix an issue where ListGetByValueRangeOp, ListRemoveByValueRangeOp with nil end value return empty slice.
    • [CLIENT-1867] - Fix an issue where BatchOperate returns unexpected ResultCode for successful records when a record within a batch returns an error.

  • 6.4.0
    Release Date: September 16, 2022
    • This is a Major fix release. We recommend you update to this version ASAP. A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). Previous versions of the client aborted the scan and put the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. This has been fixed in Go Client v5.10.0 and v6.4.0.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Improvements

    • Update the examples for the new scan/queries.
    • Avoid indirection for []byte conversion during reflection. Resolves #382.

    Bug Fixes

    • [CLIENT-1822] Scan/Query/Other streaming commands, including some Batch could put a faulty connection back to the pool after a cluster event where in certain conditions its buffer contents would end up in another scan and mix the results.
    • Update go.mod, redact buggy versions and update required Go version to v1.16.
    • Fixes a few test errors for Aerospike Server version 6.1+.
    • Adds a nil check for error in the execution pipeline retry mechanism.

  • 6.3.0
    Release Date: August 29, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 6.4.0 at the earliest opportunity.

    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    New Features

    • [CLIENT-1802] - Support creating a secondary index on elements within a CDT using Context. Supported by Server v6.1+.
    • [CLIENT-1773] - Change client configuration defaults:
      • Set ClientPolicy.ConnectionQueueSize from 256 to 100.
      • Set ClientPolicy.IdleTimeout from 55 to 0 secs.
      • Set ClientPolicy.MaxErrorRate from 0 to 100.
      • Set Policy.TotalTimeout from 0 to 1000ms for all commands except scan/query.

    Improvements

    • Documented a few constraints in the HLL API docs.
    • Documented that PartitionFilter is both a filter and a cursor in the API docs.

    Bug Fixes

    • Fixed a few Linter warnings.

  • 6.2.1
    Release Date: July 27, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 6.4.0 at the earliest opportunity.

    • This is mostly a re-release of Aerospike Go Client library version 6.2.0, with one added minor change. It seems that we bungled the Github tag somehow for the Aerospike Go Client library version 6.2.0 release. Upgrade from Aerospike Go Client library version 6.2.0 to this version for the changes in Aerospike Go Client library version 6.2.0 to be applied to your code.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Bug Fixes

    • Add a nil check for error in batch retry to be on the safe side.
    • [CLIENT-1783] - Client crashes when tracker is nil during Scan/Queries.
    • [CLIENT-1782] - BatchOperate does not return error BATCH_MAX_REQUESTS_EXCEEDED.
    • [CLIENT-1781] - Fix BatchOperate: use offset index to pick correct record.

  • 6.2.0
    Release Date: June 29, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 6.4.0 at the earliest opportunity.

    • This is a major fix release. We recommend upgrading to this release if you are using BatchOperate or Scan/Queries.

    Bug Fixes

    • [CLIENT-1783] - Client crashes when tracker is nil during Scan/Queries.
    • [CLIENT-1782] - BatchOperate does not return error BATCH_MAX_REQUESTS_EXCEEDED.
    • [CLIENT-1781] - Fix BatchOperate: use offset index to pick correct record.

  • 6.1.0
    Release Date: June 23, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 6.4.0 at the earliest opportunity.

    • This is a minor feature and bug fix release.

    New Features

    • [CLIENT-1747] - Add EXISTS return type for CDT read operations.

    Bug Fixes

    • [CLIENT-1754] - Go SDK does not support MapIncrementOp for batch write.
    • [CLIENT-1770] - Assume background query is complete when the server 6.0+ returns 'not found' in 'query-show' info command. For the old servers, the client will check if it has already observed the job before. If it has, it will also assume the job has finished.

  • 6.0.0
    Release Date: April 7, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 6.4.0 at the earliest opportunity.

    • This is a major feature release. It adds several new features supported by the server v6, and drops supports for Predicate Expressions.

    New Features

    • [CLIENT-1699] - Support New v6 Queries.
    • [CLIENT-1700] - Support New Server v6 Roles and Privileges.
    • [CLIENT-1701] - Support New Server v6 Batch Write.
    • [CLIENT-1702] - Remove policy.PredExp feature from the client.

  • 5.11.0
    Release Date: January 10, 2023
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Bug Fixes

    • [CLIENT-1204] Retry logic will keep retrying on KEY_NOT_FOUND errors until policy.MaxRetries is hit or record is returned to the client.

  • 5.10.0
    Release Date: September 16, 2022
    • This is a Major fix release. We recommend you update to this version ASAP. A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). Previous versions of the client aborted the scan and put the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. This has been fixed in Go Client v5.10.0 and v6.4.0.
    • Debian 9 Stretch LTS has reached its End of Life on June 30 2022. We will drop support for Debian 9 in an upcoming client release.

    Improvements

    • Update the examples for the new scan/queries.
    • Avoid indirection for []byte conversion during reflection. Resolves #382.

    Bug Fixes

    • [CLIENT-1822] - Scan/Query/Other streaming commands, including some Batch could put a faulty connection back to the pool after a cluster event where in certain conditions its buffer contents would end up in another scan and mix the results.
    • Update go.mod, redact buggy versions and update required Go version to v1.16
    • Fixes a few test errors for Aerospike server version 6.1+.
    • Adds a nil check for error in the execution pipeline retry mechanism.

  • 5.9.0
    Release Date: June 29, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 5.10.0 at the earliest opportunity.

    • This is a major fix release. We recommend upgrading to this release if you are using Scan/Queries.

    Bug Fixes

    • [CLIENT-1783] - Fix client crashes when tracker is nil during Scan/Queries. PR #379, thanks to adumovic.
    • Fix client.Get when policy.FilterExpression and bin names are both provided.

  • 5.8.0
    Release Date: April 7, 2022

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 5.10.0 at the earliest opportunity.

    • This is a major fix release. We recommend upgrading to this release if you are using authentication.

    Improvements

    • Adds notices regarding Auth issue to CHANGELOG and clarifies how to change code for an old breaking change in v3.
    • Forward compatibility with Server v6 regarding queries and scans not sending a fresh message header per partition.

    Bug Fixes

    • [CLIENT-1695] - Fixes a potential nil deference in sessionInfo.isValid() method.
    • Fixes an issue where with default policies and after certain errors the replica node was not selected on retry.

  • 5.7.0
    Release Date: December 6, 2021

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 5.10.0 at the earliest opportunity.

    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    Improvements

    • [CLIENT-1635] - Allow Preventing Retries on Exhausted Connection Pools.
    • Improve Policy.deadline() logic to use MaxRetries and SocketTimeout to calculate TotalTimeout when it is not set.
    • Do not test PredExp for server v5.8+.
    • Explicitly remove departed nodes from the partition map on cluster change.

  • 5.6.0
    Release Date: September 17, 2021

    [IMPORTANT NOTE] A bug might occur when a client performing a scan hits a "Partition Unavailable" during an unstable cluster (in both high availability (AP) and strong consistency (CP) modes). The client aborts the scan and puts the connection back into the pool, which might cause unprocessed results to be sent to a different transaction (of the same client), possibly resulting in incorrect application behavior. We strongly recommend that you upgrade to the Go client 5.10.0 at the earliest opportunity.

    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    Bug Fixes

    • [CLIENT-1605] - Invalidate Session Token on unsuccessful login, Copy token from the connection buffer, Consider Tend interval in session expiration calculations. Fixes a bug present in Go clients 5.0.0 - 5.5.0, where upon renewing the session token, the client might fail to authenticate. New connections would then be rejected until the client is restarted.

  • 5.5.0
    Release Date: September 6, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    New Features

    • [CLIENT-1586] - Support Batch Read Operations.

    Improvements

    • Add authentication to info example.

    Bug Fixes

    • Fix the wrong UDF name in predexp test.

  • 5.4.0
    Release Date: August 16, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    New Features

    • [CLIENT-1576] - Support a list of preferred racks rather than a single rack when replica is PREFER_RACK.
    • [CLIENT-1577] - Support PKI authentication where the TLS certificate's common name (CN) specifies the Aerospike user name.
    • [CLIENT-1578] - Support scan-show and query-show info commands.

    Improvements

    • Run fewer iterations for CDT RSHIFTEX and LSHIFTEX.
    • Add PKI authentication to the benchmark utility.

  • 5.3.0
    Release Date: August 2, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • Minor fix and improvement release.
    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    Improvements

    • Improve seeding of cluster nodes in tend. All seeds are discovered and added on the first step.
    • Add -hosts flag to test command arguments.

    Bug Fixes

    • Fix where Bin names were not sent to the server in GetXXX commands and consequently all bins were retrieved.

  • 5.2.0
    Release Date: June 28, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • Major fix release. We recommend updating to this version immediately.
    • The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5

    New Features

    • Add support for boolean bins in expressions (ExpBoolBin).
    • Add Node.PeersGeneration, Node.PartitionGeneration, Node.RebalanceGeneration.
    • Support TLS connections in benchmark tool. Resolves #313.
    • Expose Partition Health API to the user (Cluster.Healthy()). Resolves #334.

    Improvements

    • Do not keep connection on all client-side errors.
    • Refactor batch commands to better reflect that keys are not created on batch requests.
    • Mention List/Map WriteFlags in List/Map Policy constructors.
    • Fix ClientPolicy.ErrorRateWindow documentation.
    • Fix benchmark document. Thanks to Koji Miyata
    • Fix unidiomatic variable naming. Thanks to Yevgeny Rizhkov

  • 5.1.0
    Release Date: June 10, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • Major fix release. (The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5)

    Improvements

    • Set the error node on transaction failures.
    • Add compression and minConnsPerNode to benchmark tool options.

    Bug Fixes

    • Add missing Compress commands.
    • Check if error is not nil before chaining. Resolves issue #353.
    • Handle nil case in Node.String().
    • Correctly handle errors in Connection.Read and Connection.Write. Avoids shadowing of the error. Resolves issue #352.

  • 5.0.2
    Release Date: May 30, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • Minor fix release. (The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5)

    Bug Fixes

    • Improve handling and chaining of errors in BatchCommand retries.
    • Do not wrap in chainErrors if outer is nil and the inner error is of type Error.
    • Support reading back keys with original List values.

  • 5.0.1
    Release Date: May 27, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • Minor fix release. (The code resides in the v5 branch, and is available via the import github.com/aerospike/aerospike-client-go/v5)

    Bug Fixes

    • Handle lack of key digests in BatchExists command.
    • Allow and handle nil arguments for chainError.
    • Avoid race condition in chaining predefined errors.

  • 5.0.0
    Release Date: May 11, 2021

    [IMPORTANT NOTE] An authentication bug was introduced in Go client 5.0.0. As a result, the client may fail to refresh its session token after it expires, requiring the client to be restarted. If you are using password-based authentication, we highly recommend that you upgrade your client to version 5.6.0+, which you can do safely.

    • This is a major feature release. It is also a major breaking release. We have adopted Go's module system as recommended by the Go authors, so the new release moves the active branch to v5. As such, the import path changes to github.com/aerospike/aerospike-client-go/v5. The master branch remains in place to allow maintenance for the older v4 classic version until most users get the chance to upgrade.

    • This release also changes the way errors work in the client, and invalidates the old way. This allows the client to support Go's somewhat new errors.Is and errors.As API, and properly chain errors together.

    • Also note that the Go Client now requires Aerospike Server version 4.9+ and will not work properly with older versions.

    Breaking Changes

    • Limits keys to int, string and []byte types. The old ListValue arrays as types are not supported anymore.
    • Remove TLS code support for golang v1.8 and before.
    • Moves AerospikeError from /types to the root of the package, and removes all other error type like NodeError.
    • [CLIENT-1526] - Removes Policy.Priority, ScanPolicy.ScanPercent and ScanPolicy.FailOnClusterChange.
    • Removes Recordset.Read() and avoids multiplexing of Records channel in Recordset.Results(), and unexports the Error channel.
    • Remove legacy client code for old servers. Go client now requires server version 4.9+.
    • Remove Statement.PredExp, and only use the Policy.PredExp to avoid confusion. PredExp has been deprecated and replaced by Expression.
    • Renames type FilterExpression to Expression.
    • Client.GetBatchXXX() will return ErrFilteredOut if an expression is passed to the API and some records were filtered out, regardless of BatchPolicy.AllowPartialResults.
    • Client.CreateRole() now requires quota information in the param list.
    • Removed Connection.Authenticate() API.
    • Renamed GetOpForBin() to GetBinOp().
    • Removed ScanPolicy.ConcurrentNodes. Now only uses .MaxConcurrentNodes to avoid confusion.
    • Moves the RequestInfo() under Connection.

    New Features

    • Adopts module system and changes the import paths to github.com/aerospike/aerospike-client-go/v5.
    • [CLIENT-1476] - Support new expressions introduced in server version 5.6, including ExpReadOp and ExpWriteOp.
    • [CLIENT-1463] - Support boolean particle type and make it opt-in for reflection API via UseNativeBoolTypeInReflection.
    • [CLIENT-1522] - Support user quotas and statistics.
    • [CLIENT-1492] - Remove ability to use old authentication protocol. This works behind the scenes and does not have any impact on user code.
    • [CLIENT-1081] - Adds Error interface, changes all API signature to return Error.
    • Exports AdminCommand and its QueryXXX API.

    Improvements

    • Implement GomegaStringer interface to prevent very long error messages in tests.
    • Adds ResultCode.String().

  • 4.7.1
    Release Date: July 11, 2023
    • Move the v4 version to its own v4 branch due to go modules enforcement.

  • 4.7.0
    Release Date: July 10, 2023

    Minor maintenance release. (The code resides in the master branch, and is available via the import github.com/aerospike/aerospike-client-go)

    Improvements

    • Upgraded lua and gomega dependencies to the latest versions.
    • Move particle type back from internal to types.

  • 4.5.2
    Release Date: May 28, 2021

    Minor fix release. (The code resides in the master branch, and is available via the import github.com/aerospike/aerospike-client-go)

    Bug Fixes

    • Handle reading keys where the original value sent to the server was a list. Resolves Issue #350.

  • 4.5.1
    Release Date: May 27, 2021

    Minor fix release. (The code resides in the master branch, and is available via the import github.com/aerospike/aerospike-client-go)

    Bug Fixes

    • Handle lack of key digests in BatchExists command.

  • 4.5.0
    Release Date: April 12, 2021

    Minor feature, fix, and improvement release.

    New Features

    • Allows reading of boolean types from the server, supported in Aerospike Server v5.6. The current client will not support writing boolean type to the server. That features will be supported in the upcoming Go client v5.

    Improvements

    • [CLIENT-1495] Tentatively check if a connection is allowed to avoid launching too many goroutines.

    Bug Fixes

    • Implements correct and re-triable Scans for the Reflection API.
    • Fixes an obscure var shadowing bug in TLS connection handshake error logging.

  • 4.4.0
    Release Date: March 12, 2021

    Minor fix and improvement release.

    Improvements

    • Use a global TLS setting everywhere in tests.

    Bug Fixes

    • Fixes an issue where the client's reflection API expected certain int value types returned from the database. That assumption was wrong for CDTs and free form Lists and Maps. The client will now convert types to each other per Go's conversion rules where possible.

  • 4.3.0
    Release Date: March 1, 2021

    Minor feature, fix and improvements release

    New Features

    • [CLIENT-1457] - Support scan pagination through ScanPartitions() with PartitionFilter.

    Improvements

    • Makes the code samples more readable in the documentation.
    • Fixes a lot of code samples in documentation, along with typos, etc.
    • Fixes copy/paste naming errors in the documentation. Thanks to Yevgeny Rizhkov
    • Removes a few unreachable lines from the code. Thanks to Yevgeny Rizhkov
    • Handles a few TLS connection related issues in tests.

    Bug Fixes

    • Fixes an issue where if errors and filtered records happened at the same time in Batch requests, no error would be returned to the user.

  • 4.2.0
    Release Date: February 12, 2021

    Changes:

    • Only use Policy.Priority and MultiPolicy.FailOnClusterChange on server versions < 4.9. Priority is now deprecated and replaced with MultiPolicy.RecordPerSecond.
    • Statement.TaskID is deprecated and will be removed in the next major version.
    • ScanPolicy.ConcurrentNodes is deprecated and will be removed in the next major version.

    New Features

    • [CLIENT-1192] - Adds Support for partition scans. Queries which lack a Statement.Filter will be automatically converted to partition scans. If the cluster supports partition scans, all Scans and Queries will use the new protocol to allow retrying in case of some errors.
    • [CLIENT-1237] - Adds Support for MultiPolicy.MaxRecords in scans and queries without Statement.Filter.
    • Adds NewHosts convenience function. (Github #320) thanks to Yegor Myskin

    Improvements

    • Adds a few missing error checks.
    • Moves examples files to dedicated folders to avoid multiple main function errors for new users.
    • Some documentation clean up. (Github #314) thanks to Shin Uozumi
    • Fix typo in example NewKey(). (Github #331) thanks to Patrick Kuca
    • Adds an example to list operations (using operate and list policy).
    • Runs the XDR tests only when XDR is configured on the server.
    • Add TLS configuration to test parameters.
    • Mark NewPredExpXXX return value as the PredExp interface instead of concrete type. It will now group them under the PredExp interface in the docs.

  • 4.1.0
    Release Date: January 26, 2021

    Major feature release.

    New Features

    • [CLIENT-1417] - Adds Circuit-Breaker. Rejects command when assigned node's error rate exceeds ClientPolicy.MaxErrorRate over ClientPolicy.ErrorRateWindow.
    • [CLIENT-1410] - Adds Client.SetXDRFilter().
    • [CLIENT-1433] - Adds ExpMemorySize() to expression filters.

    Improvements

    • [CLIENT-1434] - Reset peers, partition and rebalance generations on node tend errors.

    Bug Fixes

    • Pack byte array header with string header codes when using msgpack to be consistent with server.
    • Adds ResultCode.LOST_CONFLICT .

  • 4.0.0
    Release Date: November 27, 2020

    Major feature release. It deprecates PredExp filters and replaces them with the far more capable Expressions.

    Incompatible Changes:

    • Changes the BitResizeFlagsXXX enum types to BitResizeFlags type. This should not affect any code if the enums were used.
    • Changes the ListSortFlagsXXX enum types to ListSortFlags are now typed. This should not affect any code if the enums were used.

    New Features

    • [CLIENT-1361] - Replace predicate filters with new Aerospike Expressions.

    Bug Fixes

    • Allows unmarshalling of bool fields to sub objects in the reflection API. (Github #325)
    • Fixes an issue where BatchIndexGet commands were not retried in some circumstances.

  • 3.1.1
    Release Date: November 9, 2020

    Hotfix release. We recommend upgrading to this version, or cherry-picking the changeset to your vendored version if possible.

    Changes:

    • Removes support for versions prior to Go v1.12 due to incompatibility in the testing library we use. Go v1.9+ should still work, though they will not be tested in our tests.

    Bug Fixes

    • Handle cleanup cases in Offer and DropIdleTail for singleConnectionHeap. (Github #318)
    • Unlock the mutex in singleConnectionHeap.Poll if called after cleanup. (Github #323) thanks to linchuan4028

  • 3.1.0
    Release Date: September 10, 2020

    Minor fix release.

    Bug Fixes

    • [CLIENT-1344] - Fixes an issue where initial tend was not adhering to the ClientPolicy.Timeout.

  • 3.0.5
    Release Date: August 19, 2020

    Bug Fixes

    • Corrects the maximum bin name size in error message.
    • Fixes geo coordinates in predexp tests due to more strict server validation.
    • Fixes misspelled words and doc links. PR #311, thanks to Abhay.

  • 3.0.4
    Release Date: July 7, 2020

    Bug Fixes

    • Fixes Client.SetWhitelist API.
    • Fixes an issue where Whilelist was not set during QueryRole.

  • 3.0.3
    Release Date: July 3, 2020
    • Minor fix release.

    Bug Fixes

    • Resolves an issue where batch retry could return some nil records in some situations.

  • 3.0.2
    Release Date: June 29, 2020

    Improvements

    • Converts a few panics to errors in wire protocol encoding/decoding. Resolves issue #304.

    Bug Fixes

    • Fixes an issue where if a slice was pre-assigned on a struct, the data would not be allocated to it in reflection API. PR #302, thanks to gdm85
    • Fixes an issue where Node.GetConnection() could in some circumstances return no connection without an error. This would potentially cause a panic in VERY slow production servers.

  • 3.0.1
    Release Date: June 17, 2020
    • Minor bug fix release.

    Bug Fixes

    • Fixes caching of embedded structs with options in alias. Resolves issue #301.

  • 3.0.0
    Release Date: June 8, 2020
    • There are a few minor breaking API changes. See ClientPolicy.
    • There has been significant changes to clustering code. We recommend extensive testing before using in production.

    New Features

    • Adds support for Relaxed Strong Consistency mode.
    • Adds support for whitelists in Roles.

  • 2.12.0
    Release Date: May 28, 2020

    Major feature release.

    New Features

    • Adds MapCreateOp and ListCreateOp in Context for CDTs.

  • 2.11.0
    Release Date: May 28, 2020

    Major feature release.

    New Features

    • Adds HyperLogLog support.

    Improvements

    • Exports estimateSize on Value Datastructure. PR #299, thanks to Sainadh Devireddy
    • Adds more detail regarding ClientPolicy.IdleTimeout in the documentation, and changes the default value to 55 seconds.

  • 2.10.0
    Release Date: May 12, 2020

    Minor feature release.

    New Features

    • Adds ClientPolicy.MinConnectionsPerNode.

    Improvements

    • Returns distinct error when empty slice is passed to BatchGetObjects. PR #297, thanks to Mohamed Osama.

  • 2.9.0
    Release Date: March 14, 2020

    Minor feature release.

    New Features

    • Supports use of anonymous structs in reflection API. PR #287, thanks to 小马哥.

  • 2.8.2
    Release Date: March 4, 2020

    Hot fix release.

    Bug Fixes

    • Fixes a race condition introduced in the last release.

  • 2.8.1
    Release Date: March 4, 2020

    Minor fix and improvements.

    Improvements

    • Uses a sync.Pool to preserve the connection buffers on close to remove pressure from the allocator and the GC during connection churns.

    Bug Fixes

    • Cleans up the data structure cross refs on Cluster.Close to help GC free the objects.

  • 2.8.0
    Release Date: February 28, 2020

    Minor feature release.

    New Features

    • Allows ,omitempty tag to be used in struct tags. It behaves the same as the stdlib json. Note that there should be no whitespace between the comma and the rest of the tag.

  • 2.7.2
    Release Date: January 30, 2020

    Minor fix release.

    Bug Fixes

    • Resolves an issue where an invalid/malformed compressed header could cause a panic by reporting wrong compressed data size. Resolves #280.

  • 2.7.1
    Release Date: January 20, 2020

    Bug Fixes

    • Fixes an issue where an error was not checked after a network read in multi_command.go and would cause a panic if policy.UseCompression was used.

  • 2.7.0
    Release Date: December 23, 2019

    New Features

    • Adds support for client/server wire transport compression.
    • Adds support for descending CDT list order.

    Bug Fixes

    • Fixes an issue where unpacking Value objects would cause an infinite loop. PR #273, thanks to small-egg.

  • 2.6.0
    Release Date: November 25, 2019

    New Features

    • Supports correct Query/Scans via Scan/QueryPolicy.FailOnClusterChange.

    Bug Fixes

    • Fixes an issue where the client using multiple seeds via DNS or Load Balancer would fail to connect if more than one of them were unreachable.

  • 2.5.0
    Release Date: November 8, 2019

    Major feature release.

    New Features

    • Adds support for predicate expressions in all transactions. See Policy.Predexp.

  • 2.4.0
    Release Date: October 29, 2019

    Major feature release.

    New Features

    • Adds support for bitwise operations.
    • Adds support for nested CDTs.

  • 2.3.0
    Release Date: October 17, 2019

    Major feature release.

    New Features

    • Adds support for mixed security modes in cluster to enable rolling upgrade with security changes.
    • Adds support for delete record operation DeleteOp() in Client.Operate().
    • Adds support for write operations in background scan/query.
    • Adds support for Scan/QueryPolicy.RecordsPerSecond field to limit throughput.

  • 2.2.1
    Release Date: August 13, 2019

    Minor improvement release.

    Improvements

    • Supports the Write role in Aerospike Server version 4.6.0.2+.

  • 2.2.0
    Release Date: May 21, 2019

    Fixes and improvements release.

    Improvements

    • Transactions will not count a lack of connection in the node's connection pool as an iteration anymore.

    Bug Fixes

    • Fixes an issue where an empty connection pool would cause a lock contention that would in turn lead to high CPU load.
    • Fixes an issue where in some circumstances connection pool would be depleted of connections.
    • Fixes an issue where the replica node would not be selected in case of master-node failure in Policy.ReplicaPolicy.SEQUENCE for reads.

  • 2.1.1
    Release Date: April 25, 2019

    Minor fixes and improvements release.

    Improvements

    • Tend will not send rack: command to the nodes if ClientPolicy.RackAware is not set. PR #259, thanks to Dmitry Maksimov.
    • Adds a new GeoJSON example.

    Bug Fixes

    • Fixes an issue where meta tags were ignored in reflection API for ScanAllObjects/QueryObjects/BatchGetObjects. Resolves #260.

  • 2.1.0
    Release Date: April 11, 2019

    Minor feature and improvements release.

    Changes:

    • Adds a TLS connection example.
    • Adds Cap method to connectionHeap.

    New Features

    • Adds WarmUp method for Client, Cluster and Node. This method will fill the connection queue to ensure maximum and smooth performance on start up.

    Improvements

    • Simplify connection Timeout calculation and floor the min timeout to 1ms.
    • Simplify resetting server timeout for each iteration.
    • Adds a few pre-defined errors to avoid allocating them during runtime.

  • 2.0.0
    Release Date: March 20, 2019

    This is the first major breaking release of the Go client in 5 years.

    Most breaking changes are minor and specific, and will either not hit you, or will be fixable with relative ease.

    The only major change is that the behavior of the client when a key does not exist has changed.
    It used to return no errors, but a nil Record.Bins. Now it returns ErrKeyNotFound error.
    This is a significant change, and you should search your code for all instances of .Bins == nil (or equivalent) and adapt the code accordingly.

    Breaking Changes

    • Get/Put/Touch/Operate and ExecuteUDF commands will return an ErrKeyNotFound error when the key does not exist in the database. The old behavior used to be not to return an error, but have an empty Record.Bins.
    • Renames Statement.Addfilter to Statement.SetFilter, changes the name and type of Statement.Filters to Statement.Filter.
    • Remove ClientPolicy.RequestProleReplicas. The client will always request them.
    • Removes ScanPolicy.ServerSocketTimeout and QueryPolicy.ServerSocketTimeout in favor of the already existing Policy.SocketTimeout.
    • Renames Policy.Timeout to Policy.TotalTimeout to make the naming consistent with other clients.
    • Moves atomic package to internal.
    • Moves ParticleType package to internal.
    • Moves RequestNodeInfo and RequestNodeStats to methods on Node object, and adds InfoPolicy to the relevant API signatures.
    • Removes WaitUntilMigrationIsFinished from Scan/Query policies.
    • Changes NewConnection method signature
    • Makes LoginCommand private.
    • Makes OperationType private.
    • Remove long deprecated method for pool management.
    • Removes unused ReadN method in Connection.
    • Embeds Policies as values and not pointers inside MultiPolicy, ScanPolicy, QueryPolicy

    Improvements

    • Optimizes connection creation out of the transaction pipeline and makes it async.
    • Puts a threshold on the number of connections allowed to open simultaneously. Controlled via ClientPolicy.OpeningConnectionThreshold.
    • Do not clear partition map entry when a node reports that it no longer owns that partition entry.
    • Uses rolling timeout instead of strict timeout for connections. This means that every time a connection is read, the timeout is set to policy.SocketTimeout again, unless it will take longer than the whole transaction TotalTimeout.
    • Remove ToValueArray and ToValueSlice methods to discourage such sub-optimal use. Changes QueryAggregate signature to remove the need for those methods.
    • Remove unnecessary conversion from BinMap to Bins in reflection API to speed up the command and avoid unnecessary memory allocations.
    • Use shorter intervals with exponential back-off for tasks.

    • Fixes a race condition in the AdminCommand.

    • Synchronize the XORShift to avoid race conditions.
    • Completely removes deprecated LDT code.

  • 1.39.0
    Release Date: March 11, 2019

    Major improvements release.

    Changes:

    • Removes BatchPolicy.UseBatchDirect from the code since it is not supported as of Server Version 4.4.0.4.

    Improvements

    • Significantly improves Batch / Scan / Query / UDF / QueryAggregate performance, up to 10x depending on the number of records.

  • 1.38.0
    Release Date: February 21, 2019
    • Minor feature and improvements release.

    New Features

    • Support new server truncate-namespace command via Client.Truncate when set is not specified.

    Improvements

    • The client will not clear a partition map entry when a node reports that it no longer owns that partition entry until another node claims ownership.
    • Adapt UDF test for new server changes. The server will not return an error after RemoveUDF if the UDF did not exist.
    • Improves a few tests and relaxes tolerances in tests to accommodate slower cloud test environments.

    Bug Fixes

    • Fixes a race condition in XOR shift RNG.
    • Fixes a race condition in the AdminCommand.

  • 1.37.0
    Release Date: December 2, 2018

    Incompatible Changes:

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

    Highlights

    Other Changes:

    • Update admin message version to 2.
    • Remove unused error codes.
    • Remove Go 1.7 and 1.8 from travis tests due to incompatibility with the test framework.

    New Features

    • Support lut-now parameter for Client.Truncate() in servers that support and require it.
    • Added support for CDT Map Relative Ops: MapGetByKeyRelativeIndexRangeOp, MapGetByKeyRelativeIndexRangeCountOp, MapGetByValueRelativeRankRangeOp, MapGetByValueRelativeRankRangeCountOp, MapRemoveByKeyRelativeIndexRangeOp, MapRemoveByKeyRelativeIndexRangeCountOp.
    • Added support for CDT List Relative Ops: ListGetByValueRelativeRankRangeOp, ListGetByValueRelativeRankRangeCountOp, ListRemoveByValueRelativeRankRangeOp, ListRemoveByValueRelativeRankRangeCountOp.
    • Added INFINITY and WILDCARD values for use in CDT map/list comparators.

    Improvements

    • Increase default Policy.SocketTimeout to 30s. If SocketTimeout is longer than Timeout, Timeout will be used instead silently. This change is done for the client to perform more intuitively in cloud environments.
    • Never return a random node if a node was not found in the partition map.
    • Return more descriptive error messages on various partition map and other node related errors.

  • 1.36.0
    Release Date: November 1, 2018

    Feature and Improvement release.

    New Features

    • Support rackaware feature. You need to set the ClientPolicy.RackAware = true, and set the ClientPolicy.RackId. All read operations will try to choose a node on the same rack if Policy.ReplicaPolicy = PREFER_RACK. This feature is especially useful when the app/cluster are on the cloud and network throughput over different zones are price differently.

    Improvements

    • Update Operate command documentation.
    • Improve an expectation in a CDT Map test.
    • Move UDF object test to the proper file.
    • Support float64 struct fields when the value of the field has been changed inside lua and set to int - will only affect clusters which support float.
    • Updated README example with clarification.

    Bug Fixes

    • Fixes an issue where multiple operation results for a bin would be appended to the first result if it was a list.
    • Fixes an issue where key value was sent and cause server PARAMETER_ERROR via the operate command if policy.SendKey was set but no write operations were passed.

  • 1.35.2
    Release Date: October 2, 2018

    Improvement release.

    Improvements

    • Do not allocate a partition map on each tend unless needed.
    • Adds ConnectionsClosed stat and sets the connection and dataBuffer to nil in a few places to help the GC.
    • Use a heap data structure for connection pooling instead of a queue. | This allows better management of connections after a surge, since it keeps the unused connection in the bottom of the heap to close. | It also helps with performance a bit due to better caching of the data structure in CPU.

  • 1.35.1
    Release Date: September 18, 2018

    Hot fix release. We recommend updating to this version if you are using authentication.

    Changes:

    • Minor code clean up and dead code removal.

    Bug Fixes

    • Fixes a regression to avoid hashing passwords per each login using the cached password.

  • 1.35.0
    Release Date: August 29, 2018
    • Major feature release.
    • If using the security feature with Aerospike Enterprise Edition Server 4.6 or later, this version is not compatible -- please upgrade to Aerospike Go Client version 1.35.1 or later.
    • Changes:
      • Change default Scan/Query ServerSocketTimeout to 30s.

    New Features

    • Support for external authentication (LDAP).
    • Support Map and List WriteFlags: NoFail and Partial.
    • Support load balancers as seed node.

    Improvements

    • Adds QueryPolicy.ServerSocketTimeout and QueryPolicy.FailOnClusterChange for when the queries are automatically converted to scans.
    • Minor documentation improvements.
    • Synchronize logging at all situations.
    • Add -debug switch to allow logging at debug level in tests.
    • Allow the user to define the namespace for tests to run on.

    Bug Fixes

    • Fix a few go vet errors for Go 1.11.
    • Fixes minor unsigned length conversions for admin command.

  • 1.34.2
    Release Date: August 29, 2018

    Fix release.

    Changes:

    • Add Go 1.11 to Travis' test versions.
    • Use the last error code in MaxRetries timeout errors for Go 1.11.

    Bug Fixes

    • Use pointer receiver for AerospikeError.SetInDoubt and AerospikeError.MarkInDoubt.
    • Remove unused variable in truncate test.

  • 1.34.1
    Release Date: August 9, 2018

    Hot fix release. We strongly recommend updating to this version for both SC and AP modes. In SC mode the issue caused blocked reads and writes. In AP mode, the issue caused excessive proxying.

    Bug Fixes

    • [CLIENT-1028] - Fixes an issue where a race condition was preventing the partition table from forming correctly.

  • 1.34.0
    Release Date: July 17, 2018

    Improvements

    • Document how to use AerospikeError type in the code.
    • Allow Task.OnComplete() to be listened to by multiple goroutines. Thanks to HArmen
    • Removed the LDT code completely.
    • Adds build tag app_engine for compatibility with Google's App Engine. Query Aggregate features are not available in this mode due to lua limitations.

    Bug Fixes

    • Fixes an issue where ClientPolicy.FailIfNotConnected flag was not respected.
    • [CLIENT-1027] - Fix a merging issue for PartitionMap, and add a naive validation for partition maps.

  • 1.33.0
    Release Date: June 11, 2018

    New Features

    • Adds BatchPolicy.AllowPartialResults flag to allow the batch command return partial records returned from the cluster.
    • Adds INVERTED flag to the MapReturnType. Take a look at INVERTED test in cdt_map_test.go to see how to use it.
    • Adds a lot of new Ordered Map and List operations and brings the client up to date with the latest server API.

    Improvements

    • Adds a recover to the tend goroutine to guarantee the client will recover from internal crashes.
    • Removes unneeded type casts.
    • Uses the new stat name for migrations check.
    • Use the default values for BasePolicy in BatchPolicy to keep the behavior consistent with the older releases.

    Bug Fixes

    • Fixes TTL in GetObject and BatchGetObject reflection API.
    • Handle extension marker in List headers.

  • 1.32.0
    Release Date: March 15, 2018

    New Features

    • Support for Strong Consistency mode in Aerospike Server v4. You will need to set the policy.LinearizeRead to true if you require reads to be linearized across processes. If policy.LinearizedRead is not enabled, 'Strong Consistency' will provide sequential reads instead. Note that linearied reads have a significant performance penalty. See consistency documentation for more details. Adds AerospikeError.InDoubt() method.
    • Set the resulting Record.Key value in Batch Operations to the Original User-Provided Key to preserve the original namespace/set/userValue and avoid memory allocation.

    Improvements

    • Does not retry on writes by default, and put a 100ms timeout on all transactions by default.
    • Changed some warn logs to debug level.
    • Add missing stats counters to improve statistics reports.
    • Uses sync.Once instead of sync.Mutex for Connection.close method.
    • Added DefaultBufferSize for initial buffer size for connections.
    • Fix the tests for object marshalling to account for monotonic time in Go v1.8+.
    • Stops the ongoing tends on initial connection errors.

  • 1.31.0
    Release Date: November 29, 2017

    Incompatible Changes:

    • Deprecated LDTs and removed them from the official build.
    • Change supported go versions to 1.7+ due to gopher-lua requiring Context.

    Improvements

    • Get socket timeout once per command execution, do not redefine err var in command execution loop. PR #211, thanks to Maxim Krasilnikov.
    • Allow running a UDF on a specific node only.
    • Close cluster only once. PR #208, thanks to Jun Kimura.
    • Use actual cluster name in tests instead of assuming null.
    • Check for the type of error as well in Duplicate Index Creation.
    • Update description for error code 21. PR #207, thanks to Maxim Krasilnikov.

  • 1.30.0
    Release Date: October 12, 2017

    Incompatible Changes:

    • Renames ResultCode NO_XDS to ALWAYS_FORBIDDEN.
    • Makes SERVER_NOT_AVAILABLE a client generated error.

    New Features

    • Support for newer Batch Protocol. Add BatchGetComplex for complex batch queries. Old batch API upgraded to automatically support the new protocol under the hood, unless BatchPolicy.UseBatchDirect flag is iet to true.

  • 1.29.0
    Release Date: September 5, 2017

    New Features

    • Added ListIncrementOp to the CDT list operations.
    • Added SEQUENCE to replica policies.

    Improvements

    • Tweaked node removal algorithm to cover more corner cases.
    • Make predExp interface public. Closes issue #205.
    • Added more stats to the Client.Stats().

  • 1.28.0
    Release Date: August 17, 2017

    New Features

    • Added Client.Stats method to get client's internal statistics.
    • Added Policy.SocketTimeout to differentiate between network timeouts and the total transaction timeouts.
    • Support policy.IncludeBinData for queries. Only for servers that support this feature.
    • Minor documentation updates.
    • Return key not found exception (instead of returning nil record) for Operate() command where operations include a write.

    Improvements

    • Close the tend connection when closing node connections.
    • Added Connection finalizer to make sure all connections are closed eventually.
    • Automatically retry failed info requests on async tasks before returning an error.
    • Updated build instructions for the benchmark tool.
    • Make digest_modulo test deterministic.
    • Relax predexp_modulo test a bit to avoid occasional failures.

    Bug Fixes

    • Indirect CAS ops to prevent the compiler from optimizing them out.
    • Return errors instead of nil.

  • 1.27.0
    Release Date: April 21, 2017

    Incompatible Changes:

    • BinName and BinValue are not exported in Operation anymore. These fields should not have been used anyway since Operations used to cache their internal command.

    New Features

    • Added BatchGetObjects method.
    • Added Exponential Backoff by introducing BasePolicy.SleepMultiplier. Only Values > 1.0 are effective. PR #192, thanks to Venil Noronha.

    Improvements

    • Packer tries to see if it can use generic data types before using reflection.
    • Operations, including CDTs do not allocate a buffer anymore, unless reused.

    Bug Fixes

  • 1.26.0
    Release Date: April 5, 2017

    New Features

    • Predicate API is supported (for server v3.12+).
    • Added Truncate method to quickly remove all data from namespaces or sets (for server v3.12+).
    • Support ScanPolicy.ServerSocketTimeout (for server v3.12+).
    • Support ClientPolicy.IgnoreOtherSubnetAliases to ignore hosts from other subnets. PR #182, thanks to @wedi-dev

    Improvements

    • Added a lot of predefined generic slice and map types in NewValue method to avoid hitting reflection as much as possible.
    • Fix go vet complaints.

    Bug Fixes

    • Allow streaming commands (scan/query/aggregation) to retry unless the error occurs during parsing of the results. Fixes issue #187
    • Use net.JoinHostPort to concatinate host and port values instead of doing it directly. Fixes some issues in IPv6 connection strings.
    • Improved initial Tend run.
    • Fixes cluster-name checking bug.

  • 1.25.1
    Release Date: March 8, 2017

    Bug Fixes

    • Fixed an issue where errors in Scan/Query unmarshalling would be duplicated and could cause a deadlock.

  • 1.25.0
    Release Date: March 1, 2017

    Improvements

    • Check tend duration and compare it to tend interval, and warn the user if tend takes longer than tend interval.
    • Seed the cluster concurrently, and return as soon as any of the seeds is validated.
    • Tend the cluster concurrently. Allows use of very big clusters with no delay.
    • Partitions the connection queue to avoid contention.
    • Cluster partition map is merged from all node fragments and updated only once per tend to reduce contention to absolute minimum.

    Bug Fixes

    • Fixed an issue where a valid but unreachable seed could timeout and stall connecting and tending the cluster.
    • Fix result code comments.

  • 1.24.0
    Release Date: January 12, 2017

    New Features

    • TLS/SSL connections are now officially supported.
    • Added Role/Privilege API.

    Improvements

    • Return a client-side error when no ops are passed to the operate command.
    • Export error attribute in NodeError.
    • Do not attempt to refresh peers if it is not supported by the nodes.

    Bug Fixes

    • Use namespace default-ttl for tests instead of assuming 30d.
    • Always drain scan connections after parsing the records.
    • Fix panic in GetObject() if all bins in result is nil. PR #172, thanks to Hamper.
    • Fix WritePolicy usage with UDF. PR #174, thanks to Bertrand Paquet.
    • Close connection right when it has an io error and do not wait for the caller.

  • 1.23.0
    Release Date: December 20, 2016

    New Features

    • Exposes the internal client.Cluster object to the users.
    • Added New API for high-performance collection data type packing, and removed the old API.

    Improvements

    • Only update the partition map if the partition generation has changed.
    • Use tend connection for user management commands.
    • Marks LargeList as deprecated. Use CDT methods instead.
    • Always validate the message header to avoid reading the remainder of other command buffers.
    • Removes GeoJson from key helper.
    • Improves tend algorthm to allow complete disconnection from the cluster if none of the clusters are accessible.
    • PutObject method will now accept objects as well. PR #156, thanks to Sarath S Pillai.

    Bug Fixes

    • Do not attemp to add a node which were unaccessible to avoid panic.
    • Fix invalid connectionCount. PR #168, thanks to Jun Kimura.
    • Fixes minor bug that did not return the error on reading from the connection during scans.

  • 1.22.0
    Release Date: November 29, 2016

    Hot fix release. Please upgrade if you have been using other Aerospike clients with your database parallel to Go.

    Bug Fixes

    • Fixes an issue where short strings in Lists and Maps would not unpack correctly. Resolves PR #161.

  • 1.21.0
    Release Date: November 16, 2016

    New Features

    • Added new constants for expiration in WritePolicy: TTLServerDefault, TTLDontExpire, TTLDontUpdate.

    Improvements

    • Corrects typos in the code. PR #142, thanks to Muyiwa Olurin.
    • Use the tend connection for RequestInfo commands.

    Bug Fixes

    • Fixes an issue where TTL values were calcualted wrongly when they were set not to expire.
    • Fixes an issue where PutObjects would marshal []byte to List in database. PR #152, thanks to blide.
    • Fixes an issue where Recordset could leak goroutines. PR #153, thanks to Deepak Prabhakara.

  • 1.20.0
    Release Date: October 25, 2016

    There has been major changes in the library. Rigorously testing is recommended before upgrading to the new version in production.

    New Features

    • Let users define the desired tag for bin names in structs using SetAerospikeTag function.
    • Added as_performance build tag to avoid including the slow convenience API which uses reflections in the client code. To use this feature, you should include -tags="as_performance" when building your project.

      NOTICE: Keep in mind that your code may not compile using this flag. That is by design to force using the fast API.

    Improvements

    • Added special packer for map[string]interface{} in NewValue method.
    • Avoid allocating memory for Map and List values.
    • Allocate commands on the stack to avoid heap allcations.
    • Avoid allocating memory for packer.
    • Avoid Allocating memory in computeHash for keys.
    • Avoid allocating memory in Ripe160MD digest.
    • Removed BufferPool and moved buffers to Connection objects to remove lock contention.
    • Added ListIter and MapIter interfaces to support passing user defined Maps and Lists to the client without using reflection.

  • 1.19.0
    Release Date: October 14, 2016

    New Features

    • Support TLS secured connections. (Feature will be supported in coming server releases.)
    • Support IPv6 protocol. Supported by Aerospike Server 3.10+.
    • Support cluster-name verification. Supported by Aerospike Server 3.10+.
    • Support new peers info protocol. Supported by Aerospike Server 3.10+.

    Improvements

    • Will retry the operation even when reading from the buffer. Set Policy.MaxRetries = 0 to avoid this behavior. PR #143, thanks to Hector Jusforgues
    • Much improved cluster management algorithm. Will now handle the case where multiple nodes go down simultaneously, still protecting against split brain rogue nodes.

    Bug Fixes

    • Try all alias IPs in node validator. Resolves #144.
    • Updated job status check for execute tasks.

  • 1.18.0
    Release Date: August 19, 2016

    New Features

    • Support 'Durable Deletes'. Requires future release of Aerospike Server Enterprise Edition.

    Improvements

    • Do not run tests for features that are not supported by the server.
    • Added new server error codes.

  • 1.17.1
    Release Date: July 27, 2016

    Improvements

    • Add TaskId() method for Recordset.
    • Cleanup indexes after test cases.
    • Keep connections on recoverable server errors.
    • Return the error on unexpected keys in BatchCommandGet/Header.
    • Use the same client object in tests and support using replicas on travis.

  • 1.17.0
    Release Date: July 20, 2016

    New Features

    • Client now supports distributing reads from Replicas using ClientPolicy.RequestProleReplicas and Policy.ReplicaPolicy.

    Improvements

    • Cluster.GetConnection will now retry to acquire a connection until timeout.
    • Client.DropIndex method now blocks until all nodes report the index is dropped.
    • Async tasks like CreateIndex will retry a few times before deciding a non-existing job means it has finished.
    • Do not use math.MaxInt64, it breaks 32-bit builds. PR #139, thanks to Cameron Sparr.

    Bug Fixes

    • Maps with 0 elements will automatically shortcut to unordered empty maps.
    • Return the error in BatchCommandGet on parse error.

  • 1.16.3
    Release Date: June 28, 2016

    Major bugfix release. Update recommended.

    Improvements

    • Skip LDT tests if LDT is not enabled.
    • Returns last error after all retry attempts to execute a command are exhausted.
    • Reserves a connection for tend operation to avoid dropping a node when high load prevents acquiring a proper connection.
    • Added Finalizers to Client and Recordset. Both will be automatically closed by the GC.

    Bug Fixes

    • Fixes an issue where services-alternate was not used in Node.addFriends() when instructed so in the policy.
    • Fixes an issue where object metadata was not cached if QueryObjects was called before PutObject.
    • Fixes an issue where idle connections were not dropped.
    • Fixes an issue where requested buffer sizes were not guarded against negative numbers.

  • 1.16.2
    Release Date: June 7, 2016

    Bug Fixes

    • Fixed an issue where empty unordered maps were confused with CDT maps.

  • 1.16.1
    Release Date: June 6, 2016

    Bug Fixes

    • Fixed an issue where complex maps and lists were not unmarshalled correctly in GetObject method.

  • 1.16.0
    Release Date: June 3, 2016

    New Features

    • Added CDT Ordered Map API. Requires Server version 3.8.4 and above.

    Improvements

    • Removed mutexes from Cluster and Node code.
    • Improved code quality using verious linters.

  • 1.15.0
    Release Date: June 2, 2016

    Minor fix release.

    Bug Fixes

    • Fixed an issue where unmarshalling embedded structs and pointers did not work properly if they were tagged.

  • 1.14.0
    Release Date: May 16, 2016

    Improvements

    • Improved cluster tend() logic.
    • Added Recordset.Read() method.
    • Minor fixes in docs and code formatting. Thanks to Andrew Murray and Erik Dubbelboer.

    Bug Fixes

    • Fixed an issue in which go-routines were leaked in Results() method of Recordset on cancellation. Based on PR #128, thanks to Noel Cower.
    • Fixed issues regarding leaked goroutines in Cluster.WaitTillStablized(), Cluster.MigrationInProgress(), and Cluster.WaitUntillMigrationIsFinished() methods. PR #126, thanks to Anton.

  • 1.13.0
    Release Date: April 1, 2016

    New Features

    • Added NewGeoWithinRegionForCollectionFilter, NewGeoRegionsContainingPointForCollectionFilter, NewGeoWithinRadiusForCollectionFilter for queries on collection bins.

    Improvements

    • Removed and fixed unsused assignments and variables.
    • Fixed typos in the comments.
    • Minor changes and formatting. PR-124, thanks to Harmen.

    Bug Fixes

    • Fixed an issue in which bounded byte arrays were silently being dropped as map keys.

  • 1.12.0
    Release Date: March 8, 2016

    New Features

    • Support Metadata in struct tags to fetch TTL and Generation via Getobject. Notice: Metadata attributes in a struct are considered transient, and will not be persisted.
    • GeoJSON support in Lists and Maps.

    Improvements

    • Use ClientPolicy.timeout for connection timeout when refreshing nodes.
    • Added new server error codes.
    • Protect RNG pool against low-precision clocks during init.
    • Better error message distinguishing between timeout because of reaching deadline and exceeding maximum retries.

    Bug Fixes

    • Fixed object mapping cache for anonymous structs. PR-115, thanks to Moshe Revah.
    • Fixed an issue where Execute() method was not observing the SendKey flag in Policy.

  • 1.11.0
    Release Date: February 9, 2016

    New Features

    • Can now use services-alternate for cluster tend.
    • New CDT List API: ListGetRangeFromOp, ListRemoveRangeFromOp, ListPopRangeFromOp.

    Improvements

    • Improves marshalling of data types into and out of Lua library and avoids marshalling values before they are needed.
    • Returns error for having more than one Filter on client-side to avoid confusion.
    • Increases default ClientPolicy.Timeout and return a meaningful error message when the client is not fully connected to the cluster after waitTillStabilized call.

  • 1.10.0
    Release Date: January 13, 2016

    New Features

    • Added 'client.QueryAggregate' method.
      • For examples regarding how to use this feature, look at the examples directory. You can find more documentation regarding the Aggregation Feature here.

    Improvements

    • Improve Query/Scan performance by reading from the socket in bigger chunks.

  • 1.9.0
    Release Date: December 14, 2015

    New Features

    • Added CDT List operations.
    • Added NewGeoWithinRadiusFilter filter for queries.

    Improvements

    • Renamed NewGeoPointsWithinRegionFilter to NewGeoWithinRegionFilter.

  • 1.8.0
    Release Date: December 1, 2015

    New Features

    • Added ScanAllObjects, ScanNodeObjects, Queryobjects and QueryNodeObjects to the client, to facilitate automatic unmarshalling of data similar to GetObject.
      • Notice: This feature and its API are experimental, and may change in the future. Please test your code throughly, and provide feedback via Github.
    • Added ScanPolicy.IncludeLDT option (Usable with yet to be released server v 3.7.0).
    • Added LargeList.Exist method.

    Improvements

    • Makes Generation and Expiration values consistent for WritePolicy and Record.
      • BREAKING CHANGES: Types of Record.Generation and Record.Expiration, and also WritePolicy.Generation and WritePolicy. Expiration have changed and may require casting in older code.
    • Refactor tools/asinfo to be more idiomatic Go. PR #86, thanks to Tyler Gibbons.
    • Documentation fixes thanks to Charl Matthee and Tyler Gibbons.

    Bug Fixes

    • Changed the KeepConnection logic from black-list to white-list, to drop all.
    • Fixed RemoveNodesCopy logic error.
    • Add missing send on recordset Error channel. PR #89, thanks to Geert-Johan Riemer.
    • Fix skipping of errors/records in (*recordset).Results() select after cancellation. PR #99, thanks to Geert-Johan Riemer.

  • 1.7.0
    Release Date: October 16, 2015

    New Features

    • Added support for Geospatial queries. Available in Server Version 3.7 and above.
    • Added support for creating indexes on List and Map bins, and querying them.
    • Added support for native floating point values.
    • Added ClientPolicy.IpMap to use IP translation for alias recognition. PR #81. Thanks to Christopher Guiney.

    Improvements

    • Cosmetic change to improve code consistency for PackLong in packer.go. PR #78, Thanks to Erik Dubbelboer.

    Bug Fixes

    • Fixed an issue when the info->services string was malformed and caused the client to panic.
    • Fixed an issue with marshaling maps of type map[ANY]struct{} into embedded structs.
    • Fixed an issue with bound checking. PR #85, Thanks to Tait Clarridge.
    • Fixed typos in the docs. PR #76, Thanks to Charl Matthee.

  • 1.6.5
    Release Date: August 27, 2015

    Features

    • Export MaxBufferSize to allow tweaking of maximum buffer size allowed to read a record. If a record is bigger than this size (e.g: A lot of LDT elements in scan), this setting wil allow to tweak the buffer size.

  • 1.6.4
    Release Date: August 28, 2015

    Hot fix release.

    Bug Fixes

    • Fix panic when a scan/query fails and the connection is not dropped.

  • 1.6.2
    Release Date: June 10, 2015

    Features

    • Improved documentation. Replaced all old API references regarding Recordset/Query/Scan to newer, more elegant API.

    Fixes

    • Fixed an issue where erroring out on Scan would result a panic.

    • Fixed an issue where Statement.TaskId would be negative. Converted Statement.TaskId to uint64.

  • 1.6.1
    Release Date: June 8, 2015

    Fixes

    • Fixed an issue where marshaller would not marshal some embedded structs.

    • Fixed an issue where querying/scanning empty sets would not drain the socket before return.

  • 1.6.0
    Release Date: June 1, 2015

    Features

    • Added new LargeList API.

    • BREAKING CHANGES: New LargeList API on the Go Client uses the New API defined on newer server versions. As Such, it has changed some signatures in LargeList.

    Fixes

    • Fixed an issue where connections were not put back to the pool on some non-critical errors.

    • Fixed an issue where Object Unmarshaller would not extend a slice.

    • Decode RegisterUDF() error message from base64.

    • Fixed invalid connection handling on node connections (thanks to @rndive)

  • 1.5.2
    Release Date: May 15, 2015

    Fixes

    • Fixed a branch regarding error handling during connection authentication.

  • 1.5.1
    Release Date: May 15, 2015

    Features

    • Introduces ClientPolicy.IdleTimeout to close stale connections to the server. Thanks to Mário Freitas (@imkira). PR #57

    • Use type alias instead of struct for NullValue.

    Fixes

    • Fixed a few race conditions.

    • Fixed #58 regarding race condition accessing Cluster.password.

    • Fixed minor bugs regarding handling of nulls in structs for GetObj() and PutObj().

    • Fixed a bug regarding setting TaskIds on the client.

    • Removed workaround regarding filtering bin names on the client for BatchGet. Issue #60.

    • Removed deprecated ReplaceRoles() method.

    • Removed deprecated SetCapacity() and GetCapacity() methods for LDTs.

  • 1.5.0
    Release Date: April 12, 2015

    This includes potential BREAKING CHANGES.

    Uses type aliases instead of structs in several XXXValue methods. This removes a memory allocation per Value usage. Since every Put operation uses at list one value object, this has the potential to improve application performance. Since the signature of several NewXXXValue methods have changed, this might break some existing code if you have used the value objects directly.

    New Features

    • Introduces ClientPolicy.LimitConnectionsToQueueSize. If set to true, the client will not attempt to create new connections to the node if the total number of pooled connections to the node is equal or more than the pool size. The client will retry to poll a connection from the queue until a timeout occures. If no timeout is set, it will only retry for ten times.

    Improvements

    • Improved Logger so that it will accept a generalized Logger interface. Any Logger with a Printf(format string, values ...interface{}) method can be used. Examples include Logrus.
    • Improved Client.BatchGet() performance.

    Bug Fixes

    • Bin names were ignored in BatchCommands.
    • BatchCommandGet.parseRecord() returned wrong values when BinNames was empty but not nil.

  • 1.4.2
    Release Date: March 31, 2015

    Maintenance release.

    Improvements

    • Replace channel-based queue system with a lock-based algorithm.
    • Marshaller now supports arrays of arbitrary types.
    • Client.GetObject() now returns an error when the object is not found.
    • Partition calculation uses a trick that is twice as fast.
    • Unpacking BLOBs resulted in returning references to pooled buffers. Now copies are returned.

  • 1.4.1
    Release Date: March 12, 2015

    Features

    • Node validator will not call net.HostLookup if an IP is passed as a seed to it.

  • 1.4.0
    Release Date: February 17, 2015

    Features

    • Added Marshalling Support for Put and Get operations.

    • Added Recordset.Results(). Consumers of a recordset do not have to implement a select anymore. Use of the old pattern is discouraged and deprecated, and direct access to recordset.Records and recordset.Errors will be removed in a future release.

    • Custom Types are now allowed as bin values.

  • 1.3.1
    Release Date: January 26, 2015

    Features

    • Removed dependency on unsafe package.

  • 1.3.0
    Release Date: January 20, 2015

    New Features

    • Removed Record.Duplicates and GenerationPolicy/DUPLICATE due to deprication on server.
    • Added Security Features: Please consult Security Docs on Aerospike website.
      • ClientPolicy.User
      • ClientPolicy.Password
      • Client.CreateUser()
      • Client.DropUser()
      • Client.ChangePassword()
      • Client.GrantRoles()
      • Client.RevokeRoles()
      • Client.ReplaceRoles()
      • Client.QueryUser()
      • Client.QueryUsers()
    • Added Client.QueryNode().
    • Added ClientPolicy.TendInterval.

    Improvements

    • Cleaned up Scan/Query/Recordset concurrent code

    Bug Fixes

    • Fixed a bug in tools/cli/cli.go.
    • Fixed a bug when GetHeaderOp() would always translate into GetOp()

  • 1.2.0
    Release Date: December 29, 2014

    Features

    • Added NewKeyWithDigest() method. You can now create keys with custom digests, or only using digests without knowing the original value. (Useful when you are getting back results with Query and Scan)

    • Added ConsistencyLevel to BasePolicy.

    • Added CommitLevel to WritePolicy.

    • Added LargeList.Range and LargeList.RangeThenFilter methods.

    • Added LargeMap.Exists method.

    • We use a pooled XORShift RNG to produce random numbers in the client. It is FAST.

  • 1.1.2
    Release Date: December 19, 2014

    Features

    • Record.Expiration was not converted to TTL values on Client.BatchGet, Client.Scan and Client.Query.

  • 1.1.1
    Release Date: December 10, 2014

    Features

    • Fixed issue when the size of key field would not be estimated correctly when WritePolicy.SendKey was set.

  • 1.1.0
    Release Date: November 28, 2014

    Features

    • Major performance improvements