From 8bcfd8df0aa314d5f3723750562ec7f6acf6d9f1 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Mon, 25 Jul 2022 02:14:43 +0700 Subject: [PATCH 01/21] merge https://github.com/notional-labs/tm-db/tree/mainline/pebble --- .github/workflows/gaia.yml | 58 +++++ backend_test.go | 1 - badger_db.go | 2 +- boltdb.go | 5 +- boltdb_batch.go | 1 + boltdb_iterator.go | 1 + boltdb_test.go | 1 + cleveldb.go | 1 + cleveldb_batch.go | 1 + cleveldb_iterator.go | 8 +- cleveldb_test.go | 5 +- db.go | 10 +- go.mod | 12 +- go.sum | 149 +++++++++++++ goleveldb_iterator.go | 7 +- makefile | 5 + pebble.go | 418 +++++++++++++++++++++++++++++++++++++ pebble_test.go | 50 +++++ prefixdb_iterator.go | 1 - rocksdb.go | 1 + rocksdb_batch.go | 1 + rocksdb_iterator.go | 8 +- rocksdb_test.go | 1 + 23 files changed, 724 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/gaia.yml create mode 100644 pebble.go create mode 100644 pebble_test.go diff --git a/.github/workflows/gaia.yml b/.github/workflows/gaia.yml new file mode 100644 index 000000000..b1c5ef517 --- /dev/null +++ b/.github/workflows/gaia.yml @@ -0,0 +1,58 @@ +# This workflow builds and pushes a new version of the build container image +# when the tools directory changes on master. Edit tools/Dockerfile. +# +# This workflow does not push a new image until it is merged, so tests that +# depend on changes in this image will not pass until this workflow succeeds. +# For that reason, changes here should be done in a separate PR in advance of +# work that depends on them. + +name: State Sync Gaia +on: + pull_request: + push: + + +jobs: + build: + runs-on: ubuntu-latest + container: ghcr.io/faddat/gaia + continue-on-error: true + env: + INTERVAL: 1000 + GAIAD_STATESYNC_ENABLE: true + GAIAD_P2P_MAX_NUM_OUTBOUND_PEERS: 200 + GAIAD_P2P_SEEDS: "bf8328b66dceb4987e5cd94430af66045e59899f@public-seed.cosmos.vitwit.com:26656,cfd785a4224c7940e9a10f6c1ab24c343e923bec@164.68.107.188:26656,d72b3011ed46d783e369fdf8ae2055b99a1e5074@173.249.50.25:26656,ba3bacc714817218562f743178228f23678b2873@public-seed-node.cosmoshub.certus.one:26656,3c7cad4154967a294b3ba1cc752e40e8779640ad@84.201.128.115:26656,366ac852255c3ac8de17e11ae9ec814b8c68bddb@51.15.94.196:26656" + GAIAD_STATESYNC_RPC_SERVERS: "https://cosmoshub.validator.network:443,https://cosmoshub.validator.network:443" + GOPATH: /go + + + + + strategy: + matrix: + database: [rocksdb, pebbledb, boltdb, badgerdb, goleveldb, cleveldb] + + steps: + - run: git config --global --add safe.directory /__w/tendermint/tm-db + - uses: actions/checkout@v3 + - name: state sync gaia with ${{ matrix.database }} + run: | + cd .. + git clone https://github.com/cosmos/gaia + cd gaia + go mod edit -replace github.com/tendermint/tm-db=../tm-db + go mod tidy + go install -ldflags '-w -s -X github.com/cosmos/cosmos-sdk/types.DBBackend=${{ matrix.database }}' -tags ${{ matrix.database }} ./... + export LATEST_HEIGHT=$(curl -s https://cosmoshub.validator.network/block | jq -r .result.block.header.height); + export BLOCK_HEIGHT=$(($LATEST_HEIGHT-$INTERVAL)) + export TRUST_HASH=$(curl -s "https://cosmoshub.validator.network/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) + export GAIAD_STATESYNC_TRUST_HEIGHT=$BLOCK_HEIGHT + export GAIAD_STATESYNC_TRUST_HASH=$TRUST_HASH + export PATH=$PATH:/go/bin + echo "TRUST HEIGHT: $BLOCK_HEIGHT" + echo "TRUST HASH: $TRUST_HASH" + gaiad init gaia-matrix + cp /genesis.json ~/.gaia/config/genesis.json + gaiad start --x-crisis-skip-assert-invariants --db_backend ${{ matrix.database }} + + \ No newline at end of file diff --git a/backend_test.go b/backend_test.go index 63630beca..aecae4bf5 100644 --- a/backend_test.go +++ b/backend_test.go @@ -315,7 +315,6 @@ func testDBIterator(t *testing.T, backend BackendType) { ritr, err = db2.ReverseIterator(nil, nil) require.NoError(t, err) verifyIterator(t, ritr, nil, "reverse iterator with empty db") - } func verifyIterator(t *testing.T, itr Iterator, expected []int64, msg string) { diff --git a/badger_db.go b/badger_db.go index 193372abf..467ed3361 100644 --- a/badger_db.go +++ b/badger_db.go @@ -25,7 +25,7 @@ func NewBadgerDB(dbName, dir string) (*BadgerDB, error) { // the final directory to use for the database. path := filepath.Join(dir, dbName) - if err := os.MkdirAll(path, 0755); err != nil { + if err := os.MkdirAll(path, 0o755); err != nil { return nil, err } opts := badger.DefaultOptions(path) diff --git a/boltdb.go b/boltdb.go index 398c401a4..9cdd6e4d3 100644 --- a/boltdb.go +++ b/boltdb.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db @@ -11,9 +12,7 @@ import ( "go.etcd.io/bbolt" ) -var ( - bucket = []byte("tm") -) +var bucket = []byte("tm") func init() { registerDBCreator(BoltDBBackend, func(name, dir string) (DB, error) { diff --git a/boltdb_batch.go b/boltdb_batch.go index 390bc309b..cd22c6741 100644 --- a/boltdb_batch.go +++ b/boltdb_batch.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db diff --git a/boltdb_iterator.go b/boltdb_iterator.go index 74212c5ca..a62e2abb8 100644 --- a/boltdb_iterator.go +++ b/boltdb_iterator.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db diff --git a/boltdb_test.go b/boltdb_test.go index 0fd12bbe2..e68c85b0d 100644 --- a/boltdb_test.go +++ b/boltdb_test.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db diff --git a/cleveldb.go b/cleveldb.go index 377956deb..789673011 100644 --- a/cleveldb.go +++ b/cleveldb.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db diff --git a/cleveldb_batch.go b/cleveldb_batch.go index 132a521cb..b77bd523d 100644 --- a/cleveldb_batch.go +++ b/cleveldb_batch.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db diff --git a/cleveldb_iterator.go b/cleveldb_iterator.go index 04375d565..cf5ac1942 100644 --- a/cleveldb_iterator.go +++ b/cleveldb_iterator.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db @@ -56,7 +57,6 @@ func (itr cLevelDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr cLevelDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -75,9 +75,9 @@ func (itr cLevelDBIterator) Valid() bool { } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = itr.source.Key() + start := itr.start + end := itr.end + key := itr.source.Key() if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { itr.isInvalid = true diff --git a/cleveldb_test.go b/cleveldb_test.go index 61e2fb6ef..ff1cd736b 100644 --- a/cleveldb_test.go +++ b/cleveldb_test.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db @@ -38,7 +39,7 @@ func BenchmarkRandomReadsWrites2(b *testing.B) { val := internal[idx] idxBytes := int642Bytes(int64(idx)) valBytes := int642Bytes(int64(val)) - //fmt.Printf("Set %X -> %X\n", idxBytes, valBytes) + // fmt.Printf("Set %X -> %X\n", idxBytes, valBytes) db.Set( idxBytes, valBytes, @@ -53,7 +54,7 @@ func BenchmarkRandomReadsWrites2(b *testing.B) { if err != nil { b.Error(err) } - //fmt.Printf("Get %X -> %X\n", idxBytes, valBytes) + // fmt.Printf("Get %X -> %X\n", idxBytes, valBytes) if val == 0 { if !bytes.Equal(valBytes, nil) { b.Errorf("Expected %v for %v, got %X", diff --git a/db.go b/db.go index ef573f17e..29fe98175 100644 --- a/db.go +++ b/db.go @@ -28,13 +28,19 @@ const ( // - may be faster is some use-cases (random reads - indexer) // - use boltdb build tag (go build -tags boltdb) BoltDBBackend BackendType = "boltdb" - // RocksDBBackend represents rocksdb (uses github.com/cosmos/gorocksdb) + // RocksDBBackend represents rocksdb (uses github.com/linxGnu/grocksdb) // - EXPERIMENTAL // - requires gcc // - use rocksdb build tag (go build -tags rocksdb) RocksDBBackend BackendType = "rocksdb" - + // BadgerDBBackend represents badgerdb (uses github.com/dgraph-io/badger) + // - EXPERIMENTAL + // - use badgerdb build tag (go build -tags badgerdb) BadgerDBBackend BackendType = "badgerdb" + // PebbleDBDBBackend represents pebble (uses github.com/cockroachdb/pebble) + // - EXPERIMENTAL + // - use pebble build tag (go build -tags pebbledb) + PebbleDBBackend BackendType = "pebbledb" ) type dbCreator func(name string, dir string) (DB, error) diff --git a/go.mod b/go.mod index 1f0dd8ab9..1e89c07cb 100644 --- a/go.mod +++ b/go.mod @@ -14,12 +14,19 @@ require ( google.golang.org/grpc v1.48.0 ) -require github.com/dgraph-io/badger/v3 v3.2103.2 +require github.com/cockroachdb/pebble v0.0.0-20220421143146-8decd08cdb9d require ( + github.com/DataDog/zstd v1.4.5 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/cockroachdb/errors v1.8.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect + github.com/cockroachdb/redact v1.0.8 // indirect + github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect + github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgraph-io/badger/v3 v3.2103.2 github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect @@ -27,9 +34,12 @@ require ( github.com/golang/snappy v0.0.3 // indirect github.com/google/flatbuffers v1.12.1 // indirect github.com/klauspost/compress v1.12.3 // indirect + github.com/kr/pretty v0.1.0 // indirect + github.com/kr/text v0.1.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opencensus.io v0.22.5 // indirect + golang.org/x/exp v0.0.0-20200513190911-00229845015e // indirect golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect golang.org/x/text v0.3.3 // indirect diff --git a/go.sum b/go.sum index 0d1afaab2..456b17c71 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,22 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +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/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/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -17,6 +29,21 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= +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/pebble v0.0.0-20220421143146-8decd08cdb9d h1:rMLrmABNLB5RPEvy/lynjDL1EyCCXpcjBtCgt4D9DTs= +github.com/cockroachdb/pebble v0.0.0-20220421143146-8decd08cdb9d/go.mod h1:buxOO9GBtOcq1DiXDpIPYrmxY020K2A8lOrwno5FetU= +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/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= 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= @@ -26,32 +53,56 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +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 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= 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.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= 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/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +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/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +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/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-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/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/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/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= @@ -75,6 +126,7 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= @@ -88,35 +140,80 @@ 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.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +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/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/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +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/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/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.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +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/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +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/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +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/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +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/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/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/onsi/ginkgo v1.6.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 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= 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/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -124,6 +221,12 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +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/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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -136,16 +239,31 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 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= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +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/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/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +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/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.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= @@ -155,22 +273,35 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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-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-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc= +golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -185,14 +316,20 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20190626221950-04f50cda93cb/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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -202,6 +339,7 @@ golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210909193231-528a39cd75f3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -209,11 +347,16 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -223,17 +366,20 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1N golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +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.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= @@ -255,6 +401,9 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/goleveldb_iterator.go b/goleveldb_iterator.go index 9cf9a5e15..5341d1ac2 100644 --- a/goleveldb_iterator.go +++ b/goleveldb_iterator.go @@ -54,7 +54,6 @@ func (itr *goLevelDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr *goLevelDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -73,9 +72,9 @@ func (itr *goLevelDBIterator) Valid() bool { } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = itr.source.Key() + start := itr.start + end := itr.end + key := itr.source.Key() if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { diff --git a/makefile b/makefile index bedebc457..f8b0f064e 100644 --- a/makefile +++ b/makefile @@ -28,6 +28,11 @@ test-badgerdb: @echo "--> Running go test" @go test $(PACKAGES) -tags badgerdb -v +test-pebble: + @echo "--> Running go test" + @go test $(PACKAGES) -tags pebbledb -v + + test-all: @echo "--> Running go test" @go test $(PACKAGES) -tags cleveldb,boltdb,rocksdb,badgerdb -v diff --git a/pebble.go b/pebble.go new file mode 100644 index 000000000..2f5cb6905 --- /dev/null +++ b/pebble.go @@ -0,0 +1,418 @@ +//go:build pebbledb + +package db + +import ( + "bytes" + "fmt" + "path/filepath" + + "github.com/cockroachdb/pebble" +) + +func init() { + dbCreator := func(name string, dir string) (DB, error) { + return NewPebbleDB(name, dir) + } + registerDBCreator(PebbleDBBackend, dbCreator, false) +} + +// PebbleDB is a PebbleDB backend. +type PebbleDB struct { + db *pebble.DB +} + +var _ DB = (*PebbleDB)(nil) + +func NewPebbleDB(name string, dir string) (DB, error) { + dbPath := filepath.Join(dir, name+".db") + // cache := pebble.NewCache(1024 * 1024 * 32) + // defer cache.Unref() + opts := &pebble.Options{ + // Cache: cache, + // FormatMajorVersion: pebble.FormatNewest, + // L0CompactionThreshold: 2, + // L0StopWritesThreshold: 1000, + // LBaseMaxBytes: 64 << 20, // 64 MB + // Levels: make([]pebble.LevelOptions, 7), + // MaxConcurrentCompactions: 3, + // MaxOpenFiles: 1024, + // MemTableSize: 64 << 20, + // MemTableStopWritesThreshold: 4, + } + /* + for i := 0; i < len(opts.Levels); i++ { + l := &opts.Levels[i] + l.BlockSize = 32 << 10 // 32 KB + l.IndexBlockSize = 256 << 10 // 256 KB + l.FilterPolicy = bloom.FilterPolicy(10) + l.FilterType = pebble.TableFilter + if i > 0 { + l.TargetFileSize = opts.Levels[i-1].TargetFileSize * 2 + } + l.EnsureDefaults() + } + */ + // opts.Levels[6].FilterPolicy = nil + // opts.FlushSplitBytes = opts.Levels[0].TargetFileSize + + opts.EnsureDefaults() + + p, err := pebble.Open(dbPath, opts) + if err != nil { + return nil, err + } + return &PebbleDB{ + db: p, + }, err +} + +// Get implements DB. +func (db *PebbleDB) Get(key []byte) ([]byte, error) { + if len(key) == 0 { + return nil, errKeyEmpty + } + res, closer, err := db.db.Get(key) + if err != nil { + return res, nil + } + closer.Close() + return res, nil +} + +// Has implements DB. +func (db *PebbleDB) Has(key []byte) (bool, error) { + if len(key) == 0 { + return false, errKeyEmpty + } + bytes, err := db.Get(key) + if err != nil { + return false, err + } + return bytes != nil, nil +} + +// Set implements DB. +func (db *PebbleDB) Set(key []byte, value []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + if value == nil { + return errValueNil + } + err := db.db.Set(key, value, pebble.NoSync) + if err != nil { + return err + } + return nil +} + +// SetSync implements DB. +func (db *PebbleDB) SetSync(key []byte, value []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + if value == nil { + return errValueNil + } + err := db.db.Set(key, value, pebble.Sync) + if err != nil { + return err + } + return nil +} + +// Delete implements DB. +func (db *PebbleDB) Delete(key []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + err := db.db.Delete(key, pebble.NoSync) + if err != nil { + return err + } + return nil +} + +// DeleteSync implements DB. +func (db PebbleDB) DeleteSync(key []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + err := db.db.Delete(key, pebble.Sync) + if err != nil { + return nil + } + return nil +} + +func (db *PebbleDB) DB() *pebble.DB { + return db.db +} + +// Close implements DB. +func (db PebbleDB) Close() error { + db.db.Close() + return nil +} + +// Print implements DB. +func (db *PebbleDB) Print() error { + itr, err := db.Iterator(nil, nil) + if err != nil { + return err + } + defer itr.Close() + for ; itr.Valid(); itr.Next() { + key := itr.Key() + value := itr.Value() + fmt.Printf("[%X]:\t[%X]\n", key, value) + } + return nil +} + +// Stats implements DB. +func (db *PebbleDB) Stats() map[string]string { + /* + keys := []string{"rocksdb.stats"} + stats := make(map[string]string, len(keys)) + for _, key := range keys { + stats[key] = db.(key) + } + */ + return nil +} + +// NewBatch implements DB. +func (db *PebbleDB) NewBatch() Batch { + return newPebbleDBBatch(db) +} + +// Iterator implements DB. +func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { + if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { + return nil, errKeyEmpty + } + o := pebble.IterOptions{ + LowerBound: start, + UpperBound: end, + } + itr := db.db.NewIter(&o) + itr.First() + + return newPebbleDBIterator(itr, start, end, false), nil +} + +// ReverseIterator implements DB. +func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { + if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { + return nil, errKeyEmpty + } + o := pebble.IterOptions{ + LowerBound: start, + UpperBound: end, + } + itr := db.db.NewIter(&o) + itr.Last() + return newPebbleDBIterator(itr, start, end, true), nil +} + +var _ Batch = (*pebbleDBBatch)(nil) + +type pebbleDBBatch struct { + db *PebbleDB + batch *pebble.Batch +} + +var _ Batch = (*pebbleDBBatch)(nil) + +func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { + return &pebbleDBBatch{ + batch: db.db.NewBatch(), + } +} + +// Set implements Batch. +func (b *pebbleDBBatch) Set(key, value []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + if value == nil { + return errValueNil + } + if b.batch == nil { + return errBatchClosed + } + b.batch.Set(key, value, nil) + return nil +} + +// Delete implements Batch. +func (b *pebbleDBBatch) Delete(key []byte) error { + if len(key) == 0 { + return errKeyEmpty + } + if b.batch == nil { + return errBatchClosed + } + b.batch.Delete(key, nil) + return nil +} + +// Write implements Batch. +func (b *pebbleDBBatch) Write() error { + if b.batch == nil { + return errBatchClosed + } + err := b.batch.Commit(pebble.NoSync) + if err != nil { + return err + } + // Make sure batch cannot be used afterwards. Callers should still call Close(), for errors. + + return b.Close() +} + +// WriteSync implements Batch. +func (b *pebbleDBBatch) WriteSync() error { + if b.batch == nil { + return errBatchClosed + } + err := b.batch.Commit(pebble.Sync) + if err != nil { + return err + } + // Make sure batch cannot be used afterwards. Callers should still call Close(), for errors. + return b.Close() +} + +// Close implements Batch. +func (b *pebbleDBBatch) Close() error { + if b.batch != nil { + err := b.batch.Close() + if err != nil { + return err + } + b.batch = nil + } + + return nil +} + +type pebbleDBIterator struct { + source *pebble.Iterator + start, end []byte + isReverse bool + isInvalid bool +} + +var _ Iterator = (*pebbleDBIterator)(nil) + +func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse bool) *pebbleDBIterator { + if isReverse { + if end == nil { + source.Last() + } + } else { + if start == nil { + source.First() + } + } + return &pebbleDBIterator{ + source: source, + start: start, + end: end, + isReverse: isReverse, + isInvalid: false, + } +} + +// Domain implements Iterator. +func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { + return itr.start, itr.end +} + +// Valid implements Iterator. +func (itr *pebbleDBIterator) Valid() bool { + // Once invalid, forever invalid. + if itr.isInvalid { + return false + } + + // If source has error, invalid. + if err := itr.source.Error(); err != nil { + itr.isInvalid = true + + return false + } + + // If source is invalid, invalid. + if !itr.source.Valid() { + itr.isInvalid = true + + return false + } + + // If key is end or past it, invalid. + start := itr.start + end := itr.end + key := itr.source.Key() + if itr.isReverse { + if start != nil && bytes.Compare(key, start) < 0 { + itr.isInvalid = true + + return false + } + } else { + if end != nil && bytes.Compare(end, key) <= 0 { + itr.isInvalid = true + + return false + } + } + + // It's valid. + return true +} + +// Key implements Iterator. +func (itr *pebbleDBIterator) Key() []byte { + itr.assertIsValid() + return itr.source.Key() +} + +// Value implements Iterator. +func (itr *pebbleDBIterator) Value() []byte { + itr.assertIsValid() + return itr.source.Value() +} + +// Next implements Iterator. +func (itr pebbleDBIterator) Next() { + itr.assertIsValid() + if itr.isReverse { + itr.source.Prev() + } else { + itr.source.Next() + } +} + +// Error implements Iterator. +func (itr *pebbleDBIterator) Error() error { + return itr.source.Error() +} + +// Close implements Iterator. +func (itr *pebbleDBIterator) Close() error { + err := itr.source.Close() + if err != nil { + return err + } + return nil +} + +func (itr *pebbleDBIterator) assertIsValid() { + if !itr.Valid() { + panic("iterator is invalid") + } +} diff --git a/pebble_test.go b/pebble_test.go new file mode 100644 index 000000000..9837b3f78 --- /dev/null +++ b/pebble_test.go @@ -0,0 +1,50 @@ +//go:build pebbledb + +package db + +import ( + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestPebbleDBBackend(t *testing.T) { + name := fmt.Sprintf("test_%x", randStr(12)) + dir := os.TempDir() + db, err := NewDB(name, PebbleDBBackend, dir) + require.NoError(t, err) + defer cleanupDBDir(dir, name) + + _, ok := db.(*PebbleDB) + assert.True(t, ok) +} + +// func TestPebbleDBStats(t *testing.T) { +// name := fmt.Sprintf("test_%x", randStr(12)) +// dir := os.TempDir() +// db, err := NewDB(name, PebbleDBBackend, dir) +// require.NoError(t, err) +// defer cleanupDBDir(dir, name) + +// assert.NotEmpty(t, db.Stats()) +// } + +func BenchmarkPebbleDBRandomReadsWrites(b *testing.B) { + name := fmt.Sprintf("test_%x", randStr(12)) + dir := os.TempDir() + db, err := NewDB(name, PebbleDBBackend, dir) + if err != nil { + b.Fatal(err) + } + defer func() { + db.Close() + cleanupDBDir("", name) + }() + + benchmarkRandomReadsWrites(b, db) +} + +// TODO: Add tests for pebble diff --git a/prefixdb_iterator.go b/prefixdb_iterator.go index 79e1ef7fa..8f2f93262 100644 --- a/prefixdb_iterator.go +++ b/prefixdb_iterator.go @@ -91,7 +91,6 @@ func (itr *prefixDBIterator) Next() { if !itr.source.Valid() || !bytes.HasPrefix(itr.source.Key(), itr.prefix) { itr.valid = false - } else if bytes.Equal(itr.source.Key(), itr.prefix) { // Empty keys are not allowed, so if a key exists in the database that exactly matches the // prefix we need to skip it. diff --git a/rocksdb.go b/rocksdb.go index dd9be2a36..06d056dd8 100644 --- a/rocksdb.go +++ b/rocksdb.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db diff --git a/rocksdb_batch.go b/rocksdb_batch.go index af7e65c60..b2557ac45 100644 --- a/rocksdb_batch.go +++ b/rocksdb_batch.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db diff --git a/rocksdb_iterator.go b/rocksdb_iterator.go index 9970c169e..e79a76cd6 100644 --- a/rocksdb_iterator.go +++ b/rocksdb_iterator.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db @@ -55,7 +56,6 @@ func (itr *rocksDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr *rocksDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -74,9 +74,9 @@ func (itr *rocksDBIterator) Valid() bool { } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = moveSliceToBytes(itr.source.Key()) + start := itr.start + end := itr.end + key := moveSliceToBytes(itr.source.Key()) if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { itr.isInvalid = true diff --git a/rocksdb_test.go b/rocksdb_test.go index 6bbe51133..4eddbc56b 100644 --- a/rocksdb_test.go +++ b/rocksdb_test.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db From eeadeb81cda78206a9524c57d3b240f021f5ef5e Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Mon, 25 Jul 2022 10:26:45 +0700 Subject: [PATCH 02/21] log calls --- pebble.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pebble.go b/pebble.go index 2f5cb6905..09b65c35d 100644 --- a/pebble.go +++ b/pebble.go @@ -69,6 +69,7 @@ func NewPebbleDB(name string, dir string) (DB, error) { // Get implements DB. func (db *PebbleDB) Get(key []byte) ([]byte, error) { + fmt.Println("PebbleDB.Get") if len(key) == 0 { return nil, errKeyEmpty } @@ -82,6 +83,7 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { // Has implements DB. func (db *PebbleDB) Has(key []byte) (bool, error) { + fmt.Println("PebbleDB.Has") if len(key) == 0 { return false, errKeyEmpty } @@ -94,6 +96,7 @@ func (db *PebbleDB) Has(key []byte) (bool, error) { // Set implements DB. func (db *PebbleDB) Set(key []byte, value []byte) error { + fmt.Println("PebbleDB.Set") if len(key) == 0 { return errKeyEmpty } @@ -109,6 +112,7 @@ func (db *PebbleDB) Set(key []byte, value []byte) error { // SetSync implements DB. func (db *PebbleDB) SetSync(key []byte, value []byte) error { + fmt.Println("PebbleDB.SetSync") if len(key) == 0 { return errKeyEmpty } @@ -124,6 +128,7 @@ func (db *PebbleDB) SetSync(key []byte, value []byte) error { // Delete implements DB. func (db *PebbleDB) Delete(key []byte) error { + fmt.Println("PebbleDB.Delete") if len(key) == 0 { return errKeyEmpty } @@ -136,6 +141,7 @@ func (db *PebbleDB) Delete(key []byte) error { // DeleteSync implements DB. func (db PebbleDB) DeleteSync(key []byte) error { + fmt.Println("PebbleDB.DeleteSync") if len(key) == 0 { return errKeyEmpty } @@ -152,6 +158,7 @@ func (db *PebbleDB) DB() *pebble.DB { // Close implements DB. func (db PebbleDB) Close() error { + fmt.Println("PebbleDB.Close") db.db.Close() return nil } @@ -190,6 +197,7 @@ func (db *PebbleDB) NewBatch() Batch { // Iterator implements DB. func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { + fmt.Println("PebbleDB.Iterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -205,6 +213,7 @@ func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { // ReverseIterator implements DB. func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { + fmt.Println("PebbleDB.ReverseIterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -234,6 +243,7 @@ func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { // Set implements Batch. func (b *pebbleDBBatch) Set(key, value []byte) error { + fmt.Println("pebbleDBBatch.Set") if len(key) == 0 { return errKeyEmpty } @@ -249,6 +259,7 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { // Delete implements Batch. func (b *pebbleDBBatch) Delete(key []byte) error { + fmt.Println("pebbleDBBatch.Delete") if len(key) == 0 { return errKeyEmpty } @@ -261,6 +272,7 @@ func (b *pebbleDBBatch) Delete(key []byte) error { // Write implements Batch. func (b *pebbleDBBatch) Write() error { + fmt.Println("pebbleDBBatch.Write") if b.batch == nil { return errBatchClosed } @@ -275,6 +287,7 @@ func (b *pebbleDBBatch) Write() error { // WriteSync implements Batch. func (b *pebbleDBBatch) WriteSync() error { + fmt.Println("pebbleDBBatch.WriteSync") if b.batch == nil { return errBatchClosed } @@ -288,6 +301,7 @@ func (b *pebbleDBBatch) WriteSync() error { // Close implements Batch. func (b *pebbleDBBatch) Close() error { + fmt.Println("pebbleDBBatch.Close") if b.batch != nil { err := b.batch.Close() if err != nil { @@ -329,11 +343,13 @@ func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse b // Domain implements Iterator. func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { + fmt.Println("pebbleDBIterator.Domain") return itr.start, itr.end } // Valid implements Iterator. func (itr *pebbleDBIterator) Valid() bool { + fmt.Println("pebbleDBIterator.Valid") // Once invalid, forever invalid. if itr.isInvalid { return false @@ -377,18 +393,21 @@ func (itr *pebbleDBIterator) Valid() bool { // Key implements Iterator. func (itr *pebbleDBIterator) Key() []byte { + fmt.Println("pebbleDBIterator.Key") itr.assertIsValid() return itr.source.Key() } // Value implements Iterator. func (itr *pebbleDBIterator) Value() []byte { + fmt.Println("pebbleDBIterator.Value") itr.assertIsValid() return itr.source.Value() } // Next implements Iterator. func (itr pebbleDBIterator) Next() { + fmt.Println("pebbleDBIterator.Next") itr.assertIsValid() if itr.isReverse { itr.source.Prev() @@ -404,6 +423,7 @@ func (itr *pebbleDBIterator) Error() error { // Close implements Iterator. func (itr *pebbleDBIterator) Close() error { + fmt.Println("pebbleDBIterator.Close") err := itr.source.Close() if err != nil { return err From 248b9f9620093fe067b086a8137344d33ab49539 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Mon, 25 Jul 2022 15:53:32 +0700 Subject: [PATCH 03/21] try NoCompression --- pebble.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pebble.go b/pebble.go index 09b65c35d..b3d9967ff 100644 --- a/pebble.go +++ b/pebble.go @@ -56,6 +56,12 @@ func NewPebbleDB(name string, dir string) (DB, error) { // opts.Levels[6].FilterPolicy = nil // opts.FlushSplitBytes = opts.Levels[0].TargetFileSize + for i := 0; i < len(opts.Levels); i++ { + l := &opts.Levels[i] + l.Compression = pebble.NoCompression + l.EnsureDefaults() + } + opts.EnsureDefaults() p, err := pebble.Open(dbPath, opts) From ecbddc37e1b9094ad2cf76225722ad10ec86203b Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Mon, 25 Jul 2022 21:19:25 +0700 Subject: [PATCH 04/21] DisableAutomaticCompactions = true --- pebble.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pebble.go b/pebble.go index b3d9967ff..6450ad73b 100644 --- a/pebble.go +++ b/pebble.go @@ -62,6 +62,8 @@ func NewPebbleDB(name string, dir string) (DB, error) { l.EnsureDefaults() } + opts.DisableAutomaticCompactions = true + opts.EnsureDefaults() p, err := pebble.Open(dbPath, opts) From d91a34e4502049fa7568add11f2dc7e38a5555b5 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 26 Jul 2022 18:47:11 +0700 Subject: [PATCH 05/21] regenerate certs --- remotedb/test.crt | 44 ++++++++++++++++++++--------------------- remotedb/test.key | 50 +++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/remotedb/test.crt b/remotedb/test.crt index 8ce516466..b3b203e37 100644 --- a/remotedb/test.crt +++ b/remotedb/test.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEOjCCAiKgAwIBAgIQfxecvKrUOJEOok/qZ2WLnjANBgkqhkiG9w0BAQsFADAZ -MRcwFQYDVQQDEw50ZW5kZXJtaW50LmNvbTAeFw0yMTAxMjAwOTE2NTBaFw0yMjA3 -MjAwOTE2NDZaMBMxETAPBgNVBAMTCHJlbW90ZWRiMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAqNCbMG9fwkcloAZIHOhpE5Lzg7FIpykiXOt/zUShiSKc -9eDGF5+IBRY9RtZVLBZ9nTAWzK+fAGx9YiYoV0XY0I9iFWl9nInkfuFy0jqkbRov -/VBRHZ0mmyQlqJOsVzBi/erKpRhINXl6Z1MHqTIV+ae2lfEar02UEByyy8lwRY1D -y5U+mY9/5oy/hB6yI77gkZq3hqC65LLg54+Dq4YG6UlkUKmejBslwD0r6S0LCnX2 -0RXEEjONnrSpY7yckmPg4IgvUkEKZRiPIvgHIYqEQRrJi2E1r+djI+zObZDUCZV8 -qucS5rf3BkSrbt0Pe8af14gKQ4tkxgPtNNhZbtLGSwIDAQABo4GDMIGAMA4GA1Ud +MIIEOjCCAiKgAwIBAgIQELi28YSz7wnGMCFY/LkGTDANBgkqhkiG9w0BAQsFADAZ +MRcwFQYDVQQDEw50ZW5kZXJtaW50LmNvbTAeFw0yMjA3MjYxMTQ1NTVaFw0yNDAx +MjYxMTQ1NTVaMBMxETAPBgNVBAMTCHJlbW90ZWRiMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA93GhF6GfEyh7VRBsLGlKMsG7rbE5Z6HjoMzWvURXjV2C +jsSfCmmVhv6UeaTQc8Wci7Sdabwm9eTiv1ikeY0ZYt+oZdcvhjXP4+so4yhPiBMk +II/Ds4VcojZ+aGXdbvhcdemFy0ZpvQ1nqJGdKgMt7CSExe8/Q06Xgy3JzlhlVMlb +KRC1OywwjxTxCjdA1MzmUG+P/4wYls0ejvco87UfSmaIm6GJwi3H9QlrtPAaI7JH +sZS1puR4JkA1xusBY1A5LeWLDaCmiSYh2x2NC7CiF23Fj5K4YQegQ1TsZxgS7pG1 +OZiAsa65V/pNXI3MAGk7k0Yb6Ai+IhzaczHAvhf4VQIDAQABo4GDMIGAMA4GA1Ud DwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0O -BBYEFGNRxW37g6FMPcR7GmZejA+9BZfmMB8GA1UdIwQYMBaAFBoC/uE2wTQRb1Z+ -esvMU5ae/TdrMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAChw -YIz+UVWKKnPE7VqTZutKypUBrDfnngXWfMXzTm6jrgD2JOC2Dj50itG+FPytjs8O -0zdQ4rL8buq5fLU3BmLMW4M16rtv/3jWzo2CP5i49cHIur8loZe/jxzbTX+d5qah -zThR5VvZKr4cF/p6TODjwwpe3y00gIJryJ7IOIppM3EGMDy2PVJ0pEF1xslpIyZY -k5WBmmFZadsf1DY9j0R+f45754kGdH3IEUGbsbWxn7E6YNDTUeHE+8ZW0sMBmPWl -XnE2q1Z2eTfiPVmfOhHNBiLt5qoWHJnAuI3KpNPhGbcPIUbHNZtnLN4jH+pblHAE -eIy1f1otJcexjH1/axxw2tIwy5s6o6tlbWotRa54kguhaPL7rqVeePBCphh0Ak8O -0KkM8ai5E9+aMfm7VP7L5gidzXnZJltveh7szD+wGeXq/RbT9ZYortYP320SJnn/ -E12CFIyHmBorNgmPFlUnrHiUKJ1Wfii5Vbwqc4bv5qOZ6UECVHI9oo0Juhf1KJVY -i7zIJ6x3zZ/pRGU0Sks2H7ZFx3wBARR413q9flS7leYFR9cmo2lDmjUfbfmbCEjW -/dt/PFrTMbAhEHSlGcICjnCxNz1uVEnEtPD/XmioxLsSwiGW1f1TOZboVC0Z7Qdk -VyaP7W3ChntBIJhM2x95BYsId5CsHAZ30d1ztxa6 +BBYEFKaGp/Pd8Iy9l+V5oeFAbv0MylOTMB8GA1UdIwQYMBaAFNSp7CXUG885Al3n +oJjlAZ0I+/yfMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAHfM +odmek2HhUKzmqBSaLMHstyiGlxUDuUALfkJY8TNAtC02J9TIrAcT5dqT7zdKq3d5 +AldjBMcj3R9WlUPZv4prEvaLJSCpUilgGETVo4Q6EjTwplUiC558XspORF5WAZuB +73gxrz6rc8zUXDKcf0ey/kV/WOFS4ICjVhJMVa8hesd9JiQIqYnf0N1XrXk/YAqf +10lH+AWza5EsVH4sg45DVdwM45OxRIK1fQbSpBYczpT+UocGQWe1J2ehthFlh5Ab +V9OQ4TdJEdIs/p9WSZ9tmRlXJVvo2A9wWD3NOOSWiAXhKBBr5QsqNqaMjqQpajbT +STaQS3zeVAEYKdOUGy16ymfBm4nwcneDbwFOAGMahu3l/V4vlXA+Eb5tdSX1kwcf +l3ImQglBwwXTXPf1yyLXOVHFxqXTZI9fVOFB1qd4l76aGN0fBvnleqbhmXNohcVe +B/x/liaiGhL/udhDM7Y+dspw8LmNTGsqYGgYKmD3prFfWrkYcaRc32bPs9fk8hOz +e7vCQwSAbTEfXZ9/q7MwNcBG35iz37GJa9tV5Mg5UbJeZzj85PpnfIcCu6bmHlA9 +ROlJ8XF0TDqtvQrxz3WGaSm22DgkUP/Z+anCy+7E78dX1Ef+d1lg045PiHGijFIC +5NMT9dYCR7J3c6S6fDkSl0/iR0v5URCFJ7t2xjIC -----END CERTIFICATE----- diff --git a/remotedb/test.key b/remotedb/test.key index 8a125c208..15ada098c 100644 --- a/remotedb/test.key +++ b/remotedb/test.key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- From cc357e3afc76deffe7edce122a9f7a4b74739783 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Wed, 27 Jul 2022 16:15:33 +0700 Subject: [PATCH 06/21] Revert "log calls" This reverts commit eeadeb81cda78206a9524c57d3b240f021f5ef5e. --- pebble.go | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/pebble.go b/pebble.go index 6450ad73b..95d46bc20 100644 --- a/pebble.go +++ b/pebble.go @@ -77,7 +77,6 @@ func NewPebbleDB(name string, dir string) (DB, error) { // Get implements DB. func (db *PebbleDB) Get(key []byte) ([]byte, error) { - fmt.Println("PebbleDB.Get") if len(key) == 0 { return nil, errKeyEmpty } @@ -91,7 +90,6 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { // Has implements DB. func (db *PebbleDB) Has(key []byte) (bool, error) { - fmt.Println("PebbleDB.Has") if len(key) == 0 { return false, errKeyEmpty } @@ -104,7 +102,6 @@ func (db *PebbleDB) Has(key []byte) (bool, error) { // Set implements DB. func (db *PebbleDB) Set(key []byte, value []byte) error { - fmt.Println("PebbleDB.Set") if len(key) == 0 { return errKeyEmpty } @@ -120,7 +117,6 @@ func (db *PebbleDB) Set(key []byte, value []byte) error { // SetSync implements DB. func (db *PebbleDB) SetSync(key []byte, value []byte) error { - fmt.Println("PebbleDB.SetSync") if len(key) == 0 { return errKeyEmpty } @@ -136,7 +132,6 @@ func (db *PebbleDB) SetSync(key []byte, value []byte) error { // Delete implements DB. func (db *PebbleDB) Delete(key []byte) error { - fmt.Println("PebbleDB.Delete") if len(key) == 0 { return errKeyEmpty } @@ -149,7 +144,6 @@ func (db *PebbleDB) Delete(key []byte) error { // DeleteSync implements DB. func (db PebbleDB) DeleteSync(key []byte) error { - fmt.Println("PebbleDB.DeleteSync") if len(key) == 0 { return errKeyEmpty } @@ -166,7 +160,6 @@ func (db *PebbleDB) DB() *pebble.DB { // Close implements DB. func (db PebbleDB) Close() error { - fmt.Println("PebbleDB.Close") db.db.Close() return nil } @@ -205,7 +198,6 @@ func (db *PebbleDB) NewBatch() Batch { // Iterator implements DB. func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { - fmt.Println("PebbleDB.Iterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -221,7 +213,6 @@ func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { // ReverseIterator implements DB. func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { - fmt.Println("PebbleDB.ReverseIterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -251,7 +242,6 @@ func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { // Set implements Batch. func (b *pebbleDBBatch) Set(key, value []byte) error { - fmt.Println("pebbleDBBatch.Set") if len(key) == 0 { return errKeyEmpty } @@ -267,7 +257,6 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { // Delete implements Batch. func (b *pebbleDBBatch) Delete(key []byte) error { - fmt.Println("pebbleDBBatch.Delete") if len(key) == 0 { return errKeyEmpty } @@ -280,7 +269,6 @@ func (b *pebbleDBBatch) Delete(key []byte) error { // Write implements Batch. func (b *pebbleDBBatch) Write() error { - fmt.Println("pebbleDBBatch.Write") if b.batch == nil { return errBatchClosed } @@ -295,7 +283,6 @@ func (b *pebbleDBBatch) Write() error { // WriteSync implements Batch. func (b *pebbleDBBatch) WriteSync() error { - fmt.Println("pebbleDBBatch.WriteSync") if b.batch == nil { return errBatchClosed } @@ -309,7 +296,6 @@ func (b *pebbleDBBatch) WriteSync() error { // Close implements Batch. func (b *pebbleDBBatch) Close() error { - fmt.Println("pebbleDBBatch.Close") if b.batch != nil { err := b.batch.Close() if err != nil { @@ -351,13 +337,11 @@ func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse b // Domain implements Iterator. func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { - fmt.Println("pebbleDBIterator.Domain") return itr.start, itr.end } // Valid implements Iterator. func (itr *pebbleDBIterator) Valid() bool { - fmt.Println("pebbleDBIterator.Valid") // Once invalid, forever invalid. if itr.isInvalid { return false @@ -401,21 +385,18 @@ func (itr *pebbleDBIterator) Valid() bool { // Key implements Iterator. func (itr *pebbleDBIterator) Key() []byte { - fmt.Println("pebbleDBIterator.Key") itr.assertIsValid() return itr.source.Key() } // Value implements Iterator. func (itr *pebbleDBIterator) Value() []byte { - fmt.Println("pebbleDBIterator.Value") itr.assertIsValid() return itr.source.Value() } // Next implements Iterator. func (itr pebbleDBIterator) Next() { - fmt.Println("pebbleDBIterator.Next") itr.assertIsValid() if itr.isReverse { itr.source.Prev() @@ -431,7 +412,6 @@ func (itr *pebbleDBIterator) Error() error { // Close implements Iterator. func (itr *pebbleDBIterator) Close() error { - fmt.Println("pebbleDBIterator.Close") err := itr.source.Close() if err != nil { return err From d91c16814176a4846a391053ada1834d6b0e1c15 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Wed, 27 Jul 2022 16:31:42 +0700 Subject: [PATCH 07/21] ... --- go.mod | 10 ++++++---- go.sum | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 1e89c07cb..7d1f3df0e 100644 --- a/go.mod +++ b/go.mod @@ -14,19 +14,21 @@ require ( google.golang.org/grpc v1.48.0 ) -require github.com/cockroachdb/pebble v0.0.0-20220421143146-8decd08cdb9d +require ( + github.com/cockroachdb/pebble v0.0.0-20220726134658-7b78c71e4055 + github.com/dgraph-io/badger/v3 v3.2103.2 +) require ( github.com/DataDog/zstd v1.4.5 // indirect + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect github.com/cockroachdb/errors v1.8.1 // indirect github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect github.com/cockroachdb/redact v1.0.8 // indirect github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect - github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dgraph-io/badger/v3 v3.2103.2 github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect @@ -35,7 +37,7 @@ require ( github.com/google/flatbuffers v1.12.1 // indirect github.com/klauspost/compress v1.12.3 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/kr/text v0.1.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opencensus.io v0.22.5 // indirect diff --git a/go.sum b/go.sum index 456b17c71..ffdd56caf 100644 --- a/go.sum +++ b/go.sum @@ -8,12 +8,15 @@ github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EF 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/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= 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/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 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= @@ -35,14 +38,12 @@ github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQ 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/pebble v0.0.0-20220421143146-8decd08cdb9d h1:rMLrmABNLB5RPEvy/lynjDL1EyCCXpcjBtCgt4D9DTs= -github.com/cockroachdb/pebble v0.0.0-20220421143146-8decd08cdb9d/go.mod h1:buxOO9GBtOcq1DiXDpIPYrmxY020K2A8lOrwno5FetU= +github.com/cockroachdb/pebble v0.0.0-20220726134658-7b78c71e4055 h1:lKgbA+hhzIse5eXx1aZwpHAnPKTp1mtQnJRZJbLwJtU= +github.com/cockroachdb/pebble v0.0.0-20220726134658-7b78c71e4055/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= 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/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= 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= @@ -50,6 +51,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -81,6 +83,7 @@ github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+ne 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/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -92,6 +95,7 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/ 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-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 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/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= @@ -103,6 +107,7 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP 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/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= @@ -146,6 +151,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= @@ -162,6 +168,7 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV 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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= 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= @@ -179,8 +186,9 @@ github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 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/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -200,6 +208,8 @@ github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOA 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/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -242,7 +252,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf 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= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= @@ -273,19 +282,26 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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-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-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc= golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -346,15 +362,18 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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-20190206041539-40960b6deb8e/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-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -364,6 +383,11 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -398,8 +422,9 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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= @@ -416,3 +441,4 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= From e3f5da3778f0d15f30caf2e28deffa0b6401d82f Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 28 Jul 2022 14:43:53 +0700 Subject: [PATCH 08/21] fix pebble --- pebble.go | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/pebble.go b/pebble.go index 95d46bc20..0d8fcc9fd 100644 --- a/pebble.go +++ b/pebble.go @@ -77,12 +77,14 @@ func NewPebbleDB(name string, dir string) (DB, error) { // Get implements DB. func (db *PebbleDB) Get(key []byte) ([]byte, error) { + fmt.Println("PebbleDB.Get") if len(key) == 0 { return nil, errKeyEmpty } res, closer, err := db.db.Get(key) + v := cp(res) if err != nil { - return res, nil + return v, nil } closer.Close() return res, nil @@ -90,6 +92,7 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { // Has implements DB. func (db *PebbleDB) Has(key []byte) (bool, error) { + fmt.Println("PebbleDB.Has") if len(key) == 0 { return false, errKeyEmpty } @@ -102,6 +105,7 @@ func (db *PebbleDB) Has(key []byte) (bool, error) { // Set implements DB. func (db *PebbleDB) Set(key []byte, value []byte) error { + fmt.Println("PebbleDB.Set") if len(key) == 0 { return errKeyEmpty } @@ -117,6 +121,7 @@ func (db *PebbleDB) Set(key []byte, value []byte) error { // SetSync implements DB. func (db *PebbleDB) SetSync(key []byte, value []byte) error { + fmt.Println("PebbleDB.SetSync") if len(key) == 0 { return errKeyEmpty } @@ -132,6 +137,7 @@ func (db *PebbleDB) SetSync(key []byte, value []byte) error { // Delete implements DB. func (db *PebbleDB) Delete(key []byte) error { + fmt.Println("PebbleDB.Delete") if len(key) == 0 { return errKeyEmpty } @@ -144,6 +150,7 @@ func (db *PebbleDB) Delete(key []byte) error { // DeleteSync implements DB. func (db PebbleDB) DeleteSync(key []byte) error { + fmt.Println("PebbleDB.DeleteSync") if len(key) == 0 { return errKeyEmpty } @@ -160,6 +167,7 @@ func (db *PebbleDB) DB() *pebble.DB { // Close implements DB. func (db PebbleDB) Close() error { + fmt.Println("PebbleDB.Close") db.db.Close() return nil } @@ -198,6 +206,7 @@ func (db *PebbleDB) NewBatch() Batch { // Iterator implements DB. func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { + fmt.Println("PebbleDB.Iterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -213,6 +222,7 @@ func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { // ReverseIterator implements DB. func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { + fmt.Println("PebbleDB.ReverseIterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -242,6 +252,7 @@ func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { // Set implements Batch. func (b *pebbleDBBatch) Set(key, value []byte) error { + fmt.Println("pebbleDBBatch.Set") if len(key) == 0 { return errKeyEmpty } @@ -257,6 +268,7 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { // Delete implements Batch. func (b *pebbleDBBatch) Delete(key []byte) error { + fmt.Println("pebbleDBBatch.Delete") if len(key) == 0 { return errKeyEmpty } @@ -269,6 +281,7 @@ func (b *pebbleDBBatch) Delete(key []byte) error { // Write implements Batch. func (b *pebbleDBBatch) Write() error { + fmt.Println("pebbleDBBatch.Write") if b.batch == nil { return errBatchClosed } @@ -283,6 +296,7 @@ func (b *pebbleDBBatch) Write() error { // WriteSync implements Batch. func (b *pebbleDBBatch) WriteSync() error { + fmt.Println("pebbleDBBatch.WriteSync") if b.batch == nil { return errBatchClosed } @@ -296,6 +310,7 @@ func (b *pebbleDBBatch) WriteSync() error { // Close implements Batch. func (b *pebbleDBBatch) Close() error { + fmt.Println("pebbleDBBatch.Close") if b.batch != nil { err := b.batch.Close() if err != nil { @@ -337,11 +352,13 @@ func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse b // Domain implements Iterator. func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { + fmt.Println("pebbleDBIterator.Domain") return itr.start, itr.end } // Valid implements Iterator. func (itr *pebbleDBIterator) Valid() bool { + fmt.Println("pebbleDBIterator.Valid") // Once invalid, forever invalid. if itr.isInvalid { return false @@ -385,18 +402,21 @@ func (itr *pebbleDBIterator) Valid() bool { // Key implements Iterator. func (itr *pebbleDBIterator) Key() []byte { + fmt.Println("pebbleDBIterator.Key") itr.assertIsValid() - return itr.source.Key() + return cp(itr.source.Key()) } // Value implements Iterator. func (itr *pebbleDBIterator) Value() []byte { + fmt.Println("pebbleDBIterator.Value") itr.assertIsValid() - return itr.source.Value() + return cp(itr.source.Value()) } // Next implements Iterator. func (itr pebbleDBIterator) Next() { + fmt.Println("pebbleDBIterator.Next") itr.assertIsValid() if itr.isReverse { itr.source.Prev() @@ -412,6 +432,7 @@ func (itr *pebbleDBIterator) Error() error { // Close implements Iterator. func (itr *pebbleDBIterator) Close() error { + fmt.Println("pebbleDBIterator.Close") err := itr.source.Close() if err != nil { return err From 6633d2466a34d1edee082d742f8b43f5c5a7aaf1 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 28 Jul 2022 15:17:11 +0700 Subject: [PATCH 09/21] fix PebbleDB.Get --- pebble.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pebble.go b/pebble.go index 0d8fcc9fd..046ce2fd3 100644 --- a/pebble.go +++ b/pebble.go @@ -83,10 +83,10 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { } res, closer, err := db.db.Get(key) v := cp(res) + closer.Close() if err != nil { - return v, nil + return nil, err } - closer.Close() return res, nil } From 0b885bbb8f56ad3bcd42665c5f843fb258e3d417 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 28 Jul 2022 15:45:56 +0700 Subject: [PATCH 10/21] fix PebbleDB.Get... --- pebble.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pebble.go b/pebble.go index 046ce2fd3..94e007f80 100644 --- a/pebble.go +++ b/pebble.go @@ -81,13 +81,18 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { if len(key) == 0 { return nil, errKeyEmpty } + res, closer, err := db.db.Get(key) - v := cp(res) - closer.Close() + if err != nil { + if err == pebble.ErrNotFound { + return nil, nil + } return nil, err } - return res, nil + defer closer.Close() + + return cp(res), nil } // Has implements DB. From 9cc487937df0ccf47d63c4125625f24c279289ef Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 28 Jul 2022 16:04:22 +0700 Subject: [PATCH 11/21] ... --- pebble.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pebble.go b/pebble.go index 94e007f80..cabed9f6c 100644 --- a/pebble.go +++ b/pebble.go @@ -56,13 +56,13 @@ func NewPebbleDB(name string, dir string) (DB, error) { // opts.Levels[6].FilterPolicy = nil // opts.FlushSplitBytes = opts.Levels[0].TargetFileSize - for i := 0; i < len(opts.Levels); i++ { - l := &opts.Levels[i] - l.Compression = pebble.NoCompression - l.EnsureDefaults() - } - - opts.DisableAutomaticCompactions = true + //for i := 0; i < len(opts.Levels); i++ { + // l := &opts.Levels[i] + // l.Compression = pebble.NoCompression + // l.EnsureDefaults() + //} + // + //opts.DisableAutomaticCompactions = true opts.EnsureDefaults() From 7c0a33fd88c8c37bf645a2ede2e20b8453d18d1f Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 28 Jul 2022 17:14:01 +0700 Subject: [PATCH 12/21] comment all fmt.Println log debugging --- pebble.go | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pebble.go b/pebble.go index cabed9f6c..00e04b455 100644 --- a/pebble.go +++ b/pebble.go @@ -77,7 +77,7 @@ func NewPebbleDB(name string, dir string) (DB, error) { // Get implements DB. func (db *PebbleDB) Get(key []byte) ([]byte, error) { - fmt.Println("PebbleDB.Get") + //fmt.Println("PebbleDB.Get") if len(key) == 0 { return nil, errKeyEmpty } @@ -97,7 +97,7 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { // Has implements DB. func (db *PebbleDB) Has(key []byte) (bool, error) { - fmt.Println("PebbleDB.Has") + //fmt.Println("PebbleDB.Has") if len(key) == 0 { return false, errKeyEmpty } @@ -110,7 +110,7 @@ func (db *PebbleDB) Has(key []byte) (bool, error) { // Set implements DB. func (db *PebbleDB) Set(key []byte, value []byte) error { - fmt.Println("PebbleDB.Set") + //fmt.Println("PebbleDB.Set") if len(key) == 0 { return errKeyEmpty } @@ -126,7 +126,7 @@ func (db *PebbleDB) Set(key []byte, value []byte) error { // SetSync implements DB. func (db *PebbleDB) SetSync(key []byte, value []byte) error { - fmt.Println("PebbleDB.SetSync") + //fmt.Println("PebbleDB.SetSync") if len(key) == 0 { return errKeyEmpty } @@ -142,7 +142,7 @@ func (db *PebbleDB) SetSync(key []byte, value []byte) error { // Delete implements DB. func (db *PebbleDB) Delete(key []byte) error { - fmt.Println("PebbleDB.Delete") + //fmt.Println("PebbleDB.Delete") if len(key) == 0 { return errKeyEmpty } @@ -155,7 +155,7 @@ func (db *PebbleDB) Delete(key []byte) error { // DeleteSync implements DB. func (db PebbleDB) DeleteSync(key []byte) error { - fmt.Println("PebbleDB.DeleteSync") + //fmt.Println("PebbleDB.DeleteSync") if len(key) == 0 { return errKeyEmpty } @@ -172,7 +172,7 @@ func (db *PebbleDB) DB() *pebble.DB { // Close implements DB. func (db PebbleDB) Close() error { - fmt.Println("PebbleDB.Close") + //fmt.Println("PebbleDB.Close") db.db.Close() return nil } @@ -211,7 +211,7 @@ func (db *PebbleDB) NewBatch() Batch { // Iterator implements DB. func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { - fmt.Println("PebbleDB.Iterator") + //fmt.Println("PebbleDB.Iterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -227,7 +227,7 @@ func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { // ReverseIterator implements DB. func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { - fmt.Println("PebbleDB.ReverseIterator") + //fmt.Println("PebbleDB.ReverseIterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -257,7 +257,7 @@ func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { // Set implements Batch. func (b *pebbleDBBatch) Set(key, value []byte) error { - fmt.Println("pebbleDBBatch.Set") + //fmt.Println("pebbleDBBatch.Set") if len(key) == 0 { return errKeyEmpty } @@ -273,7 +273,7 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { // Delete implements Batch. func (b *pebbleDBBatch) Delete(key []byte) error { - fmt.Println("pebbleDBBatch.Delete") + //fmt.Println("pebbleDBBatch.Delete") if len(key) == 0 { return errKeyEmpty } @@ -286,7 +286,7 @@ func (b *pebbleDBBatch) Delete(key []byte) error { // Write implements Batch. func (b *pebbleDBBatch) Write() error { - fmt.Println("pebbleDBBatch.Write") + //fmt.Println("pebbleDBBatch.Write") if b.batch == nil { return errBatchClosed } @@ -301,7 +301,7 @@ func (b *pebbleDBBatch) Write() error { // WriteSync implements Batch. func (b *pebbleDBBatch) WriteSync() error { - fmt.Println("pebbleDBBatch.WriteSync") + //fmt.Println("pebbleDBBatch.WriteSync") if b.batch == nil { return errBatchClosed } @@ -315,7 +315,7 @@ func (b *pebbleDBBatch) WriteSync() error { // Close implements Batch. func (b *pebbleDBBatch) Close() error { - fmt.Println("pebbleDBBatch.Close") + //fmt.Println("pebbleDBBatch.Close") if b.batch != nil { err := b.batch.Close() if err != nil { @@ -357,13 +357,13 @@ func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse b // Domain implements Iterator. func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { - fmt.Println("pebbleDBIterator.Domain") + //fmt.Println("pebbleDBIterator.Domain") return itr.start, itr.end } // Valid implements Iterator. func (itr *pebbleDBIterator) Valid() bool { - fmt.Println("pebbleDBIterator.Valid") + //fmt.Println("pebbleDBIterator.Valid") // Once invalid, forever invalid. if itr.isInvalid { return false @@ -407,21 +407,21 @@ func (itr *pebbleDBIterator) Valid() bool { // Key implements Iterator. func (itr *pebbleDBIterator) Key() []byte { - fmt.Println("pebbleDBIterator.Key") + //fmt.Println("pebbleDBIterator.Key") itr.assertIsValid() return cp(itr.source.Key()) } // Value implements Iterator. func (itr *pebbleDBIterator) Value() []byte { - fmt.Println("pebbleDBIterator.Value") + //fmt.Println("pebbleDBIterator.Value") itr.assertIsValid() return cp(itr.source.Value()) } // Next implements Iterator. func (itr pebbleDBIterator) Next() { - fmt.Println("pebbleDBIterator.Next") + //fmt.Println("pebbleDBIterator.Next") itr.assertIsValid() if itr.isReverse { itr.source.Prev() @@ -437,7 +437,7 @@ func (itr *pebbleDBIterator) Error() error { // Close implements Iterator. func (itr *pebbleDBIterator) Close() error { - fmt.Println("pebbleDBIterator.Close") + //fmt.Println("pebbleDBIterator.Close") err := itr.source.Close() if err != nil { return err From 01732e409052f7095283b3d1d8e8f15e98184087 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 28 Jul 2022 21:08:55 +0700 Subject: [PATCH 13/21] pebble --- pebble.go | 55 ++++++++++++++++++++++++-------------------------- pebble_test.go | 18 ++++++++--------- 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/pebble.go b/pebble.go index 00e04b455..5d9ba03bb 100644 --- a/pebble.go +++ b/pebble.go @@ -24,6 +24,8 @@ type PebbleDB struct { var _ DB = (*PebbleDB)(nil) +// NewPebbleDB creates a new PebbleDB instance. +// The commented out pieces are things that can be used at a later time to further boost performance. func NewPebbleDB(name string, dir string) (DB, error) { dbPath := filepath.Join(dir, name+".db") // cache := pebble.NewCache(1024 * 1024 * 32) @@ -77,13 +79,12 @@ func NewPebbleDB(name string, dir string) (DB, error) { // Get implements DB. func (db *PebbleDB) Get(key []byte) ([]byte, error) { - //fmt.Println("PebbleDB.Get") + // fmt.Println("PebbleDB.Get") if len(key) == 0 { return nil, errKeyEmpty } res, closer, err := db.db.Get(key) - if err != nil { if err == pebble.ErrNotFound { return nil, nil @@ -97,7 +98,7 @@ func (db *PebbleDB) Get(key []byte) ([]byte, error) { // Has implements DB. func (db *PebbleDB) Has(key []byte) (bool, error) { - //fmt.Println("PebbleDB.Has") + // fmt.Println("PebbleDB.Has") if len(key) == 0 { return false, errKeyEmpty } @@ -110,7 +111,7 @@ func (db *PebbleDB) Has(key []byte) (bool, error) { // Set implements DB. func (db *PebbleDB) Set(key []byte, value []byte) error { - //fmt.Println("PebbleDB.Set") + // fmt.Println("PebbleDB.Set") if len(key) == 0 { return errKeyEmpty } @@ -126,7 +127,7 @@ func (db *PebbleDB) Set(key []byte, value []byte) error { // SetSync implements DB. func (db *PebbleDB) SetSync(key []byte, value []byte) error { - //fmt.Println("PebbleDB.SetSync") + // fmt.Println("PebbleDB.SetSync") if len(key) == 0 { return errKeyEmpty } @@ -142,7 +143,7 @@ func (db *PebbleDB) SetSync(key []byte, value []byte) error { // Delete implements DB. func (db *PebbleDB) Delete(key []byte) error { - //fmt.Println("PebbleDB.Delete") + // fmt.Println("PebbleDB.Delete") if len(key) == 0 { return errKeyEmpty } @@ -155,7 +156,7 @@ func (db *PebbleDB) Delete(key []byte) error { // DeleteSync implements DB. func (db PebbleDB) DeleteSync(key []byte) error { - //fmt.Println("PebbleDB.DeleteSync") + // fmt.Println("PebbleDB.DeleteSync") if len(key) == 0 { return errKeyEmpty } @@ -172,7 +173,7 @@ func (db *PebbleDB) DB() *pebble.DB { // Close implements DB. func (db PebbleDB) Close() error { - //fmt.Println("PebbleDB.Close") + // fmt.Println("PebbleDB.Close") db.db.Close() return nil } @@ -192,16 +193,12 @@ func (db *PebbleDB) Print() error { return nil } +// The stats section was contributed by ValNodes. Toss e'm some stake! // Stats implements DB. func (db *PebbleDB) Stats() map[string]string { - /* - keys := []string{"rocksdb.stats"} - stats := make(map[string]string, len(keys)) - for _, key := range keys { - stats[key] = db.(key) - } - */ - return nil + stats := make(map[string]string, 1) + stats["Metrics"] = fmt.Sprint(db.db.Metrics()) + return stats } // NewBatch implements DB. @@ -211,7 +208,7 @@ func (db *PebbleDB) NewBatch() Batch { // Iterator implements DB. func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { - //fmt.Println("PebbleDB.Iterator") + // fmt.Println("PebbleDB.Iterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -227,7 +224,7 @@ func (db *PebbleDB) Iterator(start, end []byte) (Iterator, error) { // ReverseIterator implements DB. func (db *PebbleDB) ReverseIterator(start, end []byte) (Iterator, error) { - //fmt.Println("PebbleDB.ReverseIterator") + // fmt.Println("PebbleDB.ReverseIterator") if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } @@ -257,7 +254,7 @@ func newPebbleDBBatch(db *PebbleDB) *pebbleDBBatch { // Set implements Batch. func (b *pebbleDBBatch) Set(key, value []byte) error { - //fmt.Println("pebbleDBBatch.Set") + // fmt.Println("pebbleDBBatch.Set") if len(key) == 0 { return errKeyEmpty } @@ -273,7 +270,7 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { // Delete implements Batch. func (b *pebbleDBBatch) Delete(key []byte) error { - //fmt.Println("pebbleDBBatch.Delete") + // fmt.Println("pebbleDBBatch.Delete") if len(key) == 0 { return errKeyEmpty } @@ -286,7 +283,7 @@ func (b *pebbleDBBatch) Delete(key []byte) error { // Write implements Batch. func (b *pebbleDBBatch) Write() error { - //fmt.Println("pebbleDBBatch.Write") + // fmt.Println("pebbleDBBatch.Write") if b.batch == nil { return errBatchClosed } @@ -301,7 +298,7 @@ func (b *pebbleDBBatch) Write() error { // WriteSync implements Batch. func (b *pebbleDBBatch) WriteSync() error { - //fmt.Println("pebbleDBBatch.WriteSync") + // fmt.Println("pebbleDBBatch.WriteSync") if b.batch == nil { return errBatchClosed } @@ -315,7 +312,7 @@ func (b *pebbleDBBatch) WriteSync() error { // Close implements Batch. func (b *pebbleDBBatch) Close() error { - //fmt.Println("pebbleDBBatch.Close") + // fmt.Println("pebbleDBBatch.Close") if b.batch != nil { err := b.batch.Close() if err != nil { @@ -357,13 +354,13 @@ func newPebbleDBIterator(source *pebble.Iterator, start, end []byte, isReverse b // Domain implements Iterator. func (itr *pebbleDBIterator) Domain() ([]byte, []byte) { - //fmt.Println("pebbleDBIterator.Domain") + // fmt.Println("pebbleDBIterator.Domain") return itr.start, itr.end } // Valid implements Iterator. func (itr *pebbleDBIterator) Valid() bool { - //fmt.Println("pebbleDBIterator.Valid") + // fmt.Println("pebbleDBIterator.Valid") // Once invalid, forever invalid. if itr.isInvalid { return false @@ -407,21 +404,21 @@ func (itr *pebbleDBIterator) Valid() bool { // Key implements Iterator. func (itr *pebbleDBIterator) Key() []byte { - //fmt.Println("pebbleDBIterator.Key") + // fmt.Println("pebbleDBIterator.Key") itr.assertIsValid() return cp(itr.source.Key()) } // Value implements Iterator. func (itr *pebbleDBIterator) Value() []byte { - //fmt.Println("pebbleDBIterator.Value") + // fmt.Println("pebbleDBIterator.Value") itr.assertIsValid() return cp(itr.source.Value()) } // Next implements Iterator. func (itr pebbleDBIterator) Next() { - //fmt.Println("pebbleDBIterator.Next") + // fmt.Println("pebbleDBIterator.Next") itr.assertIsValid() if itr.isReverse { itr.source.Prev() @@ -437,7 +434,7 @@ func (itr *pebbleDBIterator) Error() error { // Close implements Iterator. func (itr *pebbleDBIterator) Close() error { - //fmt.Println("pebbleDBIterator.Close") + // fmt.Println("pebbleDBIterator.Close") err := itr.source.Close() if err != nil { return err diff --git a/pebble_test.go b/pebble_test.go index 9837b3f78..96d275693 100644 --- a/pebble_test.go +++ b/pebble_test.go @@ -22,15 +22,15 @@ func TestPebbleDBBackend(t *testing.T) { assert.True(t, ok) } -// func TestPebbleDBStats(t *testing.T) { -// name := fmt.Sprintf("test_%x", randStr(12)) -// dir := os.TempDir() -// db, err := NewDB(name, PebbleDBBackend, dir) -// require.NoError(t, err) -// defer cleanupDBDir(dir, name) - -// assert.NotEmpty(t, db.Stats()) -// } +func TestPebbleDBStats(t *testing.T) { + name := fmt.Sprintf("test_%x", randStr(12)) + dir := os.TempDir() + db, err := NewDB(name, PebbleDBBackend, dir) + require.NoError(t, err) + defer cleanupDBDir(dir, name) + + assert.NotEmpty(t, db.Stats()) +} func BenchmarkPebbleDBRandomReadsWrites(b *testing.B) { name := fmt.Sprintf("test_%x", randStr(12)) From 8fed9a6640dcdbbcf55f46ec02a1ba4a237dcd6d Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Fri, 29 Jul 2022 10:36:57 +0700 Subject: [PATCH 14/21] Delete gaia.yml --- .github/workflows/gaia.yml | 58 -------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 .github/workflows/gaia.yml diff --git a/.github/workflows/gaia.yml b/.github/workflows/gaia.yml deleted file mode 100644 index b1c5ef517..000000000 --- a/.github/workflows/gaia.yml +++ /dev/null @@ -1,58 +0,0 @@ -# This workflow builds and pushes a new version of the build container image -# when the tools directory changes on master. Edit tools/Dockerfile. -# -# This workflow does not push a new image until it is merged, so tests that -# depend on changes in this image will not pass until this workflow succeeds. -# For that reason, changes here should be done in a separate PR in advance of -# work that depends on them. - -name: State Sync Gaia -on: - pull_request: - push: - - -jobs: - build: - runs-on: ubuntu-latest - container: ghcr.io/faddat/gaia - continue-on-error: true - env: - INTERVAL: 1000 - GAIAD_STATESYNC_ENABLE: true - GAIAD_P2P_MAX_NUM_OUTBOUND_PEERS: 200 - GAIAD_P2P_SEEDS: "bf8328b66dceb4987e5cd94430af66045e59899f@public-seed.cosmos.vitwit.com:26656,cfd785a4224c7940e9a10f6c1ab24c343e923bec@164.68.107.188:26656,d72b3011ed46d783e369fdf8ae2055b99a1e5074@173.249.50.25:26656,ba3bacc714817218562f743178228f23678b2873@public-seed-node.cosmoshub.certus.one:26656,3c7cad4154967a294b3ba1cc752e40e8779640ad@84.201.128.115:26656,366ac852255c3ac8de17e11ae9ec814b8c68bddb@51.15.94.196:26656" - GAIAD_STATESYNC_RPC_SERVERS: "https://cosmoshub.validator.network:443,https://cosmoshub.validator.network:443" - GOPATH: /go - - - - - strategy: - matrix: - database: [rocksdb, pebbledb, boltdb, badgerdb, goleveldb, cleveldb] - - steps: - - run: git config --global --add safe.directory /__w/tendermint/tm-db - - uses: actions/checkout@v3 - - name: state sync gaia with ${{ matrix.database }} - run: | - cd .. - git clone https://github.com/cosmos/gaia - cd gaia - go mod edit -replace github.com/tendermint/tm-db=../tm-db - go mod tidy - go install -ldflags '-w -s -X github.com/cosmos/cosmos-sdk/types.DBBackend=${{ matrix.database }}' -tags ${{ matrix.database }} ./... - export LATEST_HEIGHT=$(curl -s https://cosmoshub.validator.network/block | jq -r .result.block.header.height); - export BLOCK_HEIGHT=$(($LATEST_HEIGHT-$INTERVAL)) - export TRUST_HASH=$(curl -s "https://cosmoshub.validator.network/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) - export GAIAD_STATESYNC_TRUST_HEIGHT=$BLOCK_HEIGHT - export GAIAD_STATESYNC_TRUST_HASH=$TRUST_HASH - export PATH=$PATH:/go/bin - echo "TRUST HEIGHT: $BLOCK_HEIGHT" - echo "TRUST HASH: $TRUST_HASH" - gaiad init gaia-matrix - cp /genesis.json ~/.gaia/config/genesis.json - gaiad start --x-crisis-skip-assert-invariants --db_backend ${{ matrix.database }} - - \ No newline at end of file From 00fb04a8265a4bf7464b20fab7e320995d37631c Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Fri, 29 Jul 2022 14:49:07 +0700 Subject: [PATCH 15/21] fix: remove mutex in prefixdb (#239) * fix: remove mutex in prefixdb * fmt * fmt * Delete .gitpod.yml * remove mutex entirely instead of commenting out * fmt * remove .gitpod.yml * update changelog * prefixdb test * all test passed in prefixdb_test.go * simple taskKey in prefixdb_test.go * Update prefixdb.go Co-authored-by: M. J. Fromberger * fmt db test so pr passes linter * refactor func Run * check nil err before create PrefixDB in TestWithGolevelDB * add other db tests * Update prefixdb_test.go Co-authored-by: M. J. Fromberger * update prefixdb_test.go * minor defer * fixup with build tags * Create .gitpod.yml * fix linting * itr.isInvalid would be unconditionally set anyhow, which is why the itr.isInvalid were considered to be ineffective assignments by the linter. * Update cleveldb_test.go Co-authored-by: M. J. Fromberger * Update prefixdb_test.go Co-authored-by: M. J. Fromberger * Update prefixdb_test.go Co-authored-by: M. J. Fromberger * Firing this into CI, let's see. * add filepath lib to tests * fix filepath in goleveldb * gofumpt formatting Co-authored-by: jess Co-authored-by: vuong Co-authored-by: khanh <50263489+catShaark@users.noreply.github.com> Co-authored-by: M. J. Fromberger Co-authored-by: romelukaku --- .gitpod.yml | 7 +++ .golangci.yml | 7 +++ CHANGELOG.md | 4 ++ backend_test.go | 1 - badger_db.go | 2 +- boltdb.go | 10 ++-- boltdb_batch.go | 1 + boltdb_iterator.go | 1 + boltdb_test.go | 12 +++++ cleveldb.go | 1 + cleveldb_batch.go | 1 + cleveldb_iterator.go | 16 +++---- cleveldb_test.go | 22 +++++++-- goleveldb_iterator.go | 7 ++- prefixdb.go | 19 -------- prefixdb_iterator.go | 1 - prefixdb_test.go | 109 ++++++++++++++++++++++++++++++++++++++++++ rocksdb.go | 1 + rocksdb_batch.go | 1 + rocksdb_iterator.go | 8 ++-- rocksdb_test.go | 12 +++++ 21 files changed, 192 insertions(+), 51 deletions(-) create mode 100644 .gitpod.yml diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000..4b56b6b70 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,7 @@ +# This configuration file was automatically generated by Gitpod. +# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file) +# and commit this file to your remote git repository to share the goodness with others. + +image: tendermintdev/docker-tm-db-testing + +# this means that there's a one-click known good environment available to developers. diff --git a/.golangci.yml b/.golangci.yml index abf03e7ac..4fd7732da 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -40,6 +40,13 @@ linters: # - gocognit - nolintlint +run: + build-tags: + - cleveldb + - rocksdb + - badgerdb + - boltdb + issues: exclude-rules: - path: _test\.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 607f0bafb..9654735be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- remove mutex from prefixdb + ## 0.6.7 **2022-2-21** diff --git a/backend_test.go b/backend_test.go index 63630beca..aecae4bf5 100644 --- a/backend_test.go +++ b/backend_test.go @@ -315,7 +315,6 @@ func testDBIterator(t *testing.T, backend BackendType) { ritr, err = db2.ReverseIterator(nil, nil) require.NoError(t, err) verifyIterator(t, ritr, nil, "reverse iterator with empty db") - } func verifyIterator(t *testing.T, itr Iterator, expected []int64, msg string) { diff --git a/badger_db.go b/badger_db.go index 193372abf..467ed3361 100644 --- a/badger_db.go +++ b/badger_db.go @@ -25,7 +25,7 @@ func NewBadgerDB(dbName, dir string) (*BadgerDB, error) { // the final directory to use for the database. path := filepath.Join(dir, dbName) - if err := os.MkdirAll(path, 0755); err != nil { + if err := os.MkdirAll(path, 0o755); err != nil { return nil, err } opts := badger.DefaultOptions(path) diff --git a/boltdb.go b/boltdb.go index 398c401a4..b1f69983d 100644 --- a/boltdb.go +++ b/boltdb.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db @@ -11,14 +12,10 @@ import ( "go.etcd.io/bbolt" ) -var ( - bucket = []byte("tm") -) +var bucket = []byte("tm") func init() { - registerDBCreator(BoltDBBackend, func(name, dir string) (DB, error) { - return NewBoltDB(name, dir) - }, false) + registerDBCreator(BoltDBBackend, NewBoltDB, false) } // BoltDB is a wrapper around etcd's fork of bolt (https://github.com/etcd-io/bbolt). @@ -139,6 +136,7 @@ func (bdb *BoltDB) Close() error { } // Print implements DB. +// nolint: errcheck func (bdb *BoltDB) Print() error { stats := bdb.db.Stats() fmt.Printf("%v\n", stats) diff --git a/boltdb_batch.go b/boltdb_batch.go index 390bc309b..cd22c6741 100644 --- a/boltdb_batch.go +++ b/boltdb_batch.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db diff --git a/boltdb_iterator.go b/boltdb_iterator.go index 74212c5ca..a62e2abb8 100644 --- a/boltdb_iterator.go +++ b/boltdb_iterator.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db diff --git a/boltdb_test.go b/boltdb_test.go index 0fd12bbe2..02a9eaf44 100644 --- a/boltdb_test.go +++ b/boltdb_test.go @@ -1,3 +1,4 @@ +//go:build boltdb // +build boltdb package db @@ -5,6 +6,7 @@ package db import ( "fmt" "os" + "path/filepath" "testing" "github.com/stretchr/testify/require" @@ -20,6 +22,16 @@ func TestBoltDBNewBoltDB(t *testing.T) { db.Close() } +func TestWithBoltDB(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "boltdb") + + db, err := NewBoltDB(path, "") + require.NoError(t, err) + + t.Run("BoltDB", func(t *testing.T) { Run(t, db) }) +} + func BenchmarkBoltDBRandomReadsWrites(b *testing.B) { name := fmt.Sprintf("test_%x", randStr(12)) db, err := NewBoltDB(name, "") diff --git a/cleveldb.go b/cleveldb.go index 377956deb..789673011 100644 --- a/cleveldb.go +++ b/cleveldb.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db diff --git a/cleveldb_batch.go b/cleveldb_batch.go index 132a521cb..b77bd523d 100644 --- a/cleveldb_batch.go +++ b/cleveldb_batch.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db diff --git a/cleveldb_iterator.go b/cleveldb_iterator.go index 04375d565..5a7f1e6ad 100644 --- a/cleveldb_iterator.go +++ b/cleveldb_iterator.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db @@ -20,7 +21,7 @@ var _ Iterator = (*cLevelDBIterator)(nil) func newCLevelDBIterator(source *levigo.Iterator, start, end []byte, isReverse bool) *cLevelDBIterator { if isReverse { - if end == nil || len(end) == 0 { + if len(end) == 0 { source.SeekToLast() } else { source.Seek(end) @@ -34,7 +35,7 @@ func newCLevelDBIterator(source *levigo.Iterator, start, end []byte, isReverse b } } } else { - if start == nil || len(start) == 0 { + if len(start) == 0 { source.SeekToFirst() } else { source.Seek(start) @@ -56,7 +57,6 @@ func (itr cLevelDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr cLevelDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -64,28 +64,24 @@ func (itr cLevelDBIterator) Valid() bool { // If source errors, invalid. if itr.source.GetError() != nil { - itr.isInvalid = true return false } // If source is invalid, invalid. if !itr.source.Valid() { - itr.isInvalid = true return false } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = itr.source.Key() + start := itr.start + end := itr.end + key := itr.source.Key() if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { - itr.isInvalid = true return false } } else { if end != nil && bytes.Compare(end, key) <= 0 { - itr.isInvalid = true return false } } diff --git a/cleveldb_test.go b/cleveldb_test.go index 61e2fb6ef..55fca6b9f 100644 --- a/cleveldb_test.go +++ b/cleveldb_test.go @@ -1,3 +1,4 @@ +//go:build cleveldb // +build cleveldb package db @@ -7,12 +8,24 @@ import ( "fmt" "math/rand" "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func TestWithClevelDB(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "cleveldb") + + db, err := NewCLevelDB(path, "") + require.NoError(t, err) + + t.Run("ClevelDB", func(t *testing.T) { Run(t, db) }) +} + +//nolint: errcheck func BenchmarkRandomReadsWrites2(b *testing.B) { b.StopTimer() @@ -36,9 +49,8 @@ func BenchmarkRandomReadsWrites2(b *testing.B) { idx := (int64(rand.Int()) % numItems) internal[idx]++ val := internal[idx] - idxBytes := int642Bytes(int64(idx)) - valBytes := int642Bytes(int64(val)) - //fmt.Printf("Set %X -> %X\n", idxBytes, valBytes) + idxBytes := int642Bytes(idx) + valBytes := int642Bytes(val) db.Set( idxBytes, valBytes, @@ -48,12 +60,12 @@ func BenchmarkRandomReadsWrites2(b *testing.B) { { idx := (int64(rand.Int()) % numItems) val := internal[idx] - idxBytes := int642Bytes(int64(idx)) + idxBytes := int642Bytes(idx) valBytes, err := db.Get(idxBytes) if err != nil { b.Error(err) } - //fmt.Printf("Get %X -> %X\n", idxBytes, valBytes) + // fmt.Printf("Get %X -> %X\n", idxBytes, valBytes) if val == 0 { if !bytes.Equal(valBytes, nil) { b.Errorf("Expected %v for %v, got %X", diff --git a/goleveldb_iterator.go b/goleveldb_iterator.go index 9cf9a5e15..5341d1ac2 100644 --- a/goleveldb_iterator.go +++ b/goleveldb_iterator.go @@ -54,7 +54,6 @@ func (itr *goLevelDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr *goLevelDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -73,9 +72,9 @@ func (itr *goLevelDBIterator) Valid() bool { } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = itr.source.Key() + start := itr.start + end := itr.end + key := itr.source.Key() if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { diff --git a/prefixdb.go b/prefixdb.go index 0b2d2a1cf..447ce2e9b 100644 --- a/prefixdb.go +++ b/prefixdb.go @@ -27,8 +27,6 @@ func (pdb *PrefixDB) Get(key []byte) ([]byte, error) { if len(key) == 0 { return nil, errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() pkey := pdb.prefixed(key) value, err := pdb.db.Get(pkey) @@ -43,8 +41,6 @@ func (pdb *PrefixDB) Has(key []byte) (bool, error) { if len(key) == 0 { return false, errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() ok, err := pdb.db.Has(pdb.prefixed(key)) if err != nil { @@ -62,8 +58,6 @@ func (pdb *PrefixDB) Set(key []byte, value []byte) error { if value == nil { return errValueNil } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() pkey := pdb.prefixed(key) if err := pdb.db.Set(pkey, value); err != nil { @@ -80,8 +74,6 @@ func (pdb *PrefixDB) SetSync(key []byte, value []byte) error { if value == nil { return errValueNil } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() return pdb.db.SetSync(pdb.prefixed(key), value) } @@ -91,8 +83,6 @@ func (pdb *PrefixDB) Delete(key []byte) error { if len(key) == 0 { return errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() return pdb.db.Delete(pdb.prefixed(key)) } @@ -102,8 +92,6 @@ func (pdb *PrefixDB) DeleteSync(key []byte) error { if len(key) == 0 { return errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() return pdb.db.DeleteSync(pdb.prefixed(key)) } @@ -113,8 +101,6 @@ func (pdb *PrefixDB) Iterator(start, end []byte) (Iterator, error) { if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() var pstart, pend []byte pstart = append(cp(pdb.prefix), start...) @@ -136,8 +122,6 @@ func (pdb *PrefixDB) ReverseIterator(start, end []byte) (Iterator, error) { if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { return nil, errKeyEmpty } - pdb.mtx.Lock() - defer pdb.mtx.Unlock() var pstart, pend []byte pstart = append(cp(pdb.prefix), start...) @@ -156,9 +140,6 @@ func (pdb *PrefixDB) ReverseIterator(start, end []byte) (Iterator, error) { // NewBatch implements DB. func (pdb *PrefixDB) NewBatch() Batch { - pdb.mtx.Lock() - defer pdb.mtx.Unlock() - return newPrefixBatch(pdb.prefix, pdb.db.NewBatch()) } diff --git a/prefixdb_iterator.go b/prefixdb_iterator.go index 79e1ef7fa..8f2f93262 100644 --- a/prefixdb_iterator.go +++ b/prefixdb_iterator.go @@ -91,7 +91,6 @@ func (itr *prefixDBIterator) Next() { if !itr.source.Valid() || !bytes.HasPrefix(itr.source.Key(), itr.prefix) { itr.valid = false - } else if bytes.Equal(itr.source.Key(), itr.prefix) { // Empty keys are not allowed, so if a key exists in the database that exactly matches the // prefix we need to skip it. diff --git a/prefixdb_test.go b/prefixdb_test.go index 3fc53ee92..07db733df 100644 --- a/prefixdb_test.go +++ b/prefixdb_test.go @@ -1,6 +1,12 @@ package db import ( + "bytes" + "encoding/binary" + "fmt" + "math/rand" + "path/filepath" + "sync" "testing" "github.com/stretchr/testify/require" @@ -20,6 +26,109 @@ func mockDBWithStuff(t *testing.T) DB { return db } +func taskKey(i, k int) []byte { + return []byte(fmt.Sprintf("task-%d-key-%d", i, k)) +} + +func randomValue() []byte { + b := make([]byte, 16) + rand.Read(b) + return b +} + +func TestGolevelDB(t *testing.T) { + path := filepath.Join(t.TempDir(), "goleveldb") + + db, err := NewGoLevelDB(path, "") + require.NoError(t, err) + + Run(t, db) +} + +/* We don't seem to test badger anywhere. +func TestWithBadgerDB(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "badgerdb") + + db, err := NewBadgerDB(path, "") + require.NoError(t, err) + + t.Run("BadgerDB", func(t *testing.T) { Run(t, db) }) +} +*/ + +func TestWithMemDB(t *testing.T) { + db := NewMemDB() + + t.Run("MemDB", func(t *testing.T) { Run(t, db) }) +} + +// Run generates concurrent reads and writes to db so the race detector can +// verify concurrent operations are properly synchronized. +// The contents of db are garbage after Run returns. +func Run(t *testing.T, db DB) { + t.Helper() + + const numWorkers = 10 + const numKeys = 64 + + var wg sync.WaitGroup + for i := 0; i < numWorkers; i++ { + wg.Add(1) + i := i + go func() { + defer wg.Done() + + // Insert a bunch of keys with random data. + for k := 1; k <= numKeys; k++ { + key := taskKey(i, k) // say, "task--key-" + value := randomValue() + if err := db.Set(key, value); err != nil { + t.Errorf("Task %d: db.Set(%q=%q) failed: %v", + i, string(key), string(value), err) + } + } + + // Iterate over the database to make sure our keys are there. + it, err := db.Iterator(nil, nil) + if err != nil { + t.Errorf("Iterator[%d]: %v", i, err) + return + } + found := make(map[string][]byte) + mine := []byte(fmt.Sprintf("task-%d-", i)) + for { + if key := it.Key(); bytes.HasPrefix(key, mine) { + found[string(key)] = it.Value() + } + it.Next() + if !it.Valid() { + break + } + } + if err := it.Error(); err != nil { + t.Errorf("Iterator[%d] reported error: %v", i, err) + } + if err := it.Close(); err != nil { + t.Errorf("Close iterator[%d]: %v", i, err) + } + if len(found) != numKeys { + t.Errorf("Task %d: found %d keys, wanted %d", i, len(found), numKeys) + } + + // Delete all the keys we inserted. + for key := range mine { + bs := make([]byte, 4) + binary.LittleEndian.PutUint32(bs, uint32(key)) + if err := db.Delete(bs); err != nil { + t.Errorf("Delete %q: %v", key, err) + } + } + }() + } + wg.Wait() +} + func TestPrefixDBSimple(t *testing.T) { db := mockDBWithStuff(t) pdb := NewPrefixDB(db, bz("key")) diff --git a/rocksdb.go b/rocksdb.go index dd9be2a36..06d056dd8 100644 --- a/rocksdb.go +++ b/rocksdb.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db diff --git a/rocksdb_batch.go b/rocksdb_batch.go index af7e65c60..b2557ac45 100644 --- a/rocksdb_batch.go +++ b/rocksdb_batch.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db diff --git a/rocksdb_iterator.go b/rocksdb_iterator.go index 9970c169e..e79a76cd6 100644 --- a/rocksdb_iterator.go +++ b/rocksdb_iterator.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db @@ -55,7 +56,6 @@ func (itr *rocksDBIterator) Domain() ([]byte, []byte) { // Valid implements Iterator. func (itr *rocksDBIterator) Valid() bool { - // Once invalid, forever invalid. if itr.isInvalid { return false @@ -74,9 +74,9 @@ func (itr *rocksDBIterator) Valid() bool { } // If key is end or past it, invalid. - var start = itr.start - var end = itr.end - var key = moveSliceToBytes(itr.source.Key()) + start := itr.start + end := itr.end + key := moveSliceToBytes(itr.source.Key()) if itr.isReverse { if start != nil && bytes.Compare(key, start) < 0 { itr.isInvalid = true diff --git a/rocksdb_test.go b/rocksdb_test.go index 6bbe51133..bd6793420 100644 --- a/rocksdb_test.go +++ b/rocksdb_test.go @@ -1,3 +1,4 @@ +//go:build rocksdb // +build rocksdb package db @@ -5,6 +6,7 @@ package db import ( "fmt" "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -22,6 +24,16 @@ func TestRocksDBBackend(t *testing.T) { assert.True(t, ok) } +func TestWithRocksDB(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "rocksdb") + + db, err := NewRocksDB(path, "") + require.NoError(t, err) + + t.Run("RocksDB", func(t *testing.T) { Run(t, db) }) +} + func TestRocksDBStats(t *testing.T) { name := fmt.Sprintf("test_%x", randStr(12)) dir := os.TempDir() From 7c0b5fa513f7df2c448bc086ce5328b392c844e9 Mon Sep 17 00:00:00 2001 From: faddat Date: Fri, 29 Jul 2022 10:47:47 +0000 Subject: [PATCH 16/21] pebble --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9654735be..4b39ad01d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased - remove mutex from prefixdb +- [#284](https://github.com/tendermint/tm-db/pull/284): Add pebbledb, a rocks-like database that doesn't need to use cgo. ## 0.6.7 From 96bdf9bcf9b7f8ef7df56fc248c01867a8ce72b7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Fri, 29 Jul 2022 23:56:52 +0700 Subject: [PATCH 17/21] regenerate certs (#280) --- remotedb/test.crt | 44 ++++++++++++++++++++--------------------- remotedb/test.key | 50 +++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/remotedb/test.crt b/remotedb/test.crt index 8ce516466..b3b203e37 100644 --- a/remotedb/test.crt +++ b/remotedb/test.crt @@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- -MIIEOjCCAiKgAwIBAgIQfxecvKrUOJEOok/qZ2WLnjANBgkqhkiG9w0BAQsFADAZ -MRcwFQYDVQQDEw50ZW5kZXJtaW50LmNvbTAeFw0yMTAxMjAwOTE2NTBaFw0yMjA3 -MjAwOTE2NDZaMBMxETAPBgNVBAMTCHJlbW90ZWRiMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAqNCbMG9fwkcloAZIHOhpE5Lzg7FIpykiXOt/zUShiSKc -9eDGF5+IBRY9RtZVLBZ9nTAWzK+fAGx9YiYoV0XY0I9iFWl9nInkfuFy0jqkbRov -/VBRHZ0mmyQlqJOsVzBi/erKpRhINXl6Z1MHqTIV+ae2lfEar02UEByyy8lwRY1D -y5U+mY9/5oy/hB6yI77gkZq3hqC65LLg54+Dq4YG6UlkUKmejBslwD0r6S0LCnX2 -0RXEEjONnrSpY7yckmPg4IgvUkEKZRiPIvgHIYqEQRrJi2E1r+djI+zObZDUCZV8 -qucS5rf3BkSrbt0Pe8af14gKQ4tkxgPtNNhZbtLGSwIDAQABo4GDMIGAMA4GA1Ud +MIIEOjCCAiKgAwIBAgIQELi28YSz7wnGMCFY/LkGTDANBgkqhkiG9w0BAQsFADAZ +MRcwFQYDVQQDEw50ZW5kZXJtaW50LmNvbTAeFw0yMjA3MjYxMTQ1NTVaFw0yNDAx +MjYxMTQ1NTVaMBMxETAPBgNVBAMTCHJlbW90ZWRiMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA93GhF6GfEyh7VRBsLGlKMsG7rbE5Z6HjoMzWvURXjV2C +jsSfCmmVhv6UeaTQc8Wci7Sdabwm9eTiv1ikeY0ZYt+oZdcvhjXP4+so4yhPiBMk +II/Ds4VcojZ+aGXdbvhcdemFy0ZpvQ1nqJGdKgMt7CSExe8/Q06Xgy3JzlhlVMlb +KRC1OywwjxTxCjdA1MzmUG+P/4wYls0ejvco87UfSmaIm6GJwi3H9QlrtPAaI7JH +sZS1puR4JkA1xusBY1A5LeWLDaCmiSYh2x2NC7CiF23Fj5K4YQegQ1TsZxgS7pG1 +OZiAsa65V/pNXI3MAGk7k0Yb6Ai+IhzaczHAvhf4VQIDAQABo4GDMIGAMA4GA1Ud DwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0O -BBYEFGNRxW37g6FMPcR7GmZejA+9BZfmMB8GA1UdIwQYMBaAFBoC/uE2wTQRb1Z+ -esvMU5ae/TdrMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAChw -YIz+UVWKKnPE7VqTZutKypUBrDfnngXWfMXzTm6jrgD2JOC2Dj50itG+FPytjs8O -0zdQ4rL8buq5fLU3BmLMW4M16rtv/3jWzo2CP5i49cHIur8loZe/jxzbTX+d5qah -zThR5VvZKr4cF/p6TODjwwpe3y00gIJryJ7IOIppM3EGMDy2PVJ0pEF1xslpIyZY -k5WBmmFZadsf1DY9j0R+f45754kGdH3IEUGbsbWxn7E6YNDTUeHE+8ZW0sMBmPWl -XnE2q1Z2eTfiPVmfOhHNBiLt5qoWHJnAuI3KpNPhGbcPIUbHNZtnLN4jH+pblHAE -eIy1f1otJcexjH1/axxw2tIwy5s6o6tlbWotRa54kguhaPL7rqVeePBCphh0Ak8O -0KkM8ai5E9+aMfm7VP7L5gidzXnZJltveh7szD+wGeXq/RbT9ZYortYP320SJnn/ -E12CFIyHmBorNgmPFlUnrHiUKJ1Wfii5Vbwqc4bv5qOZ6UECVHI9oo0Juhf1KJVY -i7zIJ6x3zZ/pRGU0Sks2H7ZFx3wBARR413q9flS7leYFR9cmo2lDmjUfbfmbCEjW -/dt/PFrTMbAhEHSlGcICjnCxNz1uVEnEtPD/XmioxLsSwiGW1f1TOZboVC0Z7Qdk -VyaP7W3ChntBIJhM2x95BYsId5CsHAZ30d1ztxa6 +BBYEFKaGp/Pd8Iy9l+V5oeFAbv0MylOTMB8GA1UdIwQYMBaAFNSp7CXUG885Al3n +oJjlAZ0I+/yfMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAHfM +odmek2HhUKzmqBSaLMHstyiGlxUDuUALfkJY8TNAtC02J9TIrAcT5dqT7zdKq3d5 +AldjBMcj3R9WlUPZv4prEvaLJSCpUilgGETVo4Q6EjTwplUiC558XspORF5WAZuB +73gxrz6rc8zUXDKcf0ey/kV/WOFS4ICjVhJMVa8hesd9JiQIqYnf0N1XrXk/YAqf +10lH+AWza5EsVH4sg45DVdwM45OxRIK1fQbSpBYczpT+UocGQWe1J2ehthFlh5Ab +V9OQ4TdJEdIs/p9WSZ9tmRlXJVvo2A9wWD3NOOSWiAXhKBBr5QsqNqaMjqQpajbT +STaQS3zeVAEYKdOUGy16ymfBm4nwcneDbwFOAGMahu3l/V4vlXA+Eb5tdSX1kwcf +l3ImQglBwwXTXPf1yyLXOVHFxqXTZI9fVOFB1qd4l76aGN0fBvnleqbhmXNohcVe +B/x/liaiGhL/udhDM7Y+dspw8LmNTGsqYGgYKmD3prFfWrkYcaRc32bPs9fk8hOz +e7vCQwSAbTEfXZ9/q7MwNcBG35iz37GJa9tV5Mg5UbJeZzj85PpnfIcCu6bmHlA9 +ROlJ8XF0TDqtvQrxz3WGaSm22DgkUP/Z+anCy+7E78dX1Ef+d1lg045PiHGijFIC +5NMT9dYCR7J3c6S6fDkSl0/iR0v5URCFJ7t2xjIC -----END CERTIFICATE----- diff --git a/remotedb/test.key b/remotedb/test.key index 8a125c208..15ada098c 100644 --- a/remotedb/test.key +++ b/remotedb/test.key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- From 0c9484c210242fc2890c77432df6ceb0654d658b Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Fri, 29 Jul 2022 13:08:34 -0700 Subject: [PATCH 18/21] Remove @creachadair from the CODEOWNERS file. (#285) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 440bc907b..b3e233097 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ # CODEOWNERS: https://help.github.com/articles/about-codeowners/ -* @alexanderbez @cmwaters @creachadair @marbar3778 @tychoish @williambanfield +* @alexanderbez @cmwaters @marbar3778 @tychoish @williambanfield From fce26e6a3d7f337d2a2897f370a78de0549e1a3e Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sun, 31 Jul 2022 18:39:29 +0700 Subject: [PATCH 19/21] Gofumpt second pass (#277) * gofumpt, go 1.18, revive * use go 1.18 for docker image * update linters * change linting * regenerate certs * go 1.17 * Update Dockerfile --- .golangci.yml | 18 +++--------------- go.mod | 5 ++--- remotedb/proto/defs.pb.go | 3 ++- remotedb/proto/defspb_test.go | 9 +++++---- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 4fd7732da..57eae6e4c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,43 +1,31 @@ linters: disable-all: true enable: - - bodyclose - deadcode - depguard - dogsled - dupl - errcheck - # - funlen - # - gochecknoglobals - # - gochecknoinits + - exportloopref - goconst - gocritic - # - gocyclo - # - godox - - gofmt - - goimports + - gofumpt - revive - gosec - gosimple - govet - ineffassign - # - interfacer - lll - misspell - nakedret - prealloc - # - scopelint - staticcheck - - structcheck - stylecheck - typecheck + - revive - unconvert - # - unparam - unused - varcheck - # - whitespace - # - wsl - # - gocognit - nolintlint run: diff --git a/go.mod b/go.mod index 1f0dd8ab9..1395b1d16 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.17 require ( github.com/cosmos/gorocksdb v1.2.0 + github.com/dgraph-io/badger/v3 v3.2103.2 github.com/gogo/protobuf v1.3.2 - github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.1.2 github.com/jmhodges/levigo v1.0.0 github.com/stretchr/testify v1.8.0 @@ -14,8 +14,6 @@ require ( google.golang.org/grpc v1.48.0 ) -require github.com/dgraph-io/badger/v3 v3.2103.2 - require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect @@ -24,6 +22,7 @@ require ( github.com/dustin/go-humanize v1.0.0 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect + github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.3 // indirect github.com/google/flatbuffers v1.12.1 // indirect github.com/klauspost/compress v1.12.3 // indirect diff --git a/remotedb/proto/defs.pb.go b/remotedb/proto/defs.pb.go index f3b9858b1..b2fb0edd4 100644 --- a/remotedb/proto/defs.pb.go +++ b/remotedb/proto/defs.pb.go @@ -7,12 +7,13 @@ import ( bytes "bytes" context "context" fmt "fmt" + math "math" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/remotedb/proto/defspb_test.go b/remotedb/proto/defspb_test.go index fd97a7b52..862a31939 100644 --- a/remotedb/proto/defspb_test.go +++ b/remotedb/proto/defspb_test.go @@ -5,14 +5,15 @@ package protodb import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - github_com_gogo_protobuf_jsonpb "github.com/gogo/protobuf/jsonpb" - github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - proto "github.com/gogo/protobuf/proto" math "math" math_rand "math/rand" testing "testing" time "time" + + _ "github.com/gogo/protobuf/gogoproto" + github_com_gogo_protobuf_jsonpb "github.com/gogo/protobuf/jsonpb" + github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + proto "github.com/gogo/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. From 70f3529b3196b6a7ff3340f7eb8802e75c7e4f9a Mon Sep 17 00:00:00 2001 From: Yixin Luo <18810541851@163.com> Date: Sun, 31 Jul 2022 19:41:33 +0800 Subject: [PATCH 20/21] fix cleveldb Stat() (#273) Co-authored-by: Marko --- cleveldb.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cleveldb.go b/cleveldb.go index 789673011..a4b467aad 100644 --- a/cleveldb.go +++ b/cleveldb.go @@ -154,14 +154,10 @@ func (db *CLevelDB) Print() error { // Stats implements DB. func (db *CLevelDB) Stats() map[string]string { keys := []string{ - "leveldb.aliveiters", - "leveldb.alivesnaps", - "leveldb.blockpool", - "leveldb.cachedblock", "leveldb.num-files-at-level{n}", - "leveldb.openedtables", "leveldb.sstables", "leveldb.stats", + "leveldb.approximate-memory-usage", } stats := make(map[string]string, len(keys)) From 136c7b65fb6250189fa9dd8ab62decafd223e910 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 1 Aug 2022 01:54:52 +0700 Subject: [PATCH 21/21] Update pebble.go enable cache --- pebble.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pebble.go b/pebble.go index 5d9ba03bb..0584ff96e 100644 --- a/pebble.go +++ b/pebble.go @@ -28,10 +28,10 @@ var _ DB = (*PebbleDB)(nil) // The commented out pieces are things that can be used at a later time to further boost performance. func NewPebbleDB(name string, dir string) (DB, error) { dbPath := filepath.Join(dir, name+".db") - // cache := pebble.NewCache(1024 * 1024 * 32) - // defer cache.Unref() + cache := pebble.NewCache(1024 * 1024 * 64) + defer cache.Unref() opts := &pebble.Options{ - // Cache: cache, + Cache: cache, // FormatMajorVersion: pebble.FormatNewest, // L0CompactionThreshold: 2, // L0StopWritesThreshold: 1000,