Index: impl/memory/gkvlite_tracing_utils.go |
diff --git a/impl/memory/gkvlite_tracing_utils.go b/impl/memory/gkvlite_tracing_utils.go |
deleted file mode 100644 |
index 3e310bd09d1a294eb62b6fe96f79aff4f5f2ced4..0000000000000000000000000000000000000000 |
--- a/impl/memory/gkvlite_tracing_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 ( |
- "encoding/hex" |
- "flag" |
- "fmt" |
- "io/ioutil" |
- "os" |
- "path/filepath" |
- "runtime" |
- "strings" |
- "sync" |
- "sync/atomic" |
- |
- "github.com/luci/gkvlite" |
-) |
- |
-var logMemCollectionFolder = flag.String( |
- "luci.gae.gkvlite_trace_folder", "", |
- "Set to a folder path to enable debugging traces to be dumped there. Set to '-' to dump to stdout.") |
-var logMemCollectionFolderTmp string |
-var logMemCollectionOnce sync.Once |
-var logMemCounter uint32 |
-var logMemNameKey = "holds a string indicating the GKVLiteDebuggingTraceName" |
-var stdoutLock sync.Mutex |
- |
-func wrapTracingMemStore(store memStore) memStore { |
- var writer traceWriter |
- logNum := atomic.AddUint32(&logMemCounter, 1) - 1 |
- collName := fmt.Sprintf("coll%d", logNum) |
- |
- if *logMemCollectionFolder == "-" { |
- writer = func(format string, a ...interface{}) { |
- stdoutLock.Lock() |
- defer stdoutLock.Unlock() |
- fmt.Printf(format+"\n", a...) |
- } |
- } else { |
- logMemCollectionOnce.Do(func() { |
- var err error |
- logMemCollectionFolderTmp, err = ioutil.TempDir(*logMemCollectionFolder, "luci-gae-gkvlite_trace") |
- if err != nil { |
- panic(err) |
- } |
- logMemCollectionFolderTmp, err = filepath.Abs(logMemCollectionFolderTmp) |
- if err != nil { |
- panic(err) |
- } |
- fmt.Fprintf(os.Stderr, "Saving GKVLite trace files to %q\n", logMemCollectionFolderTmp) |
- }) |
- if logMemCollectionFolderTmp == "" { |
- panic("unable to create folder for tracefiles") |
- } |
- |
- lck := sync.Mutex{} |
- fname := fmt.Sprintf(filepath.Join(logMemCollectionFolderTmp, fmt.Sprintf("%d.trace", logNum))) |
- fil, err := os.Create(fname) |
- if err != nil { |
- panic(err) |
- } |
- writer = func(format string, a ...interface{}) { |
- lck.Lock() |
- defer lck.Unlock() |
- fmt.Fprintf(fil, format+"\n", a...) |
- } |
- runtime.SetFinalizer(&writer, func(_ *traceWriter) { fil.Close() }) |
- } |
- writer("%s := newMemStore()", collName) |
- return &tracingMemStoreImpl{store, writer, collName, 0, false} |
-} |
- |
-type traceWriter func(format string, a ...interface{}) |
- |
-type tracingMemStoreImpl struct { |
- i memStore |
- w traceWriter |
- |
- collName string |
- // for the mutable store, this is a counter that increments for every |
- // Snapshot, and for snapshots, this is the number of the snapshot. |
- snapNum uint |
- isSnap bool |
-} |
- |
-var _ memStore = (*tracingMemStoreImpl)(nil) |
- |
-func (t *tracingMemStoreImpl) ImATestingSnapshot() {} |
- |
-func (t *tracingMemStoreImpl) colWriter(action, name string) traceWriter { |
- ident := t.ident() |
- hexname := hex.EncodeToString([]byte(name)) |
- writer := func(format string, a ...interface{}) { |
- if strings.HasPrefix(format, "//") { // comment |
- t.w(format, a...) |
- } else { |
- t.w(fmt.Sprintf("%s_%s%s", ident, hexname, format), a...) |
- } |
- } |
- writer(" := %s.%s(%q)", ident, action, name) |
- return writer |
-} |
- |
-func (t *tracingMemStoreImpl) ident() string { |
- if t.isSnap { |
- return fmt.Sprintf("%s_snap%d", t.collName, t.snapNum) |
- } |
- return t.collName |
-} |
- |
-func (t *tracingMemStoreImpl) GetCollection(name string) memCollection { |
- coll := t.i.GetCollection(name) |
- if coll == nil { |
- t.w("// %s.GetCollection(%q) -> nil", t.ident(), name) |
- return nil |
- } |
- writer := t.colWriter("GetCollection", name) |
- return &tracingMemCollectionImpl{coll, writer, 0} |
-} |
- |
-func (t *tracingMemStoreImpl) GetCollectionNames() []string { |
- t.w("%s.GetCollectionNames()", t.ident()) |
- return t.i.GetCollectionNames() |
-} |
- |
-func (t *tracingMemStoreImpl) GetOrCreateCollection(name string) memCollection { |
- writer := t.colWriter("GetOrCreateCollection", name) |
- return &tracingMemCollectionImpl{t.i.GetOrCreateCollection(name), writer, 0} |
-} |
- |
-func (t *tracingMemStoreImpl) Snapshot() memStore { |
- snap := t.i.Snapshot() |
- if snap == t.i { |
- t.w("// %s.Snapshot() -> self", t.ident()) |
- return t |
- } |
- ret := &tracingMemStoreImpl{snap, t.w, t.collName, t.snapNum, true} |
- t.w("%s := %s.Snapshot()", ret.ident(), t.ident()) |
- t.snapNum++ |
- return ret |
-} |
- |
-func (t *tracingMemStoreImpl) IsReadOnly() bool { |
- return t.i.IsReadOnly() |
-} |
- |
-type tracingMemCollectionImpl struct { |
- i memCollection |
- w traceWriter |
- visitNumber uint |
-} |
- |
-var _ memCollection = (*tracingMemCollectionImpl)(nil) |
- |
-func (t *tracingMemCollectionImpl) Name() string { |
- return t.i.Name() |
-} |
- |
-func (t *tracingMemCollectionImpl) Delete(k []byte) bool { |
- t.w(".Delete(%#v)", k) |
- return t.i.Delete(k) |
-} |
- |
-func (t *tracingMemCollectionImpl) Get(k []byte) []byte { |
- t.w(".Get(%#v)", k) |
- return t.i.Get(k) |
-} |
- |
-func (t *tracingMemCollectionImpl) GetTotals() (numItems, numBytes uint64) { |
- t.w(".GetTotals()") |
- return t.i.GetTotals() |
-} |
- |
-func (t *tracingMemCollectionImpl) MinItem(withValue bool) *gkvlite.Item { |
- t.w(".MinItem(%t)", withValue) |
- return t.i.MinItem(withValue) |
-} |
- |
-func (t *tracingMemCollectionImpl) Set(k, v []byte) { |
- t.w(".Set(%#v, %#v)", k, v) |
- t.i.Set(k, v) |
-} |
- |
-func (t *tracingMemCollectionImpl) VisitItemsAscend(target []byte, withValue bool, visitor gkvlite.ItemVisitor) { |
- vnum := t.visitNumber |
- t.visitNumber++ |
- |
- t.w(".VisitItemsAscend(%#v, %t, func(i *gkvlite.Item) bool{ return true }) // BEGIN VisitItemsAscend(%d)", target, withValue, vnum) |
- defer t.w("// END VisitItemsAscend(%d)", vnum) |
- t.i.VisitItemsAscend(target, withValue, visitor) |
-} |
- |
-func (t *tracingMemCollectionImpl) IsReadOnly() bool { |
- return t.i.IsReadOnly() |
-} |