From 787261cd1ff114b50fa1317e4536a7d927ec0d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Vincent?= <28714795+leovct@users.noreply.github.com> Date: Fri, 10 Nov 2023 09:23:10 +0100 Subject: [PATCH 1/7] chore: set default `polycli monitor` verbosity level to silent (#154) * fix: `polycli monitor` default verbosity level * chore: remove hack * Revert "chore: remove hack" This reverts commit 86de6361271edf7f4a14424bc188820ba82b2ecb. --- cmd/root.go | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 74721db0..8d385dc8 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -29,6 +29,21 @@ import ( "github.com/maticnetwork/polygon-cli/cmd/wallet" ) +// VerbosityLevel represents the verbosity levels. +// https://pkg.go.dev/github.com/rs/zerolog#readme-leveled-logging +type VerbosityLevel int + +const ( + Silent VerbosityLevel = 0 + Panic VerbosityLevel = 100 + Fatal VerbosityLevel = 200 + Error VerbosityLevel = 300 + Warn VerbosityLevel = 400 + Info VerbosityLevel = 500 + Debug VerbosityLevel = 600 + Trace VerbosityLevel = 700 +) + var ( cfgFile string verbosity int @@ -84,7 +99,11 @@ func NewPolycliCommand() *cobra.Command { Short: "A Swiss Army knife of blockchain tools.", Long: "Polycli is a collection of tools that are meant to be useful while building, testing, and running block chain applications.", PersistentPreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(verbosity, pretty) + if cmd.Use == monitor.MonitorCmd.Use { + setLogLevel(int(Silent), pretty) + } else { + setLogLevel(verbosity, pretty) + } }, } @@ -123,19 +142,22 @@ func NewPolycliCommand() *cobra.Command { // setLogLevel sets the log level based on the flags. // https://logging.apache.org/log4j/2.x/manual/customloglevels.html func setLogLevel(verbosity int, pretty bool) { - if verbosity < 100 { + switch { + case verbosity == int(Silent): + zerolog.SetGlobalLevel(zerolog.NoLevel) + case verbosity < int(Panic): zerolog.SetGlobalLevel(zerolog.PanicLevel) - } else if verbosity < 200 { + case verbosity < int(Fatal): zerolog.SetGlobalLevel(zerolog.FatalLevel) - } else if verbosity < 300 { + case verbosity < int(Error): zerolog.SetGlobalLevel(zerolog.ErrorLevel) - } else if verbosity < 400 { + case verbosity < int(Warn): zerolog.SetGlobalLevel(zerolog.WarnLevel) - } else if verbosity < 500 { + case verbosity < int(Info): zerolog.SetGlobalLevel(zerolog.InfoLevel) - } else if verbosity < 600 { + case verbosity < int(Debug): zerolog.SetGlobalLevel(zerolog.DebugLevel) - } else { + default: zerolog.SetGlobalLevel(zerolog.TraceLevel) } From 1f3269e4e0493e12afed1353f08593bcce9186d9 Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Wed, 8 Nov 2023 16:16:50 -0500 Subject: [PATCH 2/7] chore: refactor to abstract db implementation --- cmd/leveldbbench/leveldbbench.go | 167 ++++++++++++++++++++----------- 1 file changed, 108 insertions(+), 59 deletions(-) diff --git a/cmd/leveldbbench/leveldbbench.go b/cmd/leveldbbench/leveldbbench.go index ad2aa138..9b4da9c4 100644 --- a/cmd/leveldbbench/leveldbbench.go +++ b/cmd/leveldbbench/leveldbbench.go @@ -55,6 +55,7 @@ var ( readOnly *bool dbPath *string fullScan *bool + dbMode *string ) const ( @@ -96,12 +97,11 @@ type ( TestDuration time.Duration Description string OpCount uint64 - Stats *leveldb.DBStats OpRate float64 ValueDist []uint64 } RandomKeySeeker struct { - db *leveldb.DB + db KeyValueDB iterator iterator.Iterator iteratorMutex sync.Mutex firstKey []byte @@ -115,16 +115,77 @@ type ( ranges []IORange totalFrequency int } + // KeyValueDB directly exposes the necessary methods of leveldb.DB that we need to run the test so that they can be + // implemented by other KV stores + KeyValueDB interface { + Close() error + Compact() error + NewIterator() iterator.Iterator + Get([]byte) ([]byte, error) + Put([]byte, []byte) error + } + LevelDBWrapper struct { + ro *opt.ReadOptions + wo *opt.WriteOptions + handle *leveldb.DB + } + PebbleDBWrapper struct { + } ) -func NewTestResult(startTime, endTime time.Time, desc string, opCount uint64, db *leveldb.DB) *TestResult { - tr := new(TestResult) - s := new(leveldb.DBStats) - err := db.Stats(s) +func NewWrappedLevelDB() (*LevelDBWrapper, error) { + db, err := leveldb.OpenFile(*dbPath, &opt.Options{ + Filter: filter.NewBloomFilter(10), + DisableSeeksCompaction: true, + OpenFilesCacheCapacity: *openFilesCacheCapacity, + BlockCacheCapacity: *cacheSize / 2 * opt.MiB, + WriteBuffer: *cacheSize / 4 * opt.MiB, + // if we've disabled writes, or we're doing a full scan, we should open the database in read only mode + ReadOnly: *readOnly || *fullScan, + }) if err != nil { - log.Error().Err(err).Msg("Unable to retrieve db stats") + return nil, err + } + + wo := &opt.WriteOptions{ + NoWriteMerge: *noWriteMerge, + Sync: *syncWrites, + } + ro := &opt.ReadOptions{ + DontFillCache: *dontFillCache, } - tr.Stats = s + if *readStrict { + ro.Strict = opt.StrictAll + } else { + ro.Strict = opt.DefaultStrict + } + if *nilReadOptions { + ro = nil + } + wrapper := new(LevelDBWrapper) + wrapper.handle = db + wrapper.wo = wo + wrapper.ro = ro + return wrapper, nil +} +func (l *LevelDBWrapper) Close() error { + return l.handle.Close() +} +func (l *LevelDBWrapper) Compact() error { + return l.handle.CompactRange(util.Range{Start: nil, Limit: nil}) +} +func (l *LevelDBWrapper) NewIterator() iterator.Iterator { + return l.handle.NewIterator(nil, nil) +} +func (l *LevelDBWrapper) Get(key []byte) ([]byte, error) { + return l.handle.Get(key, l.ro) +} +func (l *LevelDBWrapper) Put(key []byte, value []byte) error { + return l.handle.Put(key, value, l.wo) +} + +func NewTestResult(startTime, endTime time.Time, desc string, opCount uint64) *TestResult { + tr := new(TestResult) tr.StartTime = startTime tr.EndTime = endTime tr.TestDuration = endTime.Sub(startTime) @@ -143,35 +204,22 @@ var LevelDBBenchCmd = &cobra.Command{ Long: usage, RunE: func(cmd *cobra.Command, args []string) error { log.Info().Msg("Starting level db test") - db, err := leveldb.OpenFile(*dbPath, &opt.Options{ - Filter: filter.NewBloomFilter(10), - DisableSeeksCompaction: true, - OpenFilesCacheCapacity: *openFilesCacheCapacity, - BlockCacheCapacity: *cacheSize / 2 * opt.MiB, - WriteBuffer: *cacheSize / 4 * opt.MiB, - // if we've disabled writes, or we're doing a full scan, we should open the database in read only mode - ReadOnly: *readOnly || *fullScan, - }) - if err != nil { - return err + var kvdb KeyValueDB + var err error + switch *dbMode { + case "leveldb": + kvdb, err = NewWrappedLevelDB() + if err != nil { + return err + } + case "pebbledb": + return fmt.Errorf("pebble db not implemented yet") + default: + return fmt.Errorf("the mode %s is not recognized", *dbMode) } ctx := context.Background() - wo := opt.WriteOptions{ - NoWriteMerge: *noWriteMerge, - Sync: *syncWrites, - } - ro := &opt.ReadOptions{ - DontFillCache: *dontFillCache, - } - if *readStrict { - ro.Strict = opt.StrictAll - } else { - ro.Strict = opt.DefaultStrict - } - if *nilReadOptions { - ro = nil - } + var start time.Time trs := make([]*TestResult, 0) @@ -186,8 +234,8 @@ var LevelDBBenchCmd = &cobra.Command{ if *fullScan { start = time.Now() - opCount, valueDist := runFullScan(ctx, db, &wo, ro) - tr := NewTestResult(start, time.Now(), "full scan", opCount, db) + opCount, valueDist := runFullScan(ctx, kvdb) + tr := NewTestResult(start, time.Now(), "full scan", opCount) tr.ValueDist = valueDist trs = append(trs, tr) return printSummary(trs) @@ -196,32 +244,32 @@ var LevelDBBenchCmd = &cobra.Command{ // in no write mode, we assume the database as already been populated in a previous run or we're using some other database if !*readOnly { start = time.Now() - writeData(ctx, db, &wo, 0, *writeLimit, *sequentialWrites) - trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("initial %s write", sequentialWritesDesc), *writeLimit, db)) + writeData(ctx, kvdb, 0, *writeLimit, *sequentialWrites) + trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("initial %s write", sequentialWritesDesc), *writeLimit)) for i := 0; i < int(*overwriteCount); i += 1 { start = time.Now() - writeData(ctx, db, &wo, 0, *writeLimit, *sequentialWrites) - trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s overwrite %d", sequentialWritesDesc, i), *writeLimit, db)) + writeData(ctx, kvdb, 0, *writeLimit, *sequentialWrites) + trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s overwrite %d", sequentialWritesDesc, i), *writeLimit)) } start = time.Now() - runFullCompact(ctx, db, &wo) - trs = append(trs, NewTestResult(start, time.Now(), "compaction", 1, db)) + runFullCompact(ctx, kvdb) + trs = append(trs, NewTestResult(start, time.Now(), "compaction", 1)) } if *sequentialReads { start = time.Now() - readSeq(ctx, db, &wo, *readLimit) - trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialReadsDesc), *readLimit, db)) + readSeq(ctx, kvdb, *readLimit) + trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialReadsDesc), *readLimit)) } else { start = time.Now() - readRandom(ctx, db, ro, *readLimit) - trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialWritesDesc), *readLimit, db)) + readRandom(ctx, kvdb, *readLimit) + trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialWritesDesc), *readLimit)) } log.Info().Msg("Close DB") - err = db.Close() + err = kvdb.Close() if err != nil { log.Error().Err(err).Msg("Error while closing db") } @@ -250,19 +298,19 @@ func printSummary(trs []*TestResult) error { return nil } -func runFullCompact(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions) { - err := db.CompactRange(util.Range{Start: nil, Limit: nil}) +func runFullCompact(ctx context.Context, db KeyValueDB) { + err := db.Compact() if err != nil { log.Fatal().Err(err).Msg("Error compacting data") } } -func runFullScan(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, ro *opt.ReadOptions) (uint64, []uint64) { +func runFullScan(ctx context.Context, db KeyValueDB) (uint64, []uint64) { pool := make(chan bool, *degreeOfParallelism) var wg sync.WaitGroup // 32 should be safe here. That would correspond to a single value that's 4.2 GB buckets := make([]uint64, 32) var bucketsMutex sync.Mutex - iter := db.NewIterator(nil, nil) + iter := db.NewIterator() var opCount uint64 = 0 for iter.Next() { pool <- true @@ -314,7 +362,7 @@ func runFullScan(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, ro * } return opCount, buckets } -func writeData(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, startIndex, writeLimit uint64, sequential bool) { +func writeData(ctx context.Context, db KeyValueDB, startIndex, writeLimit uint64, sequential bool) { var i uint64 = startIndex var wg sync.WaitGroup pool := make(chan bool, *degreeOfParallelism) @@ -326,7 +374,7 @@ func writeData(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, startI go func(i uint64) { _ = bar.Add(1) k, v := makeKV(i, sizeDistribution.GetSizeSample(), sequential) - err := db.Put(k, v, wo) + err := db.Put(k, v) if err != nil { log.Fatal().Err(err).Msg("Failed to put value") } @@ -338,14 +386,14 @@ func writeData(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, startI _ = bar.Finish() } -func readSeq(ctx context.Context, db *leveldb.DB, wo *opt.WriteOptions, limit uint64) { +func readSeq(ctx context.Context, db KeyValueDB, limit uint64) { pb := getNewProgressBar(int64(limit), "sequential reads") var rCount uint64 = 0 pool := make(chan bool, *degreeOfParallelism) var wg sync.WaitGroup benchLoop: for { - iter := db.NewIterator(nil, nil) + iter := db.NewIterator() for iter.Next() { rCount += 1 _ = pb.Add(1) @@ -372,7 +420,7 @@ benchLoop: wg.Wait() _ = pb.Finish() } -func readRandom(ctx context.Context, db *leveldb.DB, ro *opt.ReadOptions, limit uint64) { +func readRandom(ctx context.Context, db KeyValueDB, limit uint64) { pb := getNewProgressBar(int64(limit), "random reads") var rCount uint64 = 0 pool := make(chan bool, *degreeOfParallelism) @@ -388,7 +436,7 @@ benchLoop: rCount += 1 _ = pb.Add(1) - _, err := db.Get(rks.Key(), ro) + _, err := db.Get(rks.Key()) if err != nil { log.Error().Err(err).Msg("Level db random read error") } @@ -404,10 +452,10 @@ benchLoop: _ = pb.Finish() } -func NewRandomKeySeeker(db *leveldb.DB) *RandomKeySeeker { +func NewRandomKeySeeker(db KeyValueDB) *RandomKeySeeker { rks := new(RandomKeySeeker) rks.db = db - rks.iterator = db.NewIterator(nil, nil) + rks.iterator = db.NewIterator() rks.firstKey = rks.iterator.Key() return rks } @@ -618,6 +666,7 @@ func init() { readOnly = flagSet.Bool("read-only", false, "if true, we'll skip all the write operations and open the DB in read only mode") dbPath = flagSet.String("db-path", "_benchmark_db", "the path of the database that we'll use for testing") fullScan = flagSet.Bool("full-scan-mode", false, "if true, the application will scan the full database as fast as possible and print a summary") + dbMode = flagSet.String("db-mode", "leveldb", "The mode to use: leveldb or pebbledb") randSrc = rand.New(rand.NewSource(1)) } From 582b71425174e199d8e56078bd106cec08c029fd Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Thu, 9 Nov 2023 10:30:32 -0500 Subject: [PATCH 3/7] feat: adding pebble support --- cmd/leveldbbench/leveldbbench.go | 123 +++++++++++++++++++++-- go.mod | 14 +-- go.sum | 163 +++---------------------------- 3 files changed, 138 insertions(+), 162 deletions(-) diff --git a/cmd/leveldbbench/leveldbbench.go b/cmd/leveldbbench/leveldbbench.go index 9b4da9c4..048ae303 100644 --- a/cmd/leveldbbench/leveldbbench.go +++ b/cmd/leveldbbench/leveldbbench.go @@ -8,11 +8,14 @@ import ( "encoding/hex" "encoding/json" "fmt" + "github.com/cockroachdb/pebble" + "github.com/cockroachdb/pebble/bloom" "math" "math/bits" "math/rand" "os" "regexp" + "runtime" "sort" "strconv" "strings" @@ -130,9 +133,89 @@ type ( handle *leveldb.DB } PebbleDBWrapper struct { + handle *pebble.DB + wo *pebble.WriteOptions + sync.Mutex + } + WrappedPebbleIterator struct { + *pebble.Iterator + sync.Mutex } ) +func NewWrappedPebbleDB() (*PebbleDBWrapper, error) { + memTableLimit := 2 + memTableSize := *cacheSize * 1024 * 1024 / 2 / memTableLimit + opt := &pebble.Options{ + Cache: pebble.NewCache(int64(*cacheSize * 1024 * 1024)), + MemTableSize: memTableSize, + MemTableStopWritesThreshold: memTableLimit, + MaxConcurrentCompactions: func() int { return runtime.NumCPU() }, + Levels: []pebble.LevelOptions{ + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + }, + ReadOnly: *readOnly || *fullScan, + } + p, err := pebble.Open(*dbPath, opt) + if err != nil { + return nil, err + } + db := new(PebbleDBWrapper) + db.handle = p + db.wo = &pebble.WriteOptions{Sync: *syncWrites} + return db, err +} + +func (p *PebbleDBWrapper) Close() error { + return p.handle.Close() +} +func (p *PebbleDBWrapper) Compact() error { + // this is a hack to ideally get a key that's larger than most of the other keys + return p.handle.Compact([]byte{0}, []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, true) +} +func (p *PebbleDBWrapper) NewIterator() iterator.Iterator { + io := pebble.IterOptions{ + LowerBound: nil, + UpperBound: nil, + TableFilter: nil, + PointKeyFilters: nil, + RangeKeyFilters: nil, + KeyTypes: 0, + RangeKeyMasking: pebble.RangeKeyMasking{}, + OnlyReadGuaranteedDurable: false, + UseL6Filters: false, + } + iter := p.handle.NewIter(&io) + wrappedIter := WrappedPebbleIterator{iter, p.Mutex} + return &wrappedIter +} +func (w *WrappedPebbleIterator) Seek(key []byte) bool { + // SeekGE has a different name but has the same logic as the IteratorSeeker `Seek` method + return w.SeekGE(key) +} +func (w *WrappedPebbleIterator) SetReleaser(releaser util.Releaser) { + return +} +func (w *WrappedPebbleIterator) Release() { + w.Iterator.Close() +} +func (p *PebbleDBWrapper) Get(key []byte) ([]byte, error) { + resp, closer, err := p.handle.Get(key) + if err != nil { + return nil, err + } + closer.Close() + return resp, nil +} +func (p *PebbleDBWrapper) Put(key []byte, value []byte) error { + return p.handle.Set(key, value, p.wo) +} func NewWrappedLevelDB() (*LevelDBWrapper, error) { db, err := leveldb.OpenFile(*dbPath, &opt.Options{ Filter: filter.NewBloomFilter(10), @@ -213,7 +296,10 @@ var LevelDBBenchCmd = &cobra.Command{ return err } case "pebbledb": - return fmt.Errorf("pebble db not implemented yet") + kvdb, err = NewWrappedPebbleDB() + if err != nil { + return err + } default: return fmt.Errorf("the mode %s is not recognized", *dbMode) } @@ -426,26 +512,40 @@ func readRandom(ctx context.Context, db KeyValueDB, limit uint64) { pool := make(chan bool, *degreeOfParallelism) var wg sync.WaitGroup rks := NewRandomKeySeeker(db) + defer rks.iterator.Release() + var rCountLock sync.Mutex + var keyLock sync.Mutex benchLoop: for { for { pool <- true wg.Add(1) go func() { + rCountLock.Lock() rCount += 1 + rCountLock.Unlock() _ = pb.Add(1) - _, err := db.Get(rks.Key()) + // It's not entirely obvious WHY this is needed, but without it, there are issues with the way that + // pebble db manages it's iterators and internal state. Level db works fine though. + keyLock.Lock() + tmpKey := rks.Key() + _, err := db.Get(tmpKey) + keyLock.Unlock() if err != nil { - log.Error().Err(err).Msg("Level db random read error") + log.Error().Str("key", hex.EncodeToString(tmpKey)).Err(err).Msg("Level db random read error") } wg.Done() <-pool }() + rCountLock.Lock() if rCount >= limit { + rCountLock.Unlock() break benchLoop } + rCountLock.Unlock() + } } wg.Wait() @@ -468,7 +568,7 @@ func (r *RandomKeySeeker) Key() []byte { log.Trace().Str("seekKey", hex.EncodeToString(seekKey)).Msg("Searching for key") r.iteratorMutex.Lock() - defer r.iteratorMutex.Unlock() + // first try to just get a random key exists := r.iterator.Seek(seekKey) @@ -476,15 +576,26 @@ func (r *RandomKeySeeker) Key() []byte { if !exists { exists = r.iterator.Next() } + // if there is no next key, to back to the beginning if !exists { - r.iterator.First() - r.iterator.Next() + exists = r.iterator.First() + } + + // if there is no first key try advancing again + if !exists { + exists = r.iterator.Next() + } + + // if after trying to all these ways to find a valid key... something must be very wrong + if !exists { + log.Fatal().Msg("Unable to select random key!?") } if err := r.iterator.Error(); err != nil { log.Error().Err(err).Msg("Issue getting random key") } resultKey := r.iterator.Key() + r.iteratorMutex.Unlock() log.Trace().Str("seekKey", hex.EncodeToString(seekKey)).Str("resultKey", hex.EncodeToString(resultKey)).Msg("Found random key") return resultKey } diff --git a/go.mod b/go.mod index 50995f16..7f0d53b5 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( cloud.google.com/go/datastore v1.14.0 github.com/btcsuite/btcutil v1.0.2 github.com/cenkalti/backoff/v4 v4.2.1 + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 github.com/ethereum/go-ethereum v1.13.2 github.com/gizak/termui/v3 v3.1.0 github.com/google/gofuzz v1.2.0 @@ -41,25 +42,24 @@ require ( github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/VictoriaMetrics/fastcache v1.6.0 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.8.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect - github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect - github.com/cockroachdb/redact v1.0.8 // indirect - github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.0 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.18.0 // indirect github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/gofrs/flock v0.8.1 // indirect diff --git a/go.sum b/go.sum index 29ce29d0..a5a40a35 100644 --- a/go.sum +++ b/go.sum @@ -44,32 +44,23 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= -github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= @@ -93,7 +84,6 @@ github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -105,31 +95,21 @@ github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q1 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= -github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= -github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= -github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= -github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.0 h1:1OnSpOykNkUIBIBJKdhwy2p0JlW5o+Az02ICzZmvvdg= -github.com/consensys/gnark-crypto v0.12.0/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= @@ -146,63 +126,44 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/ethereum/go-ethereum v1.13.2 h1:g9mCpfPWqCA1OL4e6C98PeVttb0HadfBRuKTGvMnOvw= github.com/ethereum/go-ethereum v1.13.2/go.mod h1:gkQ5Ygi64ZBh9M/4iXY1R8WqoNCx1Ey0CkYn2BD4/fw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= +github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/gizak/termui/v3 v3.1.0 h1:ZZmVDgwHl7gR7elfKf1xc4IudXZ5qqfDh4wExk4Iajc= github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -235,11 +196,9 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -255,7 +214,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -285,13 +243,10 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -305,47 +260,26 @@ github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedib0t/go-pretty/v6 v6.4.8 h1:HiNzyMSEpsBaduKhmK+CwcpulEeBrTmxutz4oX/oWkg= github.com/jedib0t/go-pretty/v6 v6.4.8/go.mod h1:Ndk3ase2CkQbXLLNf5QDHoYb6J9WtVfmHZu9n8rk2xs= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= -github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= -github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= -github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= -github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -358,23 +292,16 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg= github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= @@ -384,20 +311,14 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= -github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -405,9 +326,6 @@ github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8oh github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= @@ -424,9 +342,6 @@ github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7B github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d h1:x3S6kxmy49zXVVyhcnrFqxvNVCBPb2KZ9hV2RBdS840= github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= @@ -438,7 +353,6 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= @@ -446,13 +360,11 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= @@ -480,42 +392,28 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= github.com/schollz/progressbar/v3 v3.13.1/go.mod h1:xvrbki8kfT1fzWzBT/UZd9L6GA+jdL7HAgq2RFnO6fQ= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= @@ -524,7 +422,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -549,28 +446,16 @@ github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJ github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -587,11 +472,9 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -639,11 +522,9 @@ golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -651,7 +532,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -703,18 +583,14 @@ golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -744,7 +620,6 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -778,15 +653,11 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -867,7 +738,6 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -910,7 +780,6 @@ google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1: google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -945,16 +814,12 @@ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= From 840abc328e2ad57485a5ef5d67c98ff97a29488f Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Thu, 9 Nov 2023 10:40:54 -0500 Subject: [PATCH 4/7] chore: renaming --- README.md | 4 +- .../leveldbbench.go => dbbench/dbbench.go} | 14 +- cmd/{leveldbbench => dbbench}/usage.md | 2 +- cmd/root.go | 4 +- doc/polycli.md | 4 +- doc/polycli_dbbench.md | 180 ++++++++++++++++++ 6 files changed, 194 insertions(+), 14 deletions(-) rename cmd/{leveldbbench/leveldbbench.go => dbbench/dbbench.go} (98%) rename cmd/{leveldbbench => dbbench}/usage.md (98%) create mode 100644 doc/polycli_dbbench.md diff --git a/README.md b/README.md index ca5ed170..886128d8 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ Note: Do not modify this section! It is auto-generated by `cobra` using `make ge - [polycli abi](doc/polycli_abi.md) - Parse an ABI and print the encoded signatures. +- [polycli dbbench](doc/polycli_dbbench.md) - Perform a level/pebble db benchmark + - [polycli dumpblocks](doc/polycli_dumpblocks.md) - Export a range of blocks from a JSON-RPC endpoint. - [polycli enr](doc/polycli_enr.md) - Convert between ENR and Enode format @@ -50,8 +52,6 @@ Note: Do not modify this section! It is auto-generated by `cobra` using `make ge - [polycli hash](doc/polycli_hash.md) - Provide common crypto hashing functions. -- [polycli leveldbbench](doc/polycli_leveldbbench.md) - Perform a level db benchmark - - [polycli loadtest](doc/polycli_loadtest.md) - Run a generic load test against an Eth/EVM style JSON-RPC endpoint. - [polycli metrics-to-dash](doc/polycli_metrics-to-dash.md) - Create a dashboard from an Openmetrics / Prometheus response. diff --git a/cmd/leveldbbench/leveldbbench.go b/cmd/dbbench/dbbench.go similarity index 98% rename from cmd/leveldbbench/leveldbbench.go rename to cmd/dbbench/dbbench.go index 048ae303..0c06630a 100644 --- a/cmd/leveldbbench/leveldbbench.go +++ b/cmd/dbbench/dbbench.go @@ -1,4 +1,4 @@ -package leveldbbench +package dbbench import ( "context" @@ -281,12 +281,12 @@ func NewTestResult(startTime, endTime time.Time, desc string, opCount uint64) *T return tr } -var LevelDBBenchCmd = &cobra.Command{ - Use: "leveldbbench [flags]", - Short: "Perform a level db benchmark", +var DBBenchCmd = &cobra.Command{ + Use: "dbbench [flags]", + Short: "Perform a level/pebble db benchmark", Long: usage, RunE: func(cmd *cobra.Command, args []string) error { - log.Info().Msg("Starting level db test") + log.Info().Msg("Starting db test") var kvdb KeyValueDB var err error switch *dbMode { @@ -534,7 +534,7 @@ benchLoop: _, err := db.Get(tmpKey) keyLock.Unlock() if err != nil { - log.Error().Str("key", hex.EncodeToString(tmpKey)).Err(err).Msg("Level db random read error") + log.Error().Str("key", hex.EncodeToString(tmpKey)).Err(err).Msg("db random read error") } wg.Done() <-pool @@ -755,7 +755,7 @@ func parseRawSizeDistribution(dist string) (*IODistribution, error) { } func init() { - flagSet := LevelDBBenchCmd.PersistentFlags() + flagSet := DBBenchCmd.PersistentFlags() writeLimit = flagSet.Uint64("write-limit", 1000000, "The number of entries to write in the db") readLimit = flagSet.Uint64("read-limit", 10000000, "the number of reads will attempt to complete in a given test") overwriteCount = flagSet.Uint64("overwrite-count", 5, "the number of times to overwrite the data") diff --git a/cmd/leveldbbench/usage.md b/cmd/dbbench/usage.md similarity index 98% rename from cmd/leveldbbench/usage.md rename to cmd/dbbench/usage.md index 0bbc5b33..f0c994aa 100644 --- a/cmd/leveldbbench/usage.md +++ b/cmd/dbbench/usage.md @@ -2,7 +2,7 @@ This command is meant to give us a sense of the system level performance for leveldb: ```bash -go run main.go leveldbbench --degree-of-parallelism 2 | jq '.' > result.json +go run main.go dbbench --degree-of-parallelism 2 | jq '.' > result.json ``` In many cases, we'll want to emulate the performance characteristics diff --git a/cmd/root.go b/cmd/root.go index 8d385dc8..6692e490 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "github.com/maticnetwork/polygon-cli/cmd/dbbench" "os" "github.com/maticnetwork/polygon-cli/cmd/fork" @@ -17,7 +18,6 @@ import ( "github.com/maticnetwork/polygon-cli/cmd/dumpblocks" "github.com/maticnetwork/polygon-cli/cmd/enr" "github.com/maticnetwork/polygon-cli/cmd/hash" - "github.com/maticnetwork/polygon-cli/cmd/leveldbbench" "github.com/maticnetwork/polygon-cli/cmd/loadtest" "github.com/maticnetwork/polygon-cli/cmd/metricsToDash" "github.com/maticnetwork/polygon-cli/cmd/mnemonic" @@ -123,7 +123,7 @@ func NewPolycliCommand() *cobra.Command { fork.ForkCmd, hash.HashCmd, enr.ENRCmd, - leveldbbench.LevelDBBenchCmd, + dbbench.DBBenchCmd, loadtest.LoadtestCmd, metricsToDash.MetricsToDashCmd, mnemonic.MnemonicCmd, diff --git a/doc/polycli.md b/doc/polycli.md index e32ea90c..c5047876 100644 --- a/doc/polycli.md +++ b/doc/polycli.md @@ -36,6 +36,8 @@ Polycli is a collection of tools that are meant to be useful while building, tes - [polycli abi](polycli_abi.md) - Parse an ABI and print the encoded signatures. +- [polycli dbbench](polycli_dbbench.md) - Perform a level/pebble db benchmark + - [polycli dumpblocks](polycli_dumpblocks.md) - Export a range of blocks from a JSON-RPC endpoint. - [polycli enr](polycli_enr.md) - Convert between ENR and Enode format @@ -44,8 +46,6 @@ Polycli is a collection of tools that are meant to be useful while building, tes - [polycli hash](polycli_hash.md) - Provide common crypto hashing functions. -- [polycli leveldbbench](polycli_leveldbbench.md) - Perform a level db benchmark - - [polycli loadtest](polycli_loadtest.md) - Run a generic load test against an Eth/EVM style JSON-RPC endpoint. - [polycli metrics-to-dash](polycli_metrics-to-dash.md) - Create a dashboard from an Openmetrics / Prometheus response. diff --git a/doc/polycli_dbbench.md b/doc/polycli_dbbench.md new file mode 100644 index 00000000..845e89ba --- /dev/null +++ b/doc/polycli_dbbench.md @@ -0,0 +1,180 @@ +# `polycli dbbench` + +> Auto-generated documentation. + +## Table of Contents + +- [Description](#description) +- [Usage](#usage) +- [Flags](#flags) +- [See Also](#see-also) + +## Description + +Perform a level/pebble db benchmark + +```bash +polycli dbbench [flags] +``` + +## Usage + +This command is meant to give us a sense of the system level +performance for leveldb: + +```bash +go run main.go leveldbbench --degree-of-parallelism 2 | jq '.' > result.json +``` + +In many cases, we'll want to emulate the performance characteristics +of `bor` or `geth`. This is the basic IO pattern when `bor` is in sync: + +```text +Process Name = bor + Kbytes : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 10239 |**************** | + 8 -> 15 : 25370 |****************************************| + 16 -> 31 : 7082 |*********** | + 32 -> 63 : 1241 |* | + 64 -> 127 : 58 | | + 128 -> 255 : 11 | | +``` + +This is the IO pattern when `bor` is getting in sync. + +```text +Process Name = bor + Kbytes : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 23089 |************* | + 8 -> 15 : 70350 |****************************************| + 16 -> 31 : 11790 |****** | + 32 -> 63 : 1193 | | + 64 -> 127 : 204 | | + 128 -> 255 : 271 | | + 256 -> 511 : 1381 | | +``` + +This gives us a sense of the relative size of the IOPs. We'd also want +to get a sense of the read/write ratio. This is some sample data from +bor while syncing: + +```text +12:48:08 loadavg: 5.86 6.22 7.13 16/451 56297 + +READS WRITES R_Kb W_Kb PATH +307558 1277 4339783 30488 /var/lib/bor/data/bor/chaindata/ + +12:48:38 loadavg: 6.46 6.32 7.14 3/452 56298 + +READS WRITES R_Kb W_Kb PATH +309904 946 4399349 26051 /var/lib/bor/data/bor/chaindata/ + +``` + +During the same period of time this is what the IO looks like from a +node that's in sync. + +```text +12:48:05 loadavg: 1.55 1.85 2.03 18/416 88371 + +READS WRITES R_Kb W_Kb PATH +124530 488 1437436 12165 /var/lib/bor/data/bor/chaindata/ + +12:48:35 loadavg: 4.14 2.44 2.22 1/416 88371 + +READS WRITES R_Kb W_Kb PATH +81282 215 823530 4610 /var/lib/bor/data/bor/chaindata/ + +``` + +If we want to simulate `bor` behavior, we can leverage this data to +configure the leveldb benchmark tool. + + +| Syncing | Reads | Writes | Read (kb) | Write (kb) | RW Ratio | kb/r | kb/w | +|---------|---------|--------|-----------|------------|----------|------|------| +| TRUE | 307,558 | 1,277 | 4,339,783 | 30,488 | 241 | 14.1 | 23.9 | +| TRUE | 309,904 | 946 | 7,399,349 | 26,051 | 328 | 23.9 | 27.5 | +| FALSE | 124,530 | 488 | 1,437,436 | 12,165 | 255 | 11.5 | 24.9 | +| FALSE | 51,282 | 215 | 823,530 | 4,610 | 239 | 16.1 | 21.4 | + +The number of IOps while syncing is a lot higher. The only other +obvious difference is that the IOp size is a bit larger while syncing +as well. + +- Syncing + - Read Write Ratio - 275:1 + - Small IOp - 10kb + - Large IOp - 256kb + - Small Large Ratio - 10:1 +- Synced + - Read Write Ratio - 250:1 + - Small IOp - 10kb + - Larg IOp - 32kb + - Small Large Ratio - 10:1 + +```text +7:58PM DBG buckets bucket=0 count=9559791821 end=1 start=0 +7:58PM DBG buckets bucket=1 count=141033 end=3 start=2 +7:58PM DBG buckets bucket=2 count=92899 end=7 start=4 +7:58PM DBG buckets bucket=3 count=256655 end=15 start=8 +7:58PM DBG buckets bucket=4 count=262589 end=31 start=16 +7:58PM DBG buckets bucket=5 count=191353 end=63 start=32 +7:58PM DBG buckets bucket=6 count=99519 end=127 start=64 +7:58PM DBG buckets bucket=7 count=74161 end=255 start=128 +7:58PM DBG buckets bucket=8 count=17426 end=511 start=256 +7:58PM DBG buckets bucket=9 count=692 end=1023 start=512 +7:58PM DBG buckets bucket=10 count=989 end=2047 start=1024 +7:58PM DBG buckets bucket=13 count=1 end=16383 start=8192 +7:58PM INF recorded result desc="full scan" testDuration=10381196.479925 +7:58PM DBG recorded result result={"Description":"full scan","EndTime":"2023-07-17T19:58:05.396257711Z","OpCount":9557081144,"OpRate":920614.609547304,"StartTime":"2023-07-17T17:05:04.199777776Z","Stats":{"AliveIterators":0,"AliveSnapshots":0,"BlockCache":{"Buckets":2048,"DelCount":259134854,"GrowCount":9,"HitCount":4,"MissCount":262147633,"Nodes":33294,"SetCount":259168148,"ShrinkCount":2,"Size":268427343},"BlockCacheSize":268427343,"FileCache":{"Buckets":16,"DelCount":536037,"GrowCount":0,"HitCount":2,"MissCount":536537,"Nodes":500,"SetCount":536537,"ShrinkCount":0,"Size":500},"IORead":1092651461848,"IOWrite":13032122717,"Level0Comp":0,"LevelDurations":[0,0,546151937,15675194130,100457643600,40581548153,0],"LevelRead":[0,0,45189458,1233235440,8351239571,3376108236,0],"LevelSizes":[0,103263963,1048356844,10484866671,104856767171,180600915234,797187827055],"LevelTablesCounts":[0,51,665,7066,53522,95777,371946],"LevelWrite":[0,0,45159786,1230799439,8328970986,3371359447,0],"MemComp":0,"NonLevel0Comp":1433,"OpenedTablesCount":500,"SeekComp":0,"WriteDelayCount":0,"WriteDelayDuration":0,"WritePaused":false},"TestDuration":10381196479925,"ValueDist":null} + +``` + +## Flags + +```bash + --cache-size int the number of megabytes to use as our internal cache size (default 512) + --db-mode string The mode to use: leveldb or pebbledb (default "leveldb") + --db-path string the path of the database that we'll use for testing (default "_benchmark_db") + --degree-of-parallelism uint8 The number of concurrent goroutines we'll use (default 2) + --dont-fill-read-cache if false, then random reads will be cached + --full-scan-mode if true, the application will scan the full database as fast as possible and print a summary + --handles int defines the capacity of the open files caching. Use -1 for zero, this has same effect as specifying NoCacher to OpenFilesCacher. (default 500) + -h, --help help for dbbench + --key-size uint The byte length of the keys that we'll use (default 32) + --nil-read-opts if true we'll use nil read opt (this is what geth/bor does) + --no-merge-write allows disabling write merge + --overwrite-count uint the number of times to overwrite the data (default 5) + --read-limit uint the number of reads will attempt to complete in a given test (default 10000000) + --read-only if true, we'll skip all the write operations and open the DB in read only mode + --read-strict if true the rand reads will be made in strict mode + --sequential-reads if true we'll perform reads sequentially + --sequential-writes if true we'll perform writes in somewhat sequential manner + --size-distribution string the size distribution to use while testing (default "0-1:2347864,2-3:804394856,4-7:541267689,8-15:738828593,16-31:261122372,32-63:1063470933,64-127:3584745195,128-255:1605760137,256-511:316074206,512-1023:312887514,1024-2047:328894149,2048-4095:141180,4096-8191:92789,8192-16383:256060,16384-32767:261806,32768-65535:191032,65536-131071:99715,131072-262143:73782,262144-524287:17552,524288-1048575:717,1048576-2097151:995,2097152-4194303:1,8388608-16777215:1") + --sync-writes sync each write + --write-limit uint The number of entries to write in the db (default 1000000) + --write-zero if true, we'll write 0s rather than random data +``` + +The command also inherits flags from parent commands. + +```bash + --config string config file (default is $HOME/.polygon-cli.yaml) + --pretty-logs Should logs be in pretty format or JSON (default true) + -v, --verbosity int 0 - Silent + 100 Fatal + 200 Error + 300 Warning + 400 Info + 500 Debug + 600 Trace (default 400) +``` + +## See also + +- [polycli](polycli.md) - A Swiss Army knife of blockchain tools. From 2921f7f23f78273f78da22d208ca4941ef1cc6b2 Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Thu, 9 Nov 2023 10:57:32 -0500 Subject: [PATCH 5/7] fix: lints --- cmd/dbbench/dbbench.go | 4 ++-- doc/polycli_dbbench.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/dbbench/dbbench.go b/cmd/dbbench/dbbench.go index 0c06630a..31e71e4a 100644 --- a/cmd/dbbench/dbbench.go +++ b/cmd/dbbench/dbbench.go @@ -139,7 +139,7 @@ type ( } WrappedPebbleIterator struct { *pebble.Iterator - sync.Mutex + *sync.Mutex } ) @@ -192,7 +192,7 @@ func (p *PebbleDBWrapper) NewIterator() iterator.Iterator { UseL6Filters: false, } iter := p.handle.NewIter(&io) - wrappedIter := WrappedPebbleIterator{iter, p.Mutex} + wrappedIter := WrappedPebbleIterator{iter, &p.Mutex} return &wrappedIter } func (w *WrappedPebbleIterator) Seek(key []byte) bool { diff --git a/doc/polycli_dbbench.md b/doc/polycli_dbbench.md index 845e89ba..ed0f7fb7 100644 --- a/doc/polycli_dbbench.md +++ b/doc/polycli_dbbench.md @@ -23,7 +23,7 @@ This command is meant to give us a sense of the system level performance for leveldb: ```bash -go run main.go leveldbbench --degree-of-parallelism 2 | jq '.' > result.json +go run main.go dbbench --degree-of-parallelism 2 | jq '.' > result.json ``` In many cases, we'll want to emulate the performance characteristics From c28dcd9d00828b80597630648087799147f25092 Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Thu, 9 Nov 2023 11:07:44 -0500 Subject: [PATCH 6/7] fix: lint --- cmd/dbbench/dbbench.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/dbbench/dbbench.go b/cmd/dbbench/dbbench.go index 31e71e4a..95f83ed5 100644 --- a/cmd/dbbench/dbbench.go +++ b/cmd/dbbench/dbbench.go @@ -200,7 +200,6 @@ func (w *WrappedPebbleIterator) Seek(key []byte) bool { return w.SeekGE(key) } func (w *WrappedPebbleIterator) SetReleaser(releaser util.Releaser) { - return } func (w *WrappedPebbleIterator) Release() { w.Iterator.Close() From 2b5567bc08d78a00bc3b8a557e33aee0924b114c Mon Sep 17 00:00:00 2001 From: John Hilliard Date: Fri, 10 Nov 2023 07:29:59 -0500 Subject: [PATCH 7/7] fix: pr comments --- cmd/dbbench/dbbench.go | 144 ---------------------------------------- cmd/dbbench/leveldb.go | 68 +++++++++++++++++++ cmd/dbbench/pebbledb.go | 95 ++++++++++++++++++++++++++ cmd/dbbench/usage.md | 2 +- doc/polycli_dbbench.md | 2 +- 5 files changed, 165 insertions(+), 146 deletions(-) create mode 100644 cmd/dbbench/leveldb.go create mode 100644 cmd/dbbench/pebbledb.go diff --git a/cmd/dbbench/dbbench.go b/cmd/dbbench/dbbench.go index 95f83ed5..51e172da 100644 --- a/cmd/dbbench/dbbench.go +++ b/cmd/dbbench/dbbench.go @@ -8,14 +8,11 @@ import ( "encoding/hex" "encoding/json" "fmt" - "github.com/cockroachdb/pebble" - "github.com/cockroachdb/pebble/bloom" "math" "math/bits" "math/rand" "os" "regexp" - "runtime" "sort" "strconv" "strings" @@ -25,11 +22,7 @@ import ( "github.com/rs/zerolog/log" progressbar "github.com/schollz/progressbar/v3" "github.com/spf13/cobra" - leveldb "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/filter" "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" ) var ( @@ -127,145 +120,8 @@ type ( Get([]byte) ([]byte, error) Put([]byte, []byte) error } - LevelDBWrapper struct { - ro *opt.ReadOptions - wo *opt.WriteOptions - handle *leveldb.DB - } - PebbleDBWrapper struct { - handle *pebble.DB - wo *pebble.WriteOptions - sync.Mutex - } - WrappedPebbleIterator struct { - *pebble.Iterator - *sync.Mutex - } ) -func NewWrappedPebbleDB() (*PebbleDBWrapper, error) { - memTableLimit := 2 - memTableSize := *cacheSize * 1024 * 1024 / 2 / memTableLimit - opt := &pebble.Options{ - Cache: pebble.NewCache(int64(*cacheSize * 1024 * 1024)), - MemTableSize: memTableSize, - MemTableStopWritesThreshold: memTableLimit, - MaxConcurrentCompactions: func() int { return runtime.NumCPU() }, - Levels: []pebble.LevelOptions{ - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - }, - ReadOnly: *readOnly || *fullScan, - } - p, err := pebble.Open(*dbPath, opt) - if err != nil { - return nil, err - } - db := new(PebbleDBWrapper) - db.handle = p - db.wo = &pebble.WriteOptions{Sync: *syncWrites} - return db, err -} - -func (p *PebbleDBWrapper) Close() error { - return p.handle.Close() -} -func (p *PebbleDBWrapper) Compact() error { - // this is a hack to ideally get a key that's larger than most of the other keys - return p.handle.Compact([]byte{0}, []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, true) -} -func (p *PebbleDBWrapper) NewIterator() iterator.Iterator { - io := pebble.IterOptions{ - LowerBound: nil, - UpperBound: nil, - TableFilter: nil, - PointKeyFilters: nil, - RangeKeyFilters: nil, - KeyTypes: 0, - RangeKeyMasking: pebble.RangeKeyMasking{}, - OnlyReadGuaranteedDurable: false, - UseL6Filters: false, - } - iter := p.handle.NewIter(&io) - wrappedIter := WrappedPebbleIterator{iter, &p.Mutex} - return &wrappedIter -} -func (w *WrappedPebbleIterator) Seek(key []byte) bool { - // SeekGE has a different name but has the same logic as the IteratorSeeker `Seek` method - return w.SeekGE(key) -} -func (w *WrappedPebbleIterator) SetReleaser(releaser util.Releaser) { -} -func (w *WrappedPebbleIterator) Release() { - w.Iterator.Close() -} -func (p *PebbleDBWrapper) Get(key []byte) ([]byte, error) { - resp, closer, err := p.handle.Get(key) - if err != nil { - return nil, err - } - closer.Close() - return resp, nil -} -func (p *PebbleDBWrapper) Put(key []byte, value []byte) error { - return p.handle.Set(key, value, p.wo) -} -func NewWrappedLevelDB() (*LevelDBWrapper, error) { - db, err := leveldb.OpenFile(*dbPath, &opt.Options{ - Filter: filter.NewBloomFilter(10), - DisableSeeksCompaction: true, - OpenFilesCacheCapacity: *openFilesCacheCapacity, - BlockCacheCapacity: *cacheSize / 2 * opt.MiB, - WriteBuffer: *cacheSize / 4 * opt.MiB, - // if we've disabled writes, or we're doing a full scan, we should open the database in read only mode - ReadOnly: *readOnly || *fullScan, - }) - if err != nil { - return nil, err - } - - wo := &opt.WriteOptions{ - NoWriteMerge: *noWriteMerge, - Sync: *syncWrites, - } - ro := &opt.ReadOptions{ - DontFillCache: *dontFillCache, - } - if *readStrict { - ro.Strict = opt.StrictAll - } else { - ro.Strict = opt.DefaultStrict - } - if *nilReadOptions { - ro = nil - } - wrapper := new(LevelDBWrapper) - wrapper.handle = db - wrapper.wo = wo - wrapper.ro = ro - return wrapper, nil -} -func (l *LevelDBWrapper) Close() error { - return l.handle.Close() -} -func (l *LevelDBWrapper) Compact() error { - return l.handle.CompactRange(util.Range{Start: nil, Limit: nil}) -} -func (l *LevelDBWrapper) NewIterator() iterator.Iterator { - return l.handle.NewIterator(nil, nil) -} -func (l *LevelDBWrapper) Get(key []byte) ([]byte, error) { - return l.handle.Get(key, l.ro) -} -func (l *LevelDBWrapper) Put(key []byte, value []byte) error { - return l.handle.Put(key, value, l.wo) -} - func NewTestResult(startTime, endTime time.Time, desc string, opCount uint64) *TestResult { tr := new(TestResult) tr.StartTime = startTime diff --git a/cmd/dbbench/leveldb.go b/cmd/dbbench/leveldb.go new file mode 100644 index 00000000..f7f0197e --- /dev/null +++ b/cmd/dbbench/leveldb.go @@ -0,0 +1,68 @@ +package dbbench + +import ( + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/filter" + "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/opt" + "github.com/syndtr/goleveldb/leveldb/util" +) + +type ( + LevelDBWrapper struct { + ro *opt.ReadOptions + wo *opt.WriteOptions + handle *leveldb.DB + } +) + +func NewWrappedLevelDB() (*LevelDBWrapper, error) { + db, err := leveldb.OpenFile(*dbPath, &opt.Options{ + Filter: filter.NewBloomFilter(10), + DisableSeeksCompaction: true, + OpenFilesCacheCapacity: *openFilesCacheCapacity, + BlockCacheCapacity: *cacheSize / 2 * opt.MiB, + WriteBuffer: *cacheSize / 4 * opt.MiB, + // if we've disabled writes, or we're doing a full scan, we should open the database in read only mode + ReadOnly: *readOnly || *fullScan, + }) + if err != nil { + return nil, err + } + + wo := &opt.WriteOptions{ + NoWriteMerge: *noWriteMerge, + Sync: *syncWrites, + } + ro := &opt.ReadOptions{ + DontFillCache: *dontFillCache, + } + if *readStrict { + ro.Strict = opt.StrictAll + } else { + ro.Strict = opt.DefaultStrict + } + if *nilReadOptions { + ro = nil + } + wrapper := new(LevelDBWrapper) + wrapper.handle = db + wrapper.wo = wo + wrapper.ro = ro + return wrapper, nil +} +func (l *LevelDBWrapper) Close() error { + return l.handle.Close() +} +func (l *LevelDBWrapper) Compact() error { + return l.handle.CompactRange(util.Range{Start: nil, Limit: nil}) +} +func (l *LevelDBWrapper) NewIterator() iterator.Iterator { + return l.handle.NewIterator(nil, nil) +} +func (l *LevelDBWrapper) Get(key []byte) ([]byte, error) { + return l.handle.Get(key, l.ro) +} +func (l *LevelDBWrapper) Put(key []byte, value []byte) error { + return l.handle.Put(key, value, l.wo) +} diff --git a/cmd/dbbench/pebbledb.go b/cmd/dbbench/pebbledb.go new file mode 100644 index 00000000..496ecd32 --- /dev/null +++ b/cmd/dbbench/pebbledb.go @@ -0,0 +1,95 @@ +package dbbench + +import ( + "github.com/cockroachdb/pebble" + "github.com/cockroachdb/pebble/bloom" + "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/util" + "runtime" + "sync" +) + +type ( + PebbleDBWrapper struct { + handle *pebble.DB + wo *pebble.WriteOptions + sync.Mutex + } + WrappedPebbleIterator struct { + *pebble.Iterator + *sync.Mutex + } +) + +func NewWrappedPebbleDB() (*PebbleDBWrapper, error) { + memTableLimit := 2 + memTableSize := *cacheSize * 1024 * 1024 / 2 / memTableLimit + opt := &pebble.Options{ + Cache: pebble.NewCache(int64(*cacheSize * 1024 * 1024)), + MemTableSize: memTableSize, + MemTableStopWritesThreshold: memTableLimit, + MaxConcurrentCompactions: func() int { return runtime.NumCPU() }, + Levels: []pebble.LevelOptions{ + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, + }, + ReadOnly: *readOnly || *fullScan, + } + p, err := pebble.Open(*dbPath, opt) + if err != nil { + return nil, err + } + db := new(PebbleDBWrapper) + db.handle = p + db.wo = &pebble.WriteOptions{Sync: *syncWrites} + return db, err +} + +func (p *PebbleDBWrapper) Close() error { + return p.handle.Close() +} +func (p *PebbleDBWrapper) Compact() error { + // this is a hack to ideally get a key that's larger than most of the other keys + return p.handle.Compact([]byte{0}, []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, true) +} +func (p *PebbleDBWrapper) NewIterator() iterator.Iterator { + io := pebble.IterOptions{ + LowerBound: nil, + UpperBound: nil, + TableFilter: nil, + PointKeyFilters: nil, + RangeKeyFilters: nil, + KeyTypes: 0, + RangeKeyMasking: pebble.RangeKeyMasking{}, + OnlyReadGuaranteedDurable: false, + UseL6Filters: false, + } + iter := p.handle.NewIter(&io) + wrappedIter := WrappedPebbleIterator{iter, &p.Mutex} + return &wrappedIter +} +func (w *WrappedPebbleIterator) Seek(key []byte) bool { + // SeekGE has a different name but has the same logic as the IteratorSeeker `Seek` method + return w.SeekGE(key) +} +func (w *WrappedPebbleIterator) SetReleaser(releaser util.Releaser) { +} +func (w *WrappedPebbleIterator) Release() { + w.Iterator.Close() +} +func (p *PebbleDBWrapper) Get(key []byte) ([]byte, error) { + resp, closer, err := p.handle.Get(key) + if err != nil { + return nil, err + } + closer.Close() + return resp, nil +} +func (p *PebbleDBWrapper) Put(key []byte, value []byte) error { + return p.handle.Set(key, value, p.wo) +} diff --git a/cmd/dbbench/usage.md b/cmd/dbbench/usage.md index f0c994aa..0dc98dd6 100644 --- a/cmd/dbbench/usage.md +++ b/cmd/dbbench/usage.md @@ -2,7 +2,7 @@ This command is meant to give us a sense of the system level performance for leveldb: ```bash -go run main.go dbbench --degree-of-parallelism 2 | jq '.' > result.json +polycli dbbench --degree-of-parallelism 2 | jq '.' > result.json ``` In many cases, we'll want to emulate the performance characteristics diff --git a/doc/polycli_dbbench.md b/doc/polycli_dbbench.md index ed0f7fb7..1ac0f4f3 100644 --- a/doc/polycli_dbbench.md +++ b/doc/polycli_dbbench.md @@ -23,7 +23,7 @@ This command is meant to give us a sense of the system level performance for leveldb: ```bash -go run main.go dbbench --degree-of-parallelism 2 | jq '.' > result.json +polycli dbbench --degree-of-parallelism 2 | jq '.' > result.json ``` In many cases, we'll want to emulate the performance characteristics