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

Unified Diff: impl/memory/gkvlite_utils.go

Issue 2604943002: impl/memory: Replace gkvlite with "treapstore". (Closed)
Patch Set: Comments. Created 3 years, 11 months 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 | « impl/memory/gkvlite_tracing_utils.go ('k') | impl/memory/gkvlite_utils_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: impl/memory/gkvlite_utils.go
diff --git a/impl/memory/gkvlite_utils.go b/impl/memory/gkvlite_utils.go
deleted file mode 100644
index dbdfe2ef9cf9c45093a45b44ee81546063a98bdd..0000000000000000000000000000000000000000
--- a/impl/memory/gkvlite_utils.go
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright 2015 The LUCI Authors. All rights reserved.
-// Use of this source code is governed under the Apache License, Version 2.0
-// that can be found in the LICENSE file.
-
-package memory
-
-import (
- "bytes"
- "runtime"
-
- "github.com/luci/gae/service/datastore"
- "github.com/luci/gkvlite"
-)
-
-func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) {
- if o != nil && !o.IsReadOnly() {
- panic("old collection is r/w")
- }
- if n != nil && !n.IsReadOnly() {
- panic("new collection is r/w")
- }
-
- // TODO(riannucci): reimplement in terms of *iterator.
- oldItems, newItems := make(chan *gkvlite.Item), make(chan *gkvlite.Item)
- walker := func(c memCollection, ch chan<- *gkvlite.Item) {
- defer close(ch)
- if c != nil {
- c.VisitItemsAscend(nil, true, func(i *gkvlite.Item) bool {
- ch <- i
- return true
- })
- }
- }
-
- go walker(o, oldItems)
- go walker(n, newItems)
-
- l, r := <-oldItems, <-newItems
- for {
- switch {
- case l == nil && r == nil:
- return
-
- case l == nil:
- f(r.Key, nil, r.Val)
- r = <-newItems
-
- case r == nil:
- f(l.Key, l.Val, nil)
- l = <-oldItems
-
- default:
- switch bytes.Compare(l.Key, r.Key) {
- case -1: // l < r
- f(l.Key, l.Val, nil)
- l = <-oldItems
- case 0: // l == r
- f(l.Key, l.Val, r.Val)
- l, r = <-oldItems, <-newItems
- case 1: // l > r
- f(r.Key, nil, r.Val)
- r = <-newItems
- }
- }
- }
-}
-
-// memStore is a gkvlite.Store which will panic for anything which might
-// otherwise return an error.
-//
-// This is reasonable for in-memory Store objects, since the only errors that
-// should occur happen with file IO on the underlying file (which of course
-// doesn't exist).
-type memStore interface {
- datastore.TestingSnapshot
-
- GetCollection(name string) memCollection
- GetCollectionNames() []string
- GetOrCreateCollection(name string) memCollection
- Snapshot() memStore
-
- IsReadOnly() bool
-}
-
-// memCollection is a gkvlite.Collection which will panic for anything which
-// might otherwise return an error.
-//
-// This is reasonable for in-memory Store objects, since the only errors that
-// should occur happen with file IO on the underlying file (which of course
-// doesn't exist.
-type memCollection interface {
- Name() string
- Delete(k []byte) bool
- Get(k []byte) []byte
- GetTotals() (numItems, numBytes uint64)
- MinItem(withValue bool) *gkvlite.Item
- Set(k, v []byte)
- VisitItemsAscend(target []byte, withValue bool, visitor gkvlite.ItemVisitor)
-
- IsReadOnly() bool
-}
-
-type memStoreImpl struct {
- s *gkvlite.Store
- ro bool
-}
-
-var _ memStore = (*memStoreImpl)(nil)
-
-func (*memStoreImpl) ImATestingSnapshot() {}
-
-func (ms *memStoreImpl) IsReadOnly() bool { return ms.ro }
-
-func newMemStore() memStore {
- store, err := gkvlite.NewStore(nil)
- memoryCorruption(err)
- ret := memStore(&memStoreImpl{store, false})
- if *logMemCollectionFolder != "" {
- ret = wrapTracingMemStore(ret)
- }
- return ret
-}
-
-func (ms *memStoreImpl) Snapshot() memStore {
- if ms.ro {
- return ms
- }
- ret := ms.s.Snapshot()
- runtime.SetFinalizer(ret, func(s *gkvlite.Store) { go s.Close() })
- return &memStoreImpl{ret, true}
-}
-
-func (ms *memStoreImpl) GetCollection(name string) memCollection {
- coll := ms.s.GetCollection(name)
- if coll == nil {
- return nil
- }
- return &memCollectionImpl{coll, ms.ro}
-}
-
-func (ms *memStoreImpl) GetOrCreateCollection(name string) memCollection {
- coll := ms.GetCollection(name)
- if coll == nil {
- coll = &memCollectionImpl{(ms.s.SetCollection(name, nil)), ms.ro}
- }
- return coll
-}
-
-func (ms *memStoreImpl) GetCollectionNames() []string {
- return ms.s.GetCollectionNames()
-}
-
-type memCollectionImpl struct {
- c *gkvlite.Collection
- ro bool
-}
-
-var _ memCollection = (*memCollectionImpl)(nil)
-
-func (mc *memCollectionImpl) Name() string { return mc.c.Name() }
-func (mc *memCollectionImpl) IsReadOnly() bool { return mc.ro }
-
-func (mc *memCollectionImpl) Get(k []byte) []byte {
- ret, err := mc.c.Get(k)
- memoryCorruption(err)
- return ret
-}
-
-func (mc *memCollectionImpl) MinItem(withValue bool) *gkvlite.Item {
- ret, err := mc.c.MinItem(withValue)
- memoryCorruption(err)
- return ret
-}
-
-func (mc *memCollectionImpl) Set(k, v []byte) {
- err := mc.c.Set(k, v)
- memoryCorruption(err)
-}
-
-func (mc *memCollectionImpl) Delete(k []byte) bool {
- ret, err := mc.c.Delete(k)
- memoryCorruption(err)
- return ret
-}
-
-func (mc *memCollectionImpl) VisitItemsAscend(target []byte, withValue bool, visitor gkvlite.ItemVisitor) {
- if !mc.ro {
- panic("attempting to VisitItemsAscend from r/w memCollection")
- }
- err := mc.c.VisitItemsAscend(target, withValue, visitor)
- memoryCorruption(err)
-}
-
-func (mc *memCollectionImpl) GetTotals() (numItems, numBytes uint64) {
- numItems, numBytes, err := mc.c.GetTotals()
- memoryCorruption(err)
- return
-}
« no previous file with comments | « impl/memory/gkvlite_tracing_utils.go ('k') | impl/memory/gkvlite_utils_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698