Major improvements release. There has been major changes in the library. Please test rigorously before upgrading to the new version.
-
New Features
-
Let user 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.
-
-
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
andMapIter
interfaces to support passing Maps and Lists to the client without using reflection.
- Added special packer for map[string]interface{} in
Major feature and improvement release.
-
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.
-
-
Fixes
-
Try all alias IPs in node validator. Resolves #144.
-
Updated job status check for execute tasks.
-
Minor improvements release.
-
New Features
- Support 'Durable Deletes' for the next version of Aerospike Server Enterprise.
-
Improvements
-
Don't run tests for features that are not supported by the server.
-
Added new server error codes.
-
Minor improvements release.
-
Improvements
-
Add
TaskId()
method forRecordset
. -
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.
-
Major feature and improvement release.
-
New Features
- Client now supports distributing reads from Replicas using
ClientPolicy.RequestProleReplicas
andPolicy.ReplicaPolicy
- Client now supports distributing reads from Replicas using
-
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
-
-
Fixes
-
Maps with 0 elements will automatically shortcut to unordered empty maps.
-
Return the error in BatchCommandGet on parse error.
-
Major bugfix release. Update recommended.
-
Improvements
-
Skip LDT tests if LDT is not enabled.
-
Returns last error after all retry attempts to run 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
andRecordset
. Both will be automatically closed by the GC.
-
-
Fixes
-
Fixes an issue where
services-alternate
wasn't used inNode.addFriends()
when instructed so in the policy. -
Fixes an issue where object metadata wasn't cached if
QueryObjects
was called beforePutObject
. -
Fixes an issue where idle connections were not dropped.
-
Fixes an issue where requested buffer sizes were not guarded against negative numbers.
-
Minor bugfix release.
-
Fixes
- Fixes an issue where empty unordered maps were confused with CDT maps.
Minor bugfix release.
-
Fixes
- Fixes an issue where complex maps and lists weren't unmarshalled correctly in
GetObject
method.
- Fixes an issue where complex maps and lists weren't unmarshalled correctly in
Major feature and improvements release.
NOTICE: Due to the relatively extensive code overhaul, upgrade with caution.
-
New Features
- Added CDT Ordered Map API. (Requires server v3.8.3+)
-
Improvements
-
Removed mutexes from
Cluster
andNode
code. -
Improved code quality using various linters.
-
Minor fixes and improvements release.
-
Fixes
- Fixed an issue where unmarshalling embedded structs and pointers didn't work properly if they were tagged.
Minor fixes and improvements release.
-
Fixes
-
Fixed an issue in which go-routines were leaked in
Results()
method ofRecordset
on cancellation. Based on PR #128, thanks to Noel Cower -
Fixed issues regarding leaked goroutines in
Cluster.WaitTillStablized()
,Cluster.MigrationInProgress()
, andCluster.WaitUntillMigrationIsFinished()
methods. PR #126, thanks to Anton
-
-
Improvements
-
Improved cluster
tend()
logic. -
Added
Recordset.Read()
method. -
Minor fixes in docs and code formatting. Thanks to Andrew Murray and Erik Dubbelboer
-
Minor features and improvements release.
-
New Features
- Added
NewGeoWithinRegionForCollectionFilter
,NewGeoRegionsContainingPointForCollectionFilter
,NewGeoWithinRadiusForCollectionFilter
for queries on collection bins.
- Added
-
Fixes
- Fixed an issue in which bounded byte arrays were silently being dropped as map keys.
-
Improvements
-
Removed and fixed unused assignments and variables.
-
Fixed typos in the comments.
-
Minor changes and formatting. PR #124, thanks to Harmen
-
Minor features and improvements release.
-
New Features
- Support Metadata in struct tags to fetch TTL and Generation via
GetObject
. Notice: Metadata attributes in an struct are considered transient, and won't be persisted.
Example:
type SomeStruct struct { TTL uint32 `asm:"ttl"` // record time-to-live in seconds Gen uint32 `asm:"gen"` // record generation A int Self *SomeStruct } key, _ := as.NewKey("ns", "set", value) err := client.PutObject(nil, key, obj) // handle error here rObj := &OtherStruct{} err = client.GetObject(nil, key, rObj)
- GeoJSON support in Lists and Maps
- Support Metadata in struct tags to fetch TTL and Generation via
-
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 distingushing between timeout because of reaching deadline and exceeding maximum retries
-
-
Fixes
-
Fixed object mapping cache for anonymous structs. PR #115, thanks to Moshe Revah
-
Fixed an issue where
Execute()
method wasn't observing theSendKey
flag in Policy.
-
Minor features and improvements release.
-
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 the 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 afterwaitTillStabilized
call
-
Major release. Adds Aggregation.
-
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 on Aerospike Website
-
-
-
Improvements
- Improve Query/Scan performance by reading from the socket in bigger chunks
Major release. Adds new features.
-
New Features
-
Added CDT List operations.
-
Added
NewGeoWithinRadiusFilter
filter for queries.
-
-
Changes
- Renamed
NewGeoPointsWithinRegionFilter
toNewGeoWithinRegionFilter
- Renamed
Major release. Adds new features and fixes important bugs.
-
New Features
-
Added
ScanAllObjects
,ScanNodeObjects
,QueryObjects
andQueryNodeObjects
to the client, to facilitate automatic unmarshalling of data similar toGetObject
.- 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.
- NOTICE! BREAKING CHANGE: Types of
Record.Generation
andRecord.Expiration
, and alsoWritePolicy.Generation
andWritePolicy.Expiration
have changed, and may require casting in older code.
- NOTICE! BREAKING CHANGE: Types of
-
Refactor tools/asinfo to be more idiomatic Go. PR #86, thanks to Tyler Gibbons
-
Many documentation fixes thanks to Charl Matthee and Tyler Gibbons
-
-
Fixes
-
Changed the
KeepConnection
logic from black-list to white-list, to drop all -
Fix RemoveNodesCopy logic error.
-
Add missing send on recordset Error channel. PR #99, thanks to Geert-Johan Riemer
-
Fix skipping of errors/records in (*recordset).Results() select after cancellation. PR #99, thanks to Geert-Johan Riemer
-
Major release. Adds new features and fixes important bugs.
-
New Features
-
Added support for Geo spatial queries.
-
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
inpacker.go
. PR #78, Thanks to Erik Dubbelboer
- Cosmetic change to improve code consistency for
-
Fixes
-
Fixes an issue when the info->services string was malformed and caused the client to panic.
-
Fixes an issue with unmarshalling maps of type map[ANY]struct{} into embedded structs.
-
Fixes issue with unmarshalling maps of type map[ANY]struct{} into embedded structs.
-
Fixes an issue with bound checking. PR #85, Thanks to Tait Clarridge
-
Fixes aa few typos in the docs. PR #76, Thanks to Charl Matthee
-
Minor maintenance release.
-
Improvements
- 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.
- Export
Hot fix release.
-
Fixes
- Fix panic when a scan/query fails and the connection is not dropped.
Minor fix release.
-
Improvements
- Improved documentation. PR #64 and #68. Thanks to Geert-Johan Riemer
-
Fixes
-
Fix a bunch of golint notices. PR #69, Thanks to Geert-Johan Riemer
-
Connection.Read() total bytes count on error. PR #71, Thanks to Geert-Johan Riemer
-
Fixed a race condition on objectMappings map. PR #72, Thanks to Geert-Johan Riemer
-
Fixed a few uint -> int convertions.
-
Minor fix release.
-
Improvements
- 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. convertedStatement.TaskId
touint64
-
Minor fix release.
-
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.
-
There's an important performance regression bug fix in this release. We recommend everyone to upgrade.
-
New Features
-
Added New LargeList API.
- NOTICE! BREAKING CHANGE: 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 where 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)
-
Hotfix release.
-
Fixes
- Fixed a branch-merge mistake regarding error handling during connection authentication.
Major maintenance release.
NOTICE: All LDTs on server other than LLIST have been deprecated, and will be removed in the future. As Such, all API regarding those features are considered deprecated and will be removed in tandem.
-
Improvements
-
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.
-
Removed workaround regarding filtering bin names on the client for
BatchGet
. Issue #60
-
-
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()
andPutObj()
. -
Fixed a bug regarding setting TaskIds on the client.
-
-
** Other Changes **
-
Removed deprecated
ReplaceRoles()
method. -
Removed deprecated
SetCapacity()
andGetCapacity()
methods for LDTs.
-
This release includes potential BREAKING CHANGES.
-
New 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 occurs. If no timeout is set, it will only retry for ten times.
- Introduces
-
Improvements
-
BREAKING CHANGE: | Uses type aliases instead of structs in several XXXValue methods. This removes a memory allocation per
Value
usage. Since everyPut
operation uses at list one value object, this has the potential to improve application performance. Since the signature of severalNewXXXValue
methods have changed, this might break some existing code if you have used the value objects directly. -
Improved
Logger
so that it will accept a generalizedLogger
interface. Any Logger with aPrintf(format string, values ...interface{})
method can be used. Examples include Logrus. -
Improved
Client.BatchGet()
performance.
-
-
Fixes
-
Bin names were ignored in BatchCommands.
-
BatchCommandGet.parseRecord()
returned wrong values whenBinNames
was empty but not nil.
-
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.
-
Improvements
- Unpacking BLOBs resulted in returning references to pooled buffers. Now copies are returned.
This is a minor release to help improve the compatibility of the client on Mac OS, and to make cross compilation easier.
-
Improvements
- Node validator won't call net.HostLookup if an IP is passed as a seed to it.
This is a major release, and makes using the client much easier to develop applications.
-
New Features
- Added Marshalling Support for Put and Get operations. Refer to Marshalling Test to see how to take advantage. Same functionality for other APIs will follow soon. Example:
type SomeStruct struct { A int `as:"a"` // alias the field to a Self *SomeStruct `as:"-"` // will not persist the field } type OtherStruct struct { i interface{} OtherObject *OtherStruct } obj := &OtherStruct { i: 15, OtherObject: OtherStruct {A: 18}, } key, _ := as.NewKey("ns", "set", value) err := client.PutObject(nil, key, obj) // handle error here rObj := &OtherStruct{} err = client.GetObject(nil, key, rObj)
- Added
Recordset.Results()
. Consumers of a recordset do not have to implement a select anymore. Instead of:
recordset, err := client.ScanAll(...) L: for { select { case r := <-recordset.Record: if r == nil { break L } // process record here case e := <-recordset.Errors: // handle error here } }
one should only range on
recordset.Results()
:recordset, err := client.ScanAll(...) for res := range recordset.Results() { if res.Err != nil { // handle error here } else { // process record here fmt.Println(res.Record.Bins) } }
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.
-
Improvements
- Custom Types are now allowed as bin values.
-
Improvements
- Removed dependency on
unsafe
package.
- Removed dependency on
-
Breaking Changes
- Removed
Record.Duplicates
andGenerationPolicy/DUPLICATE
- Removed
-
New Features
-
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
-
Fixes
-
Fixed a bug in
tools/cli/cli.go
. -
Fixed a bug when
GetHeaderOp()
would always translate intoGetOp()
-
-
New 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
-
New Features
-
Added
ConsistencyLevel
toBasePolicy
. -
Added
CommitLevel
toWritePolicy
. -
Added
LargeList.Range
andLargeList.RangeThenFilter
methods. -
Added
LargeMap.Exists
method.
-
-
Improvements
- We use a pooled XORShift RNG to produce random numbers in the client. It is FAST.
-
Fixes
Record.Expiration
wasn't converted to TTL values onClient.BatchGet
,Client.Scan
andClient.Query
.
-
Fixes:
- Fixed issue when the size of key field would not be estimated correctly when WritePolicy.SendKey was set.
Major Performance Enhancements. Minor new features and fixes.
-
Improvements
-
Go client is much faster and more memory efficient now. In some workloads, it competes and wins against C and Java clients.
-
Complex objects are now de/serialized much faster.
-
-
New Features
- Added Default Policies for Client object. Instead of creating a new policy when the passed policy is nil, default policies will be used.
-
Fixes:
- Fixed issue when WritePolicy.SendKey = true was not respected in Touch() and Operate()
Hotfix in unpacker. Update strongly recommended for everyone using Complex objects, LDTs and UDFs.
-
Fixes:
- When Blob, ByteArray or String size has a bit sign set, unpacker reads it wrong. Note: This bug only affects unpacking of these objects. Packing was unaffected, and data in the database is valid.
Minor, but very impoortant fix.
-
Fixes:
- Node selection in partition map was flawed on first refresh.
-
Incompatible changes:
Expiration
andGeneration
inWritePolicy
are nowint32
TaskId
inStatement
is now always set in the client, and isint64
-
New Features:
- float32, float64 and bool are now supported in map and array types
-
Hot fix:
- Fixed pack/unpack for uint64
Major changes and improvements.
-
New Features:
- Added client.Query()
- Added client.ScanNode()/All()
- Added client.Operate()
- Added client.CreateIndex()
- Added client.DropIndex()
- Added client.RegisterUDF()
- Added client.RegisterUDFFromFile()
- Added client.Execute()
- Added client.ExecuteUDF()
- Added client.BatchGet()
- Added client.BatchGetHeader()
- Added client.BatchExists()
- Added LDT implementation
- Added
Node
andKey
references to the Record
-
Changes:
-
Many minor and major bug fixes
-
Potentially breaking change: Reduced Undocumented API surface
-
Fixed a few places where error results were not checked
-
Breaking Change: Convert Key.namespace & Key.setName from pointer to string; affects Key API
-
Renamed all
this
receivers to appropriate names -
Major performance improvements (~2X improvements in speed and memory consumption):
- better memory management for commands; won't allocate if capacity is big enough
- better hash management in key; avoids two redundant memory allocs
- use a buffer pool to reduce GC load
- fine-grained, customizable and deterministic buffer pool implementation for command
-
Optimizations for Key & Digest
- changed digest implementation, removed an allocation
- Added RIPEMD160 hash files from crypto to lib
- pool hash objects
-
Various Benchmark tool improvements
- now profileable using localhost:6060
- minor bug fixes
-
- Initial Release.