From 5a30d36b175e1ec75bb6f21234bf2d359d3b1a72 Mon Sep 17 00:00:00 2001 From: Steve Yen Date: Thu, 29 Jan 2015 11:01:51 -0800 Subject: [PATCH] cznicb KVStore uses Put() for faster read-modify-write --- index/store/cznicb/cznicb.go | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/index/store/cznicb/cznicb.go b/index/store/cznicb/cznicb.go index 0e7d0921..9dce8e2d 100644 --- a/index/store/cznicb/cznicb.go +++ b/index/store/cznicb/cznicb.go @@ -220,20 +220,17 @@ func (w *Batch) Execute() (err error) { t := w.s.t for key, mc := range w.ms { k := []byte(key) - b := []byte(nil) - v, ok := t.Get(k) - if ok && v != nil { - b = v.([]byte) - } - b, err := mc.Merge(k, b) - if err != nil { - return err - } - if b != nil { - t.Set(k, b) - } else { - t.Delete(k) - } + t.Put(k, func(oldV interface{}, exists bool) (newV interface{}, write bool) { + b := []byte(nil) + if exists && oldV != nil { + b = oldV.([]byte) + } + b, err := mc.Merge(k, b) + if err != nil { + return nil, false + } + return b, b != nil + }) } for _, op := range w.ops {