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