From 6b71b928be83f7874fdeb8c7cee5537d8d3269c5 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 13 Jan 2020 18:45:16 +0100 Subject: [PATCH] dep: update tm-db to 0.4.0 (#4289) * dep: update tm-db to 0.4.0 - update 0.4.0 as it is a breaking change and cannot be handled by depndabot Signed-off-by: Marko Baricevic * more work towards error handling * error and emtpy bytes handling * work on tests * add changelog entry, change some error handling * address some pr comments * panic in a few more places * move error higher up * redo some error handling * fix some bz == nil to len(bz) == 0 * change statebytes --- CHANGELOG_PENDING.md | 1 + abci/example/kvstore/kvstore.go | 48 ++++++++++++--------- abci/example/kvstore/persistent_kvstore.go | 16 +++++-- evidence/store.go | 13 ++++-- go.mod | 5 +-- go.sum | 49 ++++------------------ lite/dbprovider.go | 17 ++++++-- lite2/store/db/db.go | 28 +++++++++---- node/node.go | 7 +++- p2p/trust/store.go | 7 +++- state/store.go | 28 +++++++++---- state/txindex/kv/kv.go | 22 +++++++--- store/store.go | 40 +++++++++++++----- store/store_test.go | 30 ++++++++----- 14 files changed, 189 insertions(+), 122 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index aac3751b5..f85f4ad0e 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -145,6 +145,7 @@ program](https://hackerone.com/tendermint). - [crypto] [\#4190](https://github.com/tendermint/tendermint/pull/4190) Added SR25519 signature scheme - [abci] [\#4177] kvstore: Return `LastBlockHeight` and `LastBlockAppHash` in `Info` (@princesinha19) - [rpc] [\#2741](https://github.com/tendermint/tendermint/issues/2741) Add `proposer` to `/consensus_state` response (@princesinha19) +- [deps] [\#4289](https://github.com/tendermint/tendermint/pull/4289) Update tm-db to 0.4.0, this includes major breaking changes in the dep that change how errors are handled. ### BUG FIXES: diff --git a/abci/example/kvstore/kvstore.go b/abci/example/kvstore/kvstore.go index a715a8802..f856519f3 100644 --- a/abci/example/kvstore/kvstore.go +++ b/abci/example/kvstore/kvstore.go @@ -28,15 +28,19 @@ type State struct { } func loadState(db dbm.DB) State { - stateBytes := db.Get(stateKey) var state State - if len(stateBytes) != 0 { - err := json.Unmarshal(stateBytes, &state) - if err != nil { - panic(err) - } - } state.db = db + stateBytes, err := db.Get(stateKey) + if err != nil { + panic(err) + } + if len(stateBytes) == 0 { + return state + } + err = json.Unmarshal(stateBytes, &state) + if err != nil { + panic(err) + } return state } @@ -120,27 +124,33 @@ func (app *Application) Commit() types.ResponseCommit { // Returns an associated value or nil if missing. func (app *Application) Query(reqQuery types.RequestQuery) (resQuery types.ResponseQuery) { if reqQuery.Prove { - value := app.state.db.Get(prefixKey(reqQuery.Data)) + value, err := app.state.db.Get(prefixKey(reqQuery.Data)) + if err != nil { + panic(err) + } + if value == nil { + resQuery.Log = "does not exist" + } else { + resQuery.Log = "exists" + } resQuery.Index = -1 // TODO make Proof return index resQuery.Key = reqQuery.Data resQuery.Value = value - if value != nil { - resQuery.Log = "exists" - } else { - resQuery.Log = "does not exist" - } return } resQuery.Key = reqQuery.Data - value := app.state.db.Get(prefixKey(reqQuery.Data)) - resQuery.Value = value - if value != nil { - resQuery.Log = "exists" - } else { + value, err := app.state.db.Get(prefixKey(reqQuery.Data)) + if err != nil { + panic(err) + } + if value == nil { resQuery.Log = "does not exist" + } else { + resQuery.Log = "exists" } + resQuery.Value = value - return + return resQuery } diff --git a/abci/example/kvstore/persistent_kvstore.go b/abci/example/kvstore/persistent_kvstore.go index 808b0edd2..0c5498bee 100644 --- a/abci/example/kvstore/persistent_kvstore.go +++ b/abci/example/kvstore/persistent_kvstore.go @@ -94,7 +94,10 @@ func (app *PersistentKVStoreApplication) Query(reqQuery types.RequestQuery) (res switch reqQuery.Path { case "/val": key := []byte("val:" + string(reqQuery.Data)) - value := app.app.state.db.Get(key) + value, err := app.app.state.db.Get(key) + if err != nil { + panic(err) + } resQuery.Key = reqQuery.Data resQuery.Value = value @@ -144,7 +147,10 @@ func (app *PersistentKVStoreApplication) EndBlock(req types.RequestEndBlock) typ // update validators func (app *PersistentKVStoreApplication) Validators() (validators []types.ValidatorUpdate) { - itr := app.app.state.db.Iterator(nil, nil) + itr, err := app.app.state.db.Iterator(nil, nil) + if err != nil { + panic(err) + } for ; itr.Valid(); itr.Next() { if isValidatorTx(itr.Key()) { validator := new(types.ValidatorUpdate) @@ -210,7 +216,11 @@ func (app *PersistentKVStoreApplication) updateValidator(v types.ValidatorUpdate if v.Power == 0 { // remove validator - if !app.app.state.db.Has(key) { + hasKey, err := app.app.state.db.Has(key) + if err != nil { + panic(err) + } + if !hasKey { pubStr := base64.StdEncoding.EncodeToString(v.PubKey.Data) return types.ResponseDeliverTx{ Code: code.CodeTypeUnauthorized, diff --git a/evidence/store.go b/evidence/store.go index 2e4c6034c..3547b5ffc 100644 --- a/evidence/store.go +++ b/evidence/store.go @@ -97,7 +97,10 @@ func (store *Store) PendingEvidence(maxNum int64) (evidence []types.Evidence) { // If maxNum is -1, there's no cap on the size of returned evidence. func (store *Store) listEvidence(prefixKey string, maxNum int64) (evidence []types.Evidence) { var count int64 - iter := dbm.IteratePrefix(store.db, []byte(prefixKey)) + iter, err := dbm.IteratePrefix(store.db, []byte(prefixKey)) + if err != nil { + panic(err) + } defer iter.Close() for ; iter.Valid(); iter.Next() { val := iter.Value() @@ -121,13 +124,15 @@ func (store *Store) listEvidence(prefixKey string, maxNum int64) (evidence []typ // If not found, ei.Evidence is nil. func (store *Store) GetInfo(height int64, hash []byte) Info { key := keyLookupFromHeightAndHash(height, hash) - val := store.db.Get(key) - + val, err := store.db.Get(key) + if err != nil { + panic(err) + } if len(val) == 0 { return Info{} } var ei Info - err := cdc.UnmarshalBinaryBare(val, &ei) + err = cdc.UnmarshalBinaryBare(val, &ei) if err != nil { panic(err) } diff --git a/go.mod b/go.mod index 43d9e1a8b..942ce12fb 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,6 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/libp2p/go-buffer-pool v0.0.2 github.com/magiconair/properties v1.8.1 - github.com/mitchellh/gox v1.0.1 // indirect github.com/pkg/errors v0.9.0 github.com/prometheus/client_golang v0.9.3 github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165 @@ -27,11 +26,9 @@ require ( github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cobra v0.0.1 github.com/spf13/viper v1.6.1 - github.com/square/certstrap v1.2.0 // indirect github.com/stretchr/testify v1.4.0 - github.com/stumble/gorocksdb v0.0.3 // indirect github.com/tendermint/go-amino v0.14.1 - github.com/tendermint/tm-db v0.3.0 + github.com/tendermint/tm-db v0.4.0 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 golang.org/x/net v0.0.0-20190628185345-da137c7871d7 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // indirect diff --git a/go.sum b/go.sum index 4493ee889..04de54ad7 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/ChainSafe/go-schnorrkel v0.0.0-20191119190741-a5524ad9568e h1:rkK/bP+ZPCAygCa5ko4S1lxUynjkJAN08SL8Wq6HRfM= -github.com/ChainSafe/go-schnorrkel v0.0.0-20191119190741-a5524ad9568e/go.mod h1:+soe5c7df0vttdVAmHHSAenpDToZsECJR8psL1P/7Bg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20191204112926-74e22bf42a85 h1:cAkGY6Gq3Lpt9H+BE1kipBnUrRgcgLSfYjOVxdJJdV8= -github.com/ChainSafe/go-schnorrkel v0.0.0-20191204112926-74e22bf42a85/go.mod h1:XghbtLKucwsjjP+kApu/dx0Zkbb4tB8nzI8hnwtYc34= github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f h1:4O1om+UVU+Hfcihr1timk8YNXHxzZWgCo7ofnrZRApw= github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -46,7 +42,6 @@ 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/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= @@ -90,9 +85,11 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= @@ -102,16 +99,10 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f h1:8N8XWLZelZNibkhM1FuF+3Ad3YIbgirjdMiVA0eUkaM= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.0 h1:WQKpyRsq8Yt7dm0oq6Gj18BGku/Zbj/TOIolBYfmbiI= -github.com/gtank/ristretto255 v0.1.0/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8= -github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c h1:kQWxfPIHVLbgLzphqk3QUflDy9QdksZR4ygR807bpy0= -github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -121,6 +112,7 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -143,10 +135,6 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI= -github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -189,7 +177,9 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= @@ -205,42 +195,27 @@ github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.5.0 h1:GpsTwfsQ27oS/Aha/6d1oD7tpKIqWnOA6tgOX9HHkt4= -github.com/spf13/viper v1.5.0/go.mod h1:AkYRkVJF8TkSG/xet6PzXX+l39KhhXa2pdqVSxnTcn4= github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= -github.com/square/certstrap v1.2.0 h1:ecgyABrbFLr8jSbOC6oTBmBek0t/HqtgrMUZCPuyfdw= -github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stumble/gorocksdb v0.0.3 h1:9UU+QA1pqFYJuf9+5p7z1IqdE5k0mma4UAeu2wmX8kA= -github.com/stumble/gorocksdb v0.0.3/go.mod h1:v6IHdFBXk5DJ1K4FZ0xi+eY737quiiBxYtSWXadLybY= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965 h1:1oFLiOyVl+W7bnBzGhf7BbIv9loSFQcieWWYIjLqcAw= -github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/tecbot/gorocksdb v0.0.0-20191017175515-d217d93fd4c5 h1:gVwAW5OwaZlDB5/CfqcGFM9p9C+KxvQKyNOltQ8orj0= github.com/tecbot/gorocksdb v0.0.0-20191017175515-d217d93fd4c5/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk= github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= -github.com/tendermint/tm-cmn v0.2.0 h1:7t7apCmQATegPtv75NLrKoQ3Mjo4jWcGjsedy43ANgE= -github.com/tendermint/tm-db v0.2.0 h1:rJxgdqn6fIiVJZy4zLpY1qVlyD0TU6vhkT4kEf71TQQ= -github.com/tendermint/tm-db v0.2.0/go.mod h1:0cPKWu2Mou3IlxecH+MEUSYc1Ch537alLe6CpFrKzgw= -github.com/tendermint/tm-db v0.3.0 h1:txK8j+sdY+Ml9VfkxU0jW2VUAygKdoODQBS+kTYlWlA= -github.com/tendermint/tm-db v0.3.0/go.mod h1:ZpwA9nGbXwQDyMsIneHgbP4Q1SbPXPdFd9uMzUKLPsU= +github.com/tendermint/tm-db v0.4.0 h1:iPbCcLbf4nwDFhS39Zo1lpdS1X/cT9CkTlUx17FHQgA= +github.com/tendermint/tm-db v0.4.0/go.mod h1:+Cwhgowrf7NBGXmsqFMbwEtbo80XmyrlY5Jsk95JubQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v1.21.0 h1:wYSSj06510qPIzGSua9ZqsncMmWE3Zr55KBERygyrxE= -github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -251,7 +226,6 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= @@ -283,7 +257,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -302,19 +275,11 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn 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-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2 h1:67iHsV9djwGdZpdZNbLuQj6FOzCaZe3w+vhLjn5AcFA= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.0 h1:ItERT+UbGdX+s4u+nQNlVM/Q7cbmf7icKfvzbWqVtq0= -google.golang.org/grpc v1.25.0/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= diff --git a/lite/dbprovider.go b/lite/dbprovider.go index dfdb7a956..35f7270ae 100644 --- a/lite/dbprovider.go +++ b/lite/dbprovider.go @@ -108,10 +108,13 @@ func (dbp *DBProvider) LatestFullCommit(chainID string, minHeight, maxHeight int maxHeight = 1<<63 - 1 } - itr := dbp.db.ReverseIterator( + itr, err := dbp.db.ReverseIterator( signedHeaderKey(chainID, minHeight), append(signedHeaderKey(chainID, maxHeight), byte(0x00)), ) + if err != nil { + panic(err) + } defer itr.Close() for itr.Valid() { @@ -150,8 +153,11 @@ func (dbp *DBProvider) ValidatorSet(chainID string, height int64) (valset *types } func (dbp *DBProvider) getValidatorSet(chainID string, height int64) (valset *types.ValidatorSet, err error) { - vsBz := dbp.db.Get(validatorSetKey(chainID, height)) - if vsBz == nil { + vsBz, err := dbp.db.Get(validatorSetKey(chainID, height)) + if err != nil { + return nil, err + } + if len(vsBz) == 0 { err = lerr.ErrUnknownValidators(chainID, height) return } @@ -194,10 +200,13 @@ func (dbp *DBProvider) deleteAfterN(chainID string, after int) error { dbp.logger.Info("DBProvider.deleteAfterN()...", "chainID", chainID, "after", after) - itr := dbp.db.ReverseIterator( + itr, err := dbp.db.ReverseIterator( signedHeaderKey(chainID, 1), append(signedHeaderKey(chainID, 1<<63-1), byte(0x00)), ) + if err != nil { + panic(err) + } defer itr.Close() var lastHeight int64 = 1<<63 - 1 diff --git a/lite2/store/db/db.go b/lite2/store/db/db.go index 4d72f9425..ee0d26141 100644 --- a/lite2/store/db/db.go +++ b/lite2/store/db/db.go @@ -73,13 +73,16 @@ func (s *dbs) SignedHeader(height int64) (*types.SignedHeader, error) { panic("negative or zero height") } - bz := s.db.Get(s.shKey(height)) - if bz == nil { + bz, err := s.db.Get(s.shKey(height)) + if err != nil { + panic(err) + } + if len(bz) == 0 { return nil, nil } var signedHeader *types.SignedHeader - err := s.cdc.UnmarshalBinaryLengthPrefixed(bz, &signedHeader) + err = s.cdc.UnmarshalBinaryLengthPrefixed(bz, &signedHeader) return signedHeader, err } @@ -89,22 +92,28 @@ func (s *dbs) ValidatorSet(height int64) (*types.ValidatorSet, error) { panic("negative or zero height") } - bz := s.db.Get(s.vsKey(height)) - if bz == nil { + bz, err := s.db.Get(s.vsKey(height)) + if err != nil { + panic(err) + } + if len(bz) == 0 { return nil, nil } var valSet *types.ValidatorSet - err := s.cdc.UnmarshalBinaryLengthPrefixed(bz, &valSet) + err = s.cdc.UnmarshalBinaryLengthPrefixed(bz, &valSet) return valSet, err } // LastSignedHeaderHeight returns the last SignedHeader height stored. func (s *dbs) LastSignedHeaderHeight() (int64, error) { - itr := s.db.ReverseIterator( + itr, err := s.db.ReverseIterator( s.shKey(1), append(s.shKey(1<<63-1), byte(0x00)), ) + if err != nil { + panic(err) + } defer itr.Close() for itr.Valid() { @@ -121,10 +130,13 @@ func (s *dbs) LastSignedHeaderHeight() (int64, error) { // FirstSignedHeaderHeight returns the first SignedHeader height stored. func (s *dbs) FirstSignedHeaderHeight() (int64, error) { - itr := s.db.Iterator( + itr, err := s.db.Iterator( s.shKey(1), append(s.shKey(1<<63-1), byte(0x00)), ) + if err != nil { + panic(err) + } defer itr.Close() for itr.Valid() { diff --git a/node/node.go b/node/node.go index 7decbf191..ffca39ee0 100644 --- a/node/node.go +++ b/node/node.go @@ -1158,12 +1158,15 @@ func LoadStateFromDBOrGenesisDocProvider( // panics if failed to unmarshal bytes func loadGenesisDoc(db dbm.DB) (*types.GenesisDoc, error) { - b := db.Get(genesisDocKey) + b, err := db.Get(genesisDocKey) + if err != nil { + panic(err) + } if len(b) == 0 { return nil, errors.New("genesis doc not found") } var genDoc *types.GenesisDoc - err := cdc.UnmarshalJSON(b, &genDoc) + err = cdc.UnmarshalJSON(b, &genDoc) if err != nil { panic(fmt.Sprintf("Failed to load genesis doc due to unmarshaling error: %v (bytes: %X)", err, b)) } diff --git a/p2p/trust/store.go b/p2p/trust/store.go index c40f4ff2f..502c88f90 100644 --- a/p2p/trust/store.go +++ b/p2p/trust/store.go @@ -148,13 +148,16 @@ func (tms *MetricStore) size() int { // cmn.Panics if file is corrupt func (tms *MetricStore) loadFromDB() bool { // Obtain the history data we have so far - bytes := tms.db.Get(trustMetricKey) + bytes, err := tms.db.Get(trustMetricKey) + if err != nil { + panic(err) + } if bytes == nil { return false } peers := make(map[string]MetricHistoryJSON) - err := json.Unmarshal(bytes, &peers) + err = json.Unmarshal(bytes, &peers) if err != nil { panic(fmt.Sprintf("Could not unmarshal Trust Metric Store DB data: %v", err)) } diff --git a/state/store.go b/state/store.go index 545718688..e49e289f0 100644 --- a/state/store.go +++ b/state/store.go @@ -72,12 +72,15 @@ func LoadState(db dbm.DB) State { } func loadState(db dbm.DB, key []byte) (state State) { - buf := db.Get(key) + buf, err := db.Get(key) + if err != nil { + panic(err) + } if len(buf) == 0 { return state } - err := cdc.UnmarshalBinaryBare(buf, &state) + err = cdc.UnmarshalBinaryBare(buf, &state) if err != nil { // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED tmos.Exit(fmt.Sprintf(`LoadState: Data has been corrupted or its spec has changed: @@ -147,13 +150,16 @@ func (arz *ABCIResponses) ResultsHash() []byte { // This is useful for recovering from crashes where we called app.Commit and before we called // s.Save(). It can also be used to produce Merkle proofs of the result of txs. func LoadABCIResponses(db dbm.DB, height int64) (*ABCIResponses, error) { - buf := db.Get(calcABCIResponsesKey(height)) + buf, err := db.Get(calcABCIResponsesKey(height)) + if err != nil { + return nil, err + } if len(buf) == 0 { return nil, ErrNoABCIResponsesForHeight{height} } abciResponses := new(ABCIResponses) - err := cdc.UnmarshalBinaryBare(buf, abciResponses) + err = cdc.UnmarshalBinaryBare(buf, abciResponses) if err != nil { // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED tmos.Exit(fmt.Sprintf(`LoadABCIResponses: Data has been corrupted or its spec has @@ -219,13 +225,16 @@ func lastStoredHeightFor(height, lastHeightChanged int64) int64 { // CONTRACT: Returned ValidatorsInfo can be mutated. func loadValidatorsInfo(db dbm.DB, height int64) *ValidatorsInfo { - buf := db.Get(calcValidatorsKey(height)) + buf, err := db.Get(calcValidatorsKey(height)) + if err != nil { + panic(err) + } if len(buf) == 0 { return nil } v := new(ValidatorsInfo) - err := cdc.UnmarshalBinaryBare(buf, v) + err = cdc.UnmarshalBinaryBare(buf, v) if err != nil { // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED tmos.Exit(fmt.Sprintf(`LoadValidators: Data has been corrupted or its spec has changed: @@ -296,13 +305,16 @@ func LoadConsensusParams(db dbm.DB, height int64) (types.ConsensusParams, error) } func loadConsensusParamsInfo(db dbm.DB, height int64) *ConsensusParamsInfo { - buf := db.Get(calcConsensusParamsKey(height)) + buf, err := db.Get(calcConsensusParamsKey(height)) + if err != nil { + panic(err) + } if len(buf) == 0 { return nil } paramsInfo := new(ConsensusParamsInfo) - err := cdc.UnmarshalBinaryBare(buf, paramsInfo) + err = cdc.UnmarshalBinaryBare(buf, paramsInfo) if err != nil { // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED tmos.Exit(fmt.Sprintf(`LoadConsensusParams: Data has been corrupted or its spec has changed: diff --git a/state/txindex/kv/kv.go b/state/txindex/kv/kv.go index 956af153e..ce894f25b 100644 --- a/state/txindex/kv/kv.go +++ b/state/txindex/kv/kv.go @@ -62,13 +62,16 @@ func (txi *TxIndex) Get(hash []byte) (*types.TxResult, error) { return nil, txindex.ErrorEmptyHash } - rawBytes := txi.store.Get(hash) + rawBytes, err := txi.store.Get(hash) + if err != nil { + panic(err) + } if rawBytes == nil { return nil, nil } txResult := new(types.TxResult) - err := cdc.UnmarshalBinaryBare(rawBytes, &txResult) + err = cdc.UnmarshalBinaryBare(rawBytes, &txResult) if err != nil { return nil, fmt.Errorf("error reading TxResult: %v", err) } @@ -393,7 +396,10 @@ func (txi *TxIndex) match( switch { case c.Op == query.OpEqual: - it := dbm.IteratePrefix(txi.store, startKeyBz) + it, err := dbm.IteratePrefix(txi.store, startKeyBz) + if err != nil { + panic(err) + } defer it.Close() for ; it.Valid(); it.Next() { @@ -404,7 +410,10 @@ func (txi *TxIndex) match( // XXX: startKey does not apply here. // For example, if startKey = "account.owner/an/" and search query = "account.owner CONTAINS an" // we can't iterate with prefix "account.owner/an/" because we might miss keys like "account.owner/Ulan/" - it := dbm.IteratePrefix(txi.store, startKey(c.CompositeKey)) + it, err := dbm.IteratePrefix(txi.store, startKey(c.CompositeKey)) + if err != nil { + panic(err) + } defer it.Close() for ; it.Valid(); it.Next() { @@ -463,7 +472,10 @@ func (txi *TxIndex) matchRange( lowerBound := r.lowerBoundValue() upperBound := r.upperBoundValue() - it := dbm.IteratePrefix(txi.store, startKey) + it, err := dbm.IteratePrefix(txi.store, startKey) + if err != nil { + panic(err) + } defer it.Close() LOOP: diff --git a/store/store.go b/store/store.go index 8d2235b45..2f9ba93fd 100644 --- a/store/store.go +++ b/store/store.go @@ -78,7 +78,10 @@ func (bs *BlockStore) LoadBlock(height int64) *types.Block { // If no block is found for that hash, it returns nil. // Panics if it fails to parse height associated with the given hash. func (bs *BlockStore) LoadBlockByHash(hash []byte) *types.Block { - bz := bs.db.Get(calcBlockHashKey(hash)) + bz, err := bs.db.Get(calcBlockHashKey(hash)) + if err != nil { + panic(err) + } if len(bz) == 0 { return nil } @@ -97,11 +100,14 @@ func (bs *BlockStore) LoadBlockByHash(hash []byte) *types.Block { // If no part is found for the given height and index, it returns nil. func (bs *BlockStore) LoadBlockPart(height int64, index int) *types.Part { var part = new(types.Part) - bz := bs.db.Get(calcBlockPartKey(height, index)) + bz, err := bs.db.Get(calcBlockPartKey(height, index)) + if err != nil { + panic(err) + } if len(bz) == 0 { return nil } - err := cdc.UnmarshalBinaryBare(bz, part) + err = cdc.UnmarshalBinaryBare(bz, part) if err != nil { panic(errors.Wrap(err, "Error reading block part")) } @@ -112,11 +118,14 @@ func (bs *BlockStore) LoadBlockPart(height int64, index int) *types.Part { // If no block is found for the given height, it returns nil. func (bs *BlockStore) LoadBlockMeta(height int64) *types.BlockMeta { var blockMeta = new(types.BlockMeta) - bz := bs.db.Get(calcBlockMetaKey(height)) + bz, err := bs.db.Get(calcBlockMetaKey(height)) + if err != nil { + panic(err) + } if len(bz) == 0 { return nil } - err := cdc.UnmarshalBinaryBare(bz, blockMeta) + err = cdc.UnmarshalBinaryBare(bz, blockMeta) if err != nil { panic(errors.Wrap(err, "Error reading block meta")) } @@ -129,11 +138,14 @@ func (bs *BlockStore) LoadBlockMeta(height int64) *types.BlockMeta { // If no commit is found for the given height, it returns nil. func (bs *BlockStore) LoadBlockCommit(height int64) *types.Commit { var commit = new(types.Commit) - bz := bs.db.Get(calcBlockCommitKey(height)) + bz, err := bs.db.Get(calcBlockCommitKey(height)) + if err != nil { + panic(err) + } if len(bz) == 0 { return nil } - err := cdc.UnmarshalBinaryBare(bz, commit) + err = cdc.UnmarshalBinaryBare(bz, commit) if err != nil { panic(errors.Wrap(err, "Error reading block commit")) } @@ -145,11 +157,14 @@ func (bs *BlockStore) LoadBlockCommit(height int64) *types.Commit { // a new block at `height + 1` that includes this commit in its block.LastCommit. func (bs *BlockStore) LoadSeenCommit(height int64) *types.Commit { var commit = new(types.Commit) - bz := bs.db.Get(calcSeenCommitKey(height)) + bz, err := bs.db.Get(calcSeenCommitKey(height)) + if err != nil { + panic(err) + } if len(bz) == 0 { return nil } - err := cdc.UnmarshalBinaryBare(bz, commit) + err = cdc.UnmarshalBinaryBare(bz, commit) if err != nil { panic(errors.Wrap(err, "Error reading block seen commit")) } @@ -261,14 +276,17 @@ func (bsj BlockStoreStateJSON) Save(db dbm.DB) { // LoadBlockStoreStateJSON returns the BlockStoreStateJSON as loaded from disk. // If no BlockStoreStateJSON was previously persisted, it returns the zero value. func LoadBlockStoreStateJSON(db dbm.DB) BlockStoreStateJSON { - bytes := db.Get(blockStoreKey) + bytes, err := db.Get(blockStoreKey) + if err != nil { + panic(err) + } if len(bytes) == 0 { return BlockStoreStateJSON{ Height: 0, } } bsj := BlockStoreStateJSON{} - err := cdc.UnmarshalJSON(bytes, &bsj) + err = cdc.UnmarshalJSON(bytes, &bsj) if err != nil { panic(fmt.Sprintf("Could not unmarshal bytes: %X", bytes)) } diff --git a/store/store_test.go b/store/store_test.go index 70d7e1c46..7fedf8606 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -76,7 +76,8 @@ func TestLoadBlockStoreStateJSON(t *testing.T) { func TestNewBlockStore(t *testing.T) { db := db.NewMemDB() - db.Set(blockStoreKey, []byte(`{"height": "10000"}`)) + err := db.Set(blockStoreKey, []byte(`{"height": "10000"}`)) + require.NoError(t, err) bs := NewBlockStore(db) require.Equal(t, int64(10000), bs.Height(), "failed to properly parse blockstore") @@ -92,7 +93,8 @@ func TestNewBlockStore(t *testing.T) { tt := tt // Expecting a panic here on trying to parse an invalid blockStore _, _, panicErr := doFn(func() (interface{}, error) { - db.Set(blockStoreKey, tt.data) + err := db.Set(blockStoreKey, tt.data) + require.NoError(t, err) _ = NewBlockStore(db) return nil, nil }) @@ -100,7 +102,8 @@ func TestNewBlockStore(t *testing.T) { assert.Contains(t, fmt.Sprintf("%#v", panicErr), tt.wantErr, "#%d data: %q", i, tt.data) } - db.Set(blockStoreKey, nil) + err = db.Set(blockStoreKey, nil) + require.NoError(t, err) bs = NewBlockStore(db) assert.Equal(t, bs.Height(), int64(0), "expecting nil bytes to be unmarshaled alright") } @@ -268,7 +271,8 @@ func TestBlockStoreSaveLoadBlock(t *testing.T) { } if tuple.corruptBlockInDB { - db.Set(calcBlockMetaKey(tuple.block.Height), []byte("block-bogus")) + err := db.Set(calcBlockMetaKey(tuple.block.Height), []byte("block-bogus")) + require.NoError(t, err) } bBlock := bs.LoadBlock(tuple.block.Height) bBlockMeta := bs.LoadBlockMeta(tuple.block.Height) @@ -277,7 +281,8 @@ func TestBlockStoreSaveLoadBlock(t *testing.T) { db.Delete(calcSeenCommitKey(tuple.block.Height)) } if tuple.corruptSeenCommitInDB { - db.Set(calcSeenCommitKey(tuple.block.Height), []byte("bogus-seen-commit")) + err := db.Set(calcSeenCommitKey(tuple.block.Height), []byte("bogus-seen-commit")) + require.NoError(t, err) } bSeenCommit := bs.LoadSeenCommit(tuple.block.Height) @@ -286,7 +291,8 @@ func TestBlockStoreSaveLoadBlock(t *testing.T) { db.Delete(calcBlockCommitKey(commitHeight)) } if tuple.corruptCommitInDB { - db.Set(calcBlockCommitKey(commitHeight), []byte("foo-bogus")) + err := db.Set(calcBlockCommitKey(commitHeight), []byte("foo-bogus")) + require.NoError(t, err) } bCommit := bs.LoadBlockCommit(commitHeight) return &quad{block: bBlock, seenCommit: bSeenCommit, commit: bCommit, @@ -342,13 +348,15 @@ func TestLoadBlockPart(t *testing.T) { require.Nil(t, res, "a non-existent block part should return nil") // 2. Next save a corrupted block then try to load it - db.Set(calcBlockPartKey(height, index), []byte("Tendermint")) + err := db.Set(calcBlockPartKey(height, index), []byte("Tendermint")) + require.NoError(t, err) res, _, panicErr = doFn(loadPart) require.NotNil(t, panicErr, "expecting a non-nil panic") require.Contains(t, panicErr.Error(), "unmarshal to types.Part failed") // 3. A good block serialized and saved to the DB should be retrievable - db.Set(calcBlockPartKey(height, index), cdc.MustMarshalBinaryBare(part1)) + err = db.Set(calcBlockPartKey(height, index), cdc.MustMarshalBinaryBare(part1)) + require.NoError(t, err) gotPart, _, panicErr := doFn(loadPart) require.Nil(t, panicErr, "an existent and proper block should not panic") require.Nil(t, res, "a properly saved block should return a proper block") @@ -371,14 +379,16 @@ func TestLoadBlockMeta(t *testing.T) { require.Nil(t, res, "a non-existent blockMeta should return nil") // 2. Next save a corrupted blockMeta then try to load it - db.Set(calcBlockMetaKey(height), []byte("Tendermint-Meta")) + err := db.Set(calcBlockMetaKey(height), []byte("Tendermint-Meta")) + require.NoError(t, err) res, _, panicErr = doFn(loadMeta) require.NotNil(t, panicErr, "expecting a non-nil panic") require.Contains(t, panicErr.Error(), "unmarshal to types.BlockMeta") // 3. A good blockMeta serialized and saved to the DB should be retrievable meta := &types.BlockMeta{} - db.Set(calcBlockMetaKey(height), cdc.MustMarshalBinaryBare(meta)) + err = db.Set(calcBlockMetaKey(height), cdc.MustMarshalBinaryBare(meta)) + require.NoError(t, err) gotMeta, _, panicErr := doFn(loadMeta) require.Nil(t, panicErr, "an existent and proper block should not panic") require.Nil(t, res, "a properly saved blockMeta should return a proper blocMeta ")