Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Unified Diff: logdog/common/storage/bigtable/testing.go

Issue 2607663002: Add treapstore, a treap-based in-memory data store (Closed)
Patch Set: Fix test race, better docs, valid zero values. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « common/data/treapstore/store_test.go ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: logdog/common/storage/bigtable/testing.go
diff --git a/logdog/common/storage/bigtable/testing.go b/logdog/common/storage/bigtable/testing.go
index 14633b0aaaf886acf7fa9d8ad8dfa05f7adc2393..d1a6b5e03432ea86f992c535c97035b956e00c93 100644
--- a/logdog/common/storage/bigtable/testing.go
+++ b/logdog/common/storage/bigtable/testing.go
@@ -9,20 +9,24 @@ import (
"fmt"
"time"
- "github.com/luci/gkvlite"
-
"github.com/luci/luci-go/common/data/recordio"
+ "github.com/luci/luci-go/common/data/treapstore"
"github.com/luci/luci-go/logdog/common/storage"
"golang.org/x/net/context"
)
+type storageItem struct {
+ key []byte
+ value []byte
+}
+
// btTableTest is an in-memory implementation of btTable interface for testing.
//
// This is a simple implementation; not an efficient one.
type btTableTest struct {
- s *gkvlite.Store
- c *gkvlite.Collection
+ s *treapstore.Store
+ c *treapstore.Collection
// err, if true, is the error immediately returned by functions.
err error
@@ -47,12 +51,6 @@ type btTestingStorage struct {
mem *btTableTest
}
-func (st *btTestingStorage) Close() {
- // Override Close to make sure our gkvlite instance is closed.
- st.mem.close()
- st.btStorage.Close()
-}
-
func (st *btTestingStorage) DataMap() map[string][]byte { return st.mem.dataMap() }
func (st *btTestingStorage) SetMaxRowSize(v int) { st.maxRowSize = v }
func (st *btTestingStorage) SetErr(err error) { st.mem.err = err }
@@ -74,20 +72,16 @@ func NewMemoryInstance(c context.Context, opts Options) Testing {
}
func (t *btTableTest) close() {
- if t.s != nil {
- t.s.Close()
- t.s = nil
- }
+ t.s = nil
+ t.c = nil
}
-func (t *btTableTest) collection() *gkvlite.Collection {
+func (t *btTableTest) collection() *treapstore.Collection {
if t.s == nil {
- var err error
- t.s, err = gkvlite.NewStore(nil)
- if err != nil {
- panic(err)
- }
- t.c = t.s.MakePrivateCollection(bytes.Compare)
+ t.s = treapstore.New()
+ t.c = t.s.CreateCollection("", func(a, b interface{}) int {
+ return bytes.Compare(a.(*storageItem).key, b.(*storageItem).key)
+ })
}
return t.c
}
@@ -108,18 +102,31 @@ func (t *btTableTest) putLogData(c context.Context, rk *rowKey, d []byte) error
enc := []byte(rk.encode())
coll := t.collection()
- if item, _ := coll.Get(enc); item != nil {
+ if item := coll.Get(&storageItem{enc, nil}); item != nil {
return storage.ErrExists
}
clone := make([]byte, len(d))
copy(clone, d)
- if err := coll.Set(enc, clone); err != nil {
- panic(err)
- }
+ coll.Put(&storageItem{enc, clone})
+
return nil
}
+func (t *btTableTest) forEachItem(start []byte, cb func(k, v []byte) bool) {
+ it := t.collection().Iterator(&storageItem{start, nil})
+ for {
+ itm, ok := it.Next()
+ if !ok {
+ return
+ }
+ ent := itm.(*storageItem)
+ if !cb(ent.key, ent.value) {
+ return
+ }
+ }
+}
+
func (t *btTableTest) getLogData(c context.Context, rk *rowKey, limit int, keysOnly bool, cb btGetCallback) error {
if t.err != nil {
return t.err
@@ -128,9 +135,10 @@ func (t *btTableTest) getLogData(c context.Context, rk *rowKey, limit int, keysO
enc := []byte(rk.encode())
prefix := rk.pathPrefix()
var ierr error
- err := t.collection().VisitItemsAscend(enc, !keysOnly, func(i *gkvlite.Item) bool {
+
+ t.forEachItem(enc, func(k, v []byte) bool {
var drk *rowKey
- drk, ierr = decodeRowKey(string(i.Key))
+ drk, ierr = decodeRowKey(string(k))
if ierr != nil {
return false
}
@@ -138,7 +146,7 @@ func (t *btTableTest) getLogData(c context.Context, rk *rowKey, limit int, keysO
return false
}
- rowData := i.Val
+ rowData := v
if keysOnly {
rowData = nil
}
@@ -159,9 +167,6 @@ func (t *btTableTest) getLogData(c context.Context, rk *rowKey, limit int, keysO
return true
})
- if err != nil {
- panic(err)
- }
return ierr
}
@@ -176,12 +181,9 @@ func (t *btTableTest) setMaxLogAge(c context.Context, d time.Duration) error {
func (t *btTableTest) dataMap() map[string][]byte {
result := map[string][]byte{}
- err := t.collection().VisitItemsAscend([]byte(nil), true, func(i *gkvlite.Item) bool {
- result[string(i.Key)] = i.Val
+ t.forEachItem(nil, func(k, v []byte) bool {
+ result[string(k)] = v
return true
})
- if err != nil {
- panic(err)
- }
return result
}
« no previous file with comments | « common/data/treapstore/store_test.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698