| Index: go/src/infra/gae/libs/gae/memory/gkvlite_utils.go
|
| diff --git a/go/src/infra/gae/libs/gae/memory/gkvlite_utils.go b/go/src/infra/gae/libs/gae/memory/gkvlite_utils.go
|
| deleted file mode 100644
|
| index 08b2b9b075ecfd5b73c37922d59e293cfb300d83..0000000000000000000000000000000000000000
|
| --- a/go/src/infra/gae/libs/gae/memory/gkvlite_utils.go
|
| +++ /dev/null
|
| @@ -1,156 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package memory
|
| -
|
| -import (
|
| - "bytes"
|
| - "runtime"
|
| - "sync"
|
| -
|
| - "github.com/luci/gkvlite"
|
| -)
|
| -
|
| -func gkvCollide(o, n *memCollection, f func(k, ov, nv []byte)) {
|
| - oldItems, newItems := make(chan *gkvlite.Item), make(chan *gkvlite.Item)
|
| - walker := func(c *memCollection, ch chan<- *gkvlite.Item, wg *sync.WaitGroup) {
|
| - defer close(ch)
|
| - defer wg.Done()
|
| - if c != nil {
|
| - c.VisitItemsAscend(nil, true, func(i *gkvlite.Item) bool {
|
| - ch <- i
|
| - return true
|
| - })
|
| - }
|
| - }
|
| -
|
| - wg := &sync.WaitGroup{}
|
| - wg.Add(2)
|
| - go walker(o, oldItems, wg)
|
| - go walker(n, newItems, wg)
|
| -
|
| - l, r := <-oldItems, <-newItems
|
| - for {
|
| - if l == nil && r == nil {
|
| - break
|
| - }
|
| -
|
| - if l == nil {
|
| - f(r.Key, nil, r.Val)
|
| - r = <-newItems
|
| - } else if r == nil {
|
| - f(l.Key, l.Val, nil)
|
| - l = <-oldItems
|
| - } else {
|
| - 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
|
| - }
|
| - }
|
| - }
|
| - wg.Wait()
|
| -}
|
| -
|
| -// 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 gkvlite.Store
|
| -
|
| -func newMemStore() *memStore {
|
| - ret, err := gkvlite.NewStore(nil)
|
| - if err != nil {
|
| - panic(err)
|
| - }
|
| - return (*memStore)(ret)
|
| -}
|
| -
|
| -func (ms *memStore) Snapshot() *memStore {
|
| - ret := (*memStore)((*gkvlite.Store)(ms).Snapshot())
|
| - runtime.SetFinalizer((*gkvlite.Store)(ret), func(s *gkvlite.Store) {
|
| - go s.Close()
|
| - })
|
| - return ret
|
| -}
|
| -
|
| -func (ms *memStore) MakePrivateCollection(cmp gkvlite.KeyCompare) *memCollection {
|
| - return (*memCollection)((*gkvlite.Store)(ms).MakePrivateCollection(cmp))
|
| -}
|
| -
|
| -func (ms *memStore) GetCollection(name string) *memCollection {
|
| - return (*memCollection)((*gkvlite.Store)(ms).GetCollection(name))
|
| -}
|
| -
|
| -func (ms *memStore) SetCollection(name string, cmp gkvlite.KeyCompare) *memCollection {
|
| - return (*memCollection)((*gkvlite.Store)(ms).SetCollection(name, cmp))
|
| -}
|
| -
|
| -func (ms *memStore) RemoveCollection(name string) {
|
| - (*gkvlite.Store)(ms).RemoveCollection(name)
|
| -}
|
| -
|
| -func (ms *memStore) GetCollectionNames() []string {
|
| - return (*gkvlite.Store)(ms).GetCollectionNames()
|
| -}
|
| -
|
| -// 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 gkvlite.Collection
|
| -
|
| -func (mc *memCollection) Get(k []byte) []byte {
|
| - ret, err := (*gkvlite.Collection)(mc).Get(k)
|
| - if err != nil {
|
| - panic(err)
|
| - }
|
| - return ret
|
| -}
|
| -
|
| -func (mc *memCollection) MinItem(withValue bool) *gkvlite.Item {
|
| - ret, err := (*gkvlite.Collection)(mc).MinItem(withValue)
|
| - if err != nil {
|
| - panic(err)
|
| - }
|
| - return ret
|
| -}
|
| -
|
| -func (mc *memCollection) Set(k, v []byte) {
|
| - if err := (*gkvlite.Collection)(mc).Set(k, v); err != nil {
|
| - panic(err)
|
| - }
|
| -}
|
| -
|
| -func (mc *memCollection) Delete(k []byte) bool {
|
| - ret, err := (*gkvlite.Collection)(mc).Delete(k)
|
| - if err != nil {
|
| - panic(err)
|
| - }
|
| - return ret
|
| -}
|
| -
|
| -func (mc *memCollection) VisitItemsAscend(target []byte, withValue bool, visitor gkvlite.ItemVisitor) {
|
| - if err := (*gkvlite.Collection)(mc).VisitItemsAscend(target, withValue, visitor); err != nil {
|
| - panic(err)
|
| - }
|
| -}
|
| -
|
| -func (mc *memCollection) GetTotals() (numItems, numBytes uint64) {
|
| - numItems, numBytes, err := (*gkvlite.Collection)(mc).GetTotals()
|
| - if err != nil {
|
| - panic(err)
|
| - }
|
| - return
|
| -}
|
|
|