From 45e670b99b2c8e878cdfe9e1231f5892b04da94c Mon Sep 17 00:00:00 2001 From: Kosov Eugene Date: Thu, 5 Nov 2015 00:27:28 +0300 Subject: [PATCH] BoltDB wrapper nano optimization which makes code a bit prettier too --- index/store/boltdb/reader.go | 13 ++++++------- index/store/boltdb/store.go | 5 +++-- index/store/boltdb/writer.go | 10 ++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/index/store/boltdb/reader.go b/index/store/boltdb/reader.go index 71815a72..efb3e5dd 100644 --- a/index/store/boltdb/reader.go +++ b/index/store/boltdb/reader.go @@ -15,13 +15,14 @@ import ( ) type Reader struct { - store *Store - tx *bolt.Tx + store *Store + tx *bolt.Tx + bucket *bolt.Bucket } func (r *Reader) Get(key []byte) ([]byte, error) { var rv []byte - v := r.tx.Bucket([]byte(r.store.bucket)).Get(key) + v := r.bucket.Get(key) if v != nil { rv = make([]byte, len(v)) copy(rv, v) @@ -30,8 +31,7 @@ func (r *Reader) Get(key []byte) ([]byte, error) { } func (r *Reader) PrefixIterator(prefix []byte) store.KVIterator { - b := r.tx.Bucket([]byte(r.store.bucket)) - cursor := b.Cursor() + cursor := r.bucket.Cursor() rv := &Iterator{ store: r.store, @@ -45,8 +45,7 @@ func (r *Reader) PrefixIterator(prefix []byte) store.KVIterator { } func (r *Reader) RangeIterator(start, end []byte) store.KVIterator { - b := r.tx.Bucket([]byte(r.store.bucket)) - cursor := b.Cursor() + cursor := r.bucket.Cursor() rv := &Iterator{ store: r.store, diff --git a/index/store/boltdb/store.go b/index/store/boltdb/store.go index 93600094..b8eff256 100644 --- a/index/store/boltdb/store.go +++ b/index/store/boltdb/store.go @@ -83,8 +83,9 @@ func (bs *Store) Reader() (store.KVReader, error) { return nil, err } return &Reader{ - store: bs, - tx: tx, + store: bs, + tx: tx, + bucket: tx.Bucket([]byte(bs.bucket)), }, nil } diff --git a/index/store/boltdb/writer.go b/index/store/boltdb/writer.go index 3972ab88..1cd29a34 100644 --- a/index/store/boltdb/writer.go +++ b/index/store/boltdb/writer.go @@ -35,14 +35,16 @@ func (w *Writer) ExecuteBatch(batch store.KVBatch) error { return err } + bucket := tx.Bucket([]byte(w.store.bucket)) + for k, mergeOps := range emulatedBatch.Merger.Merges { kb := []byte(k) - existingVal := tx.Bucket([]byte(w.store.bucket)).Get(kb) + existingVal := bucket.Get(kb) mergedVal, fullMergeOk := w.store.mo.FullMerge(kb, existingVal, mergeOps) if !fullMergeOk { return fmt.Errorf("merge operator returned failure") } - err = tx.Bucket([]byte(w.store.bucket)).Put(kb, mergedVal) + err = bucket.Put(kb, mergedVal) if err != nil { return err } @@ -50,12 +52,12 @@ func (w *Writer) ExecuteBatch(batch store.KVBatch) error { for _, op := range emulatedBatch.Ops { if op.V != nil { - err := tx.Bucket([]byte(w.store.bucket)).Put(op.K, op.V) + err := bucket.Put(op.K, op.V) if err != nil { return err } } else { - err := tx.Bucket([]byte(w.store.bucket)).Delete(op.K) + err := bucket.Delete(op.K) if err != nil { return err }