Go Client Library Release Notes

  • 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 `Bin`s 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.

    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.

    Fixes

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

    Fixes

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

  • 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 shouldn't 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 don't 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 complex 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 didn't 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 wouldn't 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

    • Don't 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.
    • Don't 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 wasn't used in Node.addFriends() when instructed so in the policy.
    • Fixes an issue where object metadata wasn't 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 weren't 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.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 won't be persisted.

    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 wasn't 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.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 wouldn't marshal some embedded structs.

    • Fixed an issue where querying/scanning empty sets wouldn't 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 wouldn't 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.

    Features

    • Introduces ClientPolicy.LimitConnectionsToQueueSize. If set to true, the client won't attemp 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.

    Fixes

    • Bin names were ignored in BatchCommands.

    • BatchCommandGet.parseRecord() returned wrong values when BinNames was empty but not nil.

  • 1.4.1
    Release Date: March 12, 2015

    Features

    • Node validator won't 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

    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

    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 wasn't 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