Skip to content

Commit 2a68420

Browse files
committed
Handle reading keys where the original value sent to the server was a list. Resolves Issue #350
1 parent 049fe6c commit 2a68420

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
# Change History
22

33

4+
## May 28 2021: v4.5.2
5+
Minor fix release.
6+
7+
* **Fixes**
8+
9+
- Handle reading keys where the original value sent to the server was a list. Resolves Issue #350.
10+
411
## May 27 2021: v4.5.1
512
Minor fix release.
613

client_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,35 @@ var _ = gg.Describe("Aerospike", func() {
12921292
}
12931293
})
12941294

1295+
gg.It("must send List key on Put operations", func() {
1296+
kval := []int{1, 2, 3}
1297+
key, err := as.NewKey(ns, set, kval)
1298+
gm.Expect(err).ToNot(gm.HaveOccurred())
1299+
1300+
ops1 := []*as.Operation{
1301+
as.PutOp(bin1),
1302+
as.PutOp(bin2),
1303+
as.GetOp(),
1304+
}
1305+
1306+
wpolicy := as.NewWritePolicy(0, 0)
1307+
wpolicy.SendKey = true
1308+
rec, err = client.Operate(wpolicy, key, ops1...)
1309+
gm.Expect(err).ToNot(gm.HaveOccurred())
1310+
1311+
recordset, err := client.ScanAll(nil, key.Namespace(), key.SetName())
1312+
gm.Expect(err).ToNot(gm.HaveOccurred())
1313+
1314+
// make sure the result is what we put in
1315+
for r := range recordset.Results() {
1316+
gm.Expect(r.Err).ToNot(gm.HaveOccurred())
1317+
if bytes.Equal(key.Digest(), r.Record.Key.Digest()) {
1318+
gm.Expect(r.Record.Key.Value()).To(gm.Equal(as.NewListValue([]interface{}{1, 2, 3})))
1319+
gm.Expect(r.Record.Bins).To(gm.Equal(rec.Bins))
1320+
}
1321+
}
1322+
})
1323+
12951324
gg.It("must send key on Touch operations", func() {
12961325
key, err := as.NewKey(ns, set, randString(50))
12971326
gm.Expect(err).ToNot(gm.HaveOccurred())

value.go

+12-5
Original file line numberDiff line numberDiff line change
@@ -1178,23 +1178,30 @@ func bytesToParticle(ptype int, buf []byte, offset int, length int) (interface{}
11781178
return nil, nil
11791179
}
11801180

1181-
func bytesToKeyValue(pType int, buf []byte, offset int, len int) (Value, error) {
1181+
func bytesToKeyValue(pType int, buf []byte, offset int, length int) (Value, error) {
11821182

11831183
switch pType {
11841184
case ParticleType.STRING:
1185-
return NewStringValue(string(buf[offset : offset+len])), nil
1185+
return NewStringValue(string(buf[offset : offset+length])), nil
11861186

11871187
case ParticleType.INTEGER:
1188-
return NewLongValue(Buffer.VarBytesToInt64(buf, offset, len)), nil
1188+
return NewLongValue(Buffer.VarBytesToInt64(buf, offset, length)), nil
11891189

11901190
case ParticleType.FLOAT:
11911191
return NewFloatValue(Buffer.BytesToFloat64(buf, offset)), nil
11921192

11931193
case ParticleType.BLOB:
1194-
bytes := make([]byte, len)
1195-
copy(bytes, buf[offset:offset+len])
1194+
bytes := make([]byte, length)
1195+
copy(bytes, buf[offset:offset+length])
11961196
return NewBytesValue(bytes), nil
11971197

1198+
case ParticleType.LIST:
1199+
v, err := newUnpacker(buf, offset, length).UnpackList()
1200+
if err != nil {
1201+
return nil, err
1202+
}
1203+
return ListValue(v), nil
1204+
11981205
default:
11991206
return nil, types.NewAerospikeError(types.PARSE_ERROR, fmt.Sprintf("ParticleType %d not recognized. Please file a github issue.", pType))
12001207
}

0 commit comments

Comments
 (0)