0
0

cznicb KVStore uses Put() for faster read-modify-write

This commit is contained in:
Steve Yen 2015-01-29 11:01:51 -08:00
parent b054cddf76
commit 5a30d36b17

View File

@ -220,20 +220,17 @@ func (w *Batch) Execute() (err error) {
t := w.s.t t := w.s.t
for key, mc := range w.ms { for key, mc := range w.ms {
k := []byte(key) k := []byte(key)
b := []byte(nil) t.Put(k, func(oldV interface{}, exists bool) (newV interface{}, write bool) {
v, ok := t.Get(k) b := []byte(nil)
if ok && v != nil { if exists && oldV != nil {
b = v.([]byte) b = oldV.([]byte)
} }
b, err := mc.Merge(k, b) b, err := mc.Merge(k, b)
if err != nil { if err != nil {
return err return nil, false
} }
if b != nil { return b, b != nil
t.Set(k, b) })
} else {
t.Delete(k)
}
} }
for _, op := range w.ops { for _, op := range w.ops {