From 94b1de22a7db511e3770e2bc73be6d6dca177007 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 10 Apr 2023 11:18:03 +0200 Subject: [PATCH 1/3] add logger to replace internal fmt --- basic_test.go | 7 ++-- benchmarks/bench_test.go | 3 +- benchmarks/cosmos-exim/main.go | 7 ++-- cmd/iaviewer/main.go | 3 +- diff_test.go | 5 +-- export_test.go | 13 +++---- go.mod | 6 ++-- go.sum | 17 +++++++-- immutable_tree.go | 15 ++++---- import_test.go | 29 +++++++-------- iterator_test.go | 13 +++---- mutable_tree.go | 15 ++++---- mutable_tree_test.go | 53 +++++++++++++-------------- nodedb_test.go | 3 +- proof_iavl_test.go | 3 +- proof_ics23_test.go | 3 +- testutils_test.go | 5 +-- tree_random_test.go | 3 +- tree_test.go | 65 +++++++++++++++++----------------- 19 files changed, 151 insertions(+), 117 deletions(-) diff --git a/basic_test.go b/basic_test.go index 0ae4b0138..dbf7b6d99 100644 --- a/basic_test.go +++ b/basic_test.go @@ -7,6 +7,7 @@ import ( "sort" "testing" + "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" iavlrand "github.com/cosmos/iavl/internal/rand" "github.com/stretchr/testify/assert" @@ -445,7 +446,7 @@ func TestPersistence(t *testing.T) { } // Construct some tree and save it - t1, err := NewMutableTree(db, 0, false) + t1, err := NewMutableTree(db, 0, false, log.NewNopLogger()) require.NoError(t, err) for key, value := range records { t1.Set([]byte(key), []byte(value)) @@ -453,7 +454,7 @@ func TestPersistence(t *testing.T) { t1.SaveVersion() // Load a tree - t2, err := NewMutableTree(db, 0, false) + t2, err := NewMutableTree(db, 0, false, log.NewNopLogger()) require.NoError(t, err) t2.Load() for key, value := range records { @@ -503,7 +504,7 @@ func TestProof(t *testing.T) { func TestTreeProof(t *testing.T) { db := db.NewMemDB() - tree, err := NewMutableTree(db, 100, false) + tree, err := NewMutableTree(db, 100, false, log.NewNopLogger()) require.NoError(t, err) hash, err := tree.Hash() require.NoError(t, err) diff --git a/benchmarks/bench_test.go b/benchmarks/bench_test.go index 79c56d631..f4568f416 100644 --- a/benchmarks/bench_test.go +++ b/benchmarks/bench_test.go @@ -8,6 +8,7 @@ import ( "strings" "testing" + "cosmossdk.io/log" "github.com/stretchr/testify/require" db "github.com/cosmos/cosmos-db" @@ -25,7 +26,7 @@ func randBytes(length int) []byte { } func prepareTree(b *testing.B, db db.DB, size, keyLen, dataLen int) (*iavl.MutableTree, [][]byte) { - t, err := iavl.NewMutableTreeWithOpts(db, size, nil, false) + t, err := iavl.NewMutableTreeWithOpts(db, size, nil, false, log.NewNopLogger()) require.NoError(b, err) keys := make([][]byte, size) diff --git a/benchmarks/cosmos-exim/main.go b/benchmarks/cosmos-exim/main.go index b6e3023fd..956956da6 100644 --- a/benchmarks/cosmos-exim/main.go +++ b/benchmarks/cosmos-exim/main.go @@ -5,6 +5,7 @@ import ( "os" "time" + "cosmossdk.io/log" tmdb "github.com/cosmos/cosmos-db" "github.com/cosmos/iavl" ) @@ -90,7 +91,7 @@ func runExport(dbPath string) (int64, map[string][]*iavl.ExportNode, error) { if err != nil { return 0, nil, err } - tree, err := iavl.NewMutableTree(tmdb.NewPrefixDB(ldb, []byte("s/k:main/")), 0, false) + tree, err := iavl.NewMutableTree(tmdb.NewPrefixDB(ldb, []byte("s/k:main/")), 0, false, log.NewNopLogger()) if err != nil { return 0, nil, err } @@ -105,7 +106,7 @@ func runExport(dbPath string) (int64, map[string][]*iavl.ExportNode, error) { totalStats := Stats{} for _, name := range stores { db := tmdb.NewPrefixDB(ldb, []byte("s/k:"+name+"/")) - tree, err := iavl.NewMutableTree(db, 0, false) + tree, err := iavl.NewMutableTree(db, 0, false, log.NewNopLogger()) if err != nil { return 0, nil, err } @@ -173,7 +174,7 @@ func runImport(version int64, exports map[string][]*iavl.ExportNode) error { if err != nil { return err } - newTree, err := iavl.NewMutableTree(newDB, 0, false) + newTree, err := iavl.NewMutableTree(newDB, 0, false, log.NewNopLogger()) if err != nil { return err } diff --git a/cmd/iaviewer/main.go b/cmd/iaviewer/main.go index 4f3a580bf..b3cce09e7 100644 --- a/cmd/iaviewer/main.go +++ b/cmd/iaviewer/main.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" + "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/iavl" @@ -126,7 +127,7 @@ func ReadTree(dir string, version int, prefix []byte) (*iavl.MutableTree, error) db = dbm.NewPrefixDB(db, prefix) } - tree, err := iavl.NewMutableTree(db, DefaultCacheSize, false) + tree, err := iavl.NewMutableTree(db, DefaultCacheSize, false, log.NewNopLogger()) if err != nil { return nil, err } diff --git a/diff_test.go b/diff_test.go index ea227f1d1..1b8ae2634 100644 --- a/diff_test.go +++ b/diff_test.go @@ -8,6 +8,7 @@ import ( "sort" "testing" + "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/require" ) @@ -19,7 +20,7 @@ func TestDiffRoundTrip(t *testing.T) { // apply changeSets to tree db := db.NewMemDB() - tree, err := NewMutableTree(db, 0, true) + tree, err := NewMutableTree(db, 0, true, log.NewNopLogger()) require.NoError(t, err) for i := range changeSets { v, err := tree.SaveChangeSet(changeSets[i]) @@ -29,7 +30,7 @@ func TestDiffRoundTrip(t *testing.T) { // extract change sets from db var extractChangeSets []*ChangeSet - tree2 := NewImmutableTree(db, 0, true) + tree2 := NewImmutableTree(db, 0, true, log.NewNopLogger()) err = tree2.TraverseStateChanges(0, math.MaxInt64, func(version int64, changeSet *ChangeSet) error { extractChangeSets = append(extractChangeSets, changeSet) return nil diff --git a/export_test.go b/export_test.go index c60a9f042..e67dc19d1 100644 --- a/export_test.go +++ b/export_test.go @@ -5,6 +5,7 @@ import ( "math/rand" "testing" + "cosmossdk.io/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -14,7 +15,7 @@ import ( // setupExportTreeBasic sets up a basic tree with a handful of // create/update/delete operations over a few versions. func setupExportTreeBasic(t require.TestingT) *ImmutableTree { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("x"), []byte{255}) @@ -74,7 +75,7 @@ func setupExportTreeRandom(t *testing.T) *ImmutableTree { ) r := rand.New(rand.NewSource(randSeed)) - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) var version int64 @@ -134,7 +135,7 @@ func setupExportTreeSized(t require.TestingT, treeSize int) *ImmutableTree { //n ) r := rand.New(rand.NewSource(randSeed)) - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) for i := 0; i < treeSize; i++ { @@ -229,7 +230,7 @@ func TestExporterCompress(t *testing.T) { func TestExporter_Import(t *testing.T) { testcases := map[string]*ImmutableTree{ - "empty tree": NewImmutableTree(db.NewMemDB(), 0, false), + "empty tree": NewImmutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()), "basic tree": setupExportTreeBasic(t), } if !testing.Short() { @@ -256,7 +257,7 @@ func TestExporter_Import(t *testing.T) { exporter = NewCompressExporter(innerExporter) } - newTree, err := NewMutableTree(db.NewMemDB(), 0, false) + newTree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) innerImporter, err := newTree.Import(tree.Version()) require.NoError(t, err) @@ -327,7 +328,7 @@ func TestExporter_Close(t *testing.T) { } func TestExporter_DeleteVersionErrors(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("a"), []byte{1}) diff --git a/go.mod b/go.mod index d833e8199..a9242688e 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/cosmos/iavl go 1.18 require ( + cosmossdk.io/log v1.0.0 github.com/cosmos/cosmos-db v1.0.0-rc.1 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab github.com/emicklei/dot v1.4.2 @@ -10,6 +11,7 @@ require ( github.com/golangci/golangci-lint v1.52.2 github.com/stretchr/testify v1.8.2 golang.org/x/crypto v0.8.0 + google.golang.org/protobuf v1.28.1 ) require ( @@ -116,7 +118,7 @@ require ( github.com/maratori/testpackage v1.1.1 // indirect github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mbilski/exhaustivestruct v1.2.0 // indirect @@ -144,6 +146,7 @@ require ( github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/rs/zerolog v1.29.0 // indirect github.com/ryancurrah/gomodguard v1.3.0 // indirect github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect @@ -192,7 +195,6 @@ require ( golang.org/x/text v0.9.0 // indirect golang.org/x/tools v0.7.0 // indirect gonum.org/v1/gonum v0.11.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index d84de0439..47e51a404 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cosmossdk.io/log v1.0.0 h1:NGKZ/A5rd4PduDfoscgABklX557PWjQINbosZy/m3Jk= +cosmossdk.io/log v1.0.0/go.mod h1:CwX9BLiBruZb7lzLlRr3R231d/fVPUXk8gAdV4LQap0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Abirdcfly/dupword v0.0.11 h1:z6v8rMETchZXUIuHxYNmlUAuKuB21PeaSymTed16wgU= github.com/Abirdcfly/dupword v0.0.11/go.mod h1:wH8mVGuf3CP5fsBTkfWwwwKTjDnVVCxtU8d8rgeVYXA= @@ -133,6 +135,7 @@ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcju github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cosmos/cosmos-db v1.0.0-rc.1 h1:SjnT8B6WKMW9WEIX32qMhnEEKcI7ZP0+G1Sa9HD3nmY= github.com/cosmos/cosmos-db v1.0.0-rc.1/go.mod h1:Dnmk3flSf5lkwCqvvjNpoxjpXzhxnCAFzKHlbaForso= github.com/cosmos/gogoproto v1.4.3 h1:RP3yyVREh9snv/lsOvmsAPQt8f44LgL281X0IOIhhcI= @@ -233,6 +236,7 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -462,14 +466,16 @@ github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859 github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= @@ -584,6 +590,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= +github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= @@ -928,7 +937,9 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210909193231-528a39cd75f3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -944,6 +955,7 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1179,6 +1191,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/immutable_tree.go b/immutable_tree.go index 2e5335f86..dcf637131 100644 --- a/immutable_tree.go +++ b/immutable_tree.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" ) @@ -14,6 +15,8 @@ import ( // Returned key/value byte slices must not be modified, since they may point to data located inside // IAVL which would also be modified. type ImmutableTree struct { + logger log.Logger + root *Node ndb *nodeDB version int64 @@ -21,21 +24,19 @@ type ImmutableTree struct { } // NewImmutableTree creates both in-memory and persistent instances -func NewImmutableTree(db dbm.DB, cacheSize int, skipFastStorageUpgrade bool) *ImmutableTree { +func NewImmutableTree(db dbm.DB, cacheSize int, skipFastStorageUpgrade bool, lg log.Logger) *ImmutableTree { if db == nil { // In-memory Tree. return &ImmutableTree{} } - return &ImmutableTree{ - // NodeDB-backed Tree. - ndb: newNodeDB(db, cacheSize, nil), - skipFastStorageUpgrade: skipFastStorageUpgrade, - } + + return NewImmutableTreeWithOpts(db, cacheSize, nil, skipFastStorageUpgrade, lg) } // NewImmutableTreeWithOpts creates an ImmutableTree with the given options. -func NewImmutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastStorageUpgrade bool) *ImmutableTree { +func NewImmutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastStorageUpgrade bool, lg log.Logger) *ImmutableTree { return &ImmutableTree{ + logger: lg, // NodeDB-backed Tree. ndb: newNodeDB(db, cacheSize, opts), skipFastStorageUpgrade: skipFastStorageUpgrade, diff --git a/import_test.go b/import_test.go index d6f00eb2f..f5b4ff049 100644 --- a/import_test.go +++ b/import_test.go @@ -3,6 +3,7 @@ package iavl import ( "testing" + "cosmossdk.io/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -10,7 +11,7 @@ import ( ) func ExampleImporter() { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) if err != nil { panic(err) } @@ -54,7 +55,7 @@ func ExampleImporter() { exported = append(exported, node) } - newTree, err := NewMutableTree(db.NewMemDB(), 0, false) + newTree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) if err != nil { panic(err) } @@ -76,14 +77,14 @@ func ExampleImporter() { } func TestImporter_NegativeVersion(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Import(-1) require.Error(t, err) } func TestImporter_NotEmpty(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("a"), []byte{1}) require.NoError(t, err) @@ -97,14 +98,14 @@ func TestImporter_NotEmpty(t *testing.T) { func TestImporter_NotEmptyDatabase(t *testing.T) { db := db.NewMemDB() - tree, err := NewMutableTree(db, 0, false) + tree, err := NewMutableTree(db, 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("a"), []byte{1}) require.NoError(t, err) _, _, err = tree.SaveVersion() require.NoError(t, err) - tree, err = NewMutableTree(db, 0, false) + tree, err = NewMutableTree(db, 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Load() require.NoError(t, err) @@ -114,7 +115,7 @@ func TestImporter_NotEmptyDatabase(t *testing.T) { } func TestImporter_NotEmptyUnsaved(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("a"), []byte{1}) require.NoError(t, err) @@ -142,7 +143,7 @@ func TestImporter_Add(t *testing.T) { for desc, tc := range testcases { tc := tc // appease scopelint t.Run(desc, func(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(1) require.NoError(t, err) @@ -162,7 +163,7 @@ func TestImporter_Add(t *testing.T) { } func TestImporter_Add_Closed(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(1) require.NoError(t, err) @@ -174,7 +175,7 @@ func TestImporter_Add_Closed(t *testing.T) { } func TestImporter_Close(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(1) require.NoError(t, err) @@ -191,7 +192,7 @@ func TestImporter_Close(t *testing.T) { } func TestImporter_Commit(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(1) require.NoError(t, err) @@ -207,7 +208,7 @@ func TestImporter_Commit(t *testing.T) { } func TestImporter_Commit_Closed(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(1) require.NoError(t, err) @@ -222,7 +223,7 @@ func TestImporter_Commit_Closed(t *testing.T) { } func TestImporter_Commit_Empty(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) importer, err := tree.Import(3) require.NoError(t, err) @@ -252,7 +253,7 @@ func BenchmarkImport(b *testing.B) { b.StartTimer() for n := 0; n < b.N; n++ { - newTree, err := NewMutableTree(db.NewMemDB(), 0, false) + newTree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(b, err) importer, err := newTree.Import(tree.Version()) require.NoError(b, err) diff --git a/iterator_test.go b/iterator_test.go index 52455ebeb..c6d507e0c 100644 --- a/iterator_test.go +++ b/iterator_test.go @@ -5,6 +5,7 @@ import ( "sort" "testing" + log "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/iavl/fastnode" "github.com/stretchr/testify/require" @@ -56,7 +57,7 @@ func TestUnsavedFastIterator_NewIterator_NilAdditions_Failure(t *testing.T) { } t.Run("Nil additions given", func(t *testing.T) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) itr := NewUnsavedFastIterator(start, end, ascending, tree.ndb, nil, tree.unsavedFastNodeRemovals) performTest(t, itr) @@ -64,7 +65,7 @@ func TestUnsavedFastIterator_NewIterator_NilAdditions_Failure(t *testing.T) { }) t.Run("Nil removals given", func(t *testing.T) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) itr := NewUnsavedFastIterator(start, end, ascending, tree.ndb, tree.unsavedFastNodeAdditions, nil) performTest(t, itr) @@ -78,7 +79,7 @@ func TestUnsavedFastIterator_NewIterator_NilAdditions_Failure(t *testing.T) { }) t.Run("Additions and removals are nil", func(t *testing.T) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) itr := NewUnsavedFastIterator(start, end, ascending, tree.ndb, nil, nil) performTest(t, itr) @@ -248,7 +249,7 @@ func iteratorSuccessTest(t *testing.T, config *iteratorTestConfig) { } func setupIteratorAndMirror(t *testing.T, config *iteratorTestConfig) (dbm.Iterator, [][]string) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) mirror := setupMirrorForIterator(t, config, tree) @@ -265,7 +266,7 @@ func setupIteratorAndMirror(t *testing.T, config *iteratorTestConfig) (dbm.Itera } func setupFastIteratorAndMirror(t *testing.T, config *iteratorTestConfig) (dbm.Iterator, [][]string) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) mirror := setupMirrorForIterator(t, config, tree) @@ -277,7 +278,7 @@ func setupFastIteratorAndMirror(t *testing.T, config *iteratorTestConfig) (dbm.I } func setupUnsavedFastIterator(t *testing.T, config *iteratorTestConfig) (dbm.Iterator, [][]string) { - tree, err := NewMutableTree(dbm.NewMemDB(), 0, false) + tree, err := NewMutableTree(dbm.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) // For unsaved fast iterator, we would like to test the state where diff --git a/mutable_tree.go b/mutable_tree.go index 5fc5cfef1..80f37363e 100644 --- a/mutable_tree.go +++ b/mutable_tree.go @@ -7,11 +7,11 @@ import ( "sort" "sync" + log "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/iavl/fastnode" ibytes "github.com/cosmos/iavl/internal/bytes" - "github.com/cosmos/iavl/internal/logger" ) // commitGap after upgrade/delete commitGap FastNodes when commit the batch @@ -32,6 +32,8 @@ var ErrKeyDoesNotExist = errors.New("key does not exist") // // The inner ImmutableTree should not be used directly by callers. type MutableTree struct { + logger log.Logger + *ImmutableTree // The current, working tree. lastSaved *ImmutableTree // The most recently saved tree. unsavedFastNodeAdditions map[string]*fastnode.Node // FastNodes that have not yet been saved to disk @@ -43,16 +45,17 @@ type MutableTree struct { } // NewMutableTree returns a new tree with the specified cache size and datastore. -func NewMutableTree(db dbm.DB, cacheSize int, skipFastStorageUpgrade bool) (*MutableTree, error) { - return NewMutableTreeWithOpts(db, cacheSize, nil, skipFastStorageUpgrade) +func NewMutableTree(db dbm.DB, cacheSize int, skipFastStorageUpgrade bool, lg log.Logger) (*MutableTree, error) { + return NewMutableTreeWithOpts(db, cacheSize, nil, skipFastStorageUpgrade, lg) } // NewMutableTreeWithOpts returns a new tree with the specified options. -func NewMutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastStorageUpgrade bool) (*MutableTree, error) { +func NewMutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastStorageUpgrade bool, lg log.Logger) (*MutableTree, error) { ndb := newNodeDB(db, cacheSize, opts) head := &ImmutableTree{ndb: ndb, skipFastStorageUpgrade: skipFastStorageUpgrade} return &MutableTree{ + logger: lg, ImmutableTree: head, lastSaved: head.clone(), unsavedFastNodeAdditions: make(map[string]*fastnode.Node), @@ -315,7 +318,7 @@ func (tree *MutableTree) Remove(key []byte) ([]byte, bool, error) { // - new leftmost leaf key for tree after successfully removing 'key' if changed. // - the removed value func (tree *MutableTree) recursiveRemove(node *Node, key []byte) (newSelf *Node, newKey []byte, newValue []byte, removed bool, err error) { - logger.Debug("recursiveRemove node: %v, key: %x\n", node, key) + tree.logger.Debug("recursiveRemove", "node", node, "key", key) if node.isLeaf() { if bytes.Equal(key, node.key) { return nil, nil, node.value, true, nil @@ -696,7 +699,7 @@ func (tree *MutableTree) SaveVersion() ([]byte, int64, error) { return nil, version, fmt.Errorf("version %d was already saved to different hash from %X (existing nodeKey %d)", version, newHash, existingNodeKey) } - logger.Debug("SAVE TREE %v\n", version) + tree.logger.Debug("SAVE TREE", "version", version) // save new nodes if tree.root == nil { if err := tree.ndb.SaveEmptyRoot(version); err != nil { diff --git a/mutable_tree_test.go b/mutable_tree_test.go index 1ccbd06b8..c7f045937 100644 --- a/mutable_tree_test.go +++ b/mutable_tree_test.go @@ -10,6 +10,7 @@ import ( "sync" "testing" + "cosmossdk.io/log" "github.com/cosmos/iavl/fastnode" "github.com/cosmos/iavl/internal/encoding" @@ -34,7 +35,7 @@ var ( func setupMutableTree(t *testing.T, skipFastStorageUpgrade bool) *MutableTree { memDB := db.NewMemDB() - tree, err := NewMutableTree(memDB, 0, skipFastStorageUpgrade) + tree, err := NewMutableTree(memDB, 0, skipFastStorageUpgrade, log.NewNopLogger()) require.NoError(t, err) return tree } @@ -257,7 +258,7 @@ func TestMutableTree_LoadVersion_Empty(t *testing.T) { func TestMutableTree_InitialVersion(t *testing.T) { memDB := db.NewMemDB() - tree, err := NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false) + tree, err := NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("a"), []byte{0x01}) @@ -273,20 +274,20 @@ func TestMutableTree_InitialVersion(t *testing.T) { assert.EqualValues(t, 10, version) // Reloading the tree with the same initial version is fine - tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false) + tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false, log.NewNopLogger()) require.NoError(t, err) version, err = tree.Load() require.NoError(t, err) assert.EqualValues(t, 10, version) // Reloading the tree with an initial version beyond the lowest should error - tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 10}, false) + tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 10}, false, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Load() require.Error(t, err) // Reloading the tree with a lower initial version is fine, and new versions can be produced - tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 3}, false) + tree, err = NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 3}, false, log.NewNopLogger()) require.NoError(t, err) version, err = tree.Load() require.NoError(t, err) @@ -313,7 +314,7 @@ func TestMutableTree_SetInitialVersion(t *testing.T) { func BenchmarkMutableTree_Set(b *testing.B) { db, err := db.NewDB("test", db.MemDBBackend, "") require.NoError(b, err) - t, err := NewMutableTree(db, 100000, false) + t, err := NewMutableTree(db, 100000, false, log.NewNopLogger()) require.NoError(b, err) for i := 0; i < 1000000; i++ { _, err = t.Set(iavlrand.RandBytes(10), []byte{}) @@ -332,7 +333,7 @@ func BenchmarkMutableTree_Set(b *testing.B) { func prepareTree(t *testing.T) *MutableTree { mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 1000, false) + tree, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) for i := 0; i < 100; i++ { _, err = tree.Set([]byte{byte(i)}, []byte("a")) @@ -349,7 +350,7 @@ func prepareTree(t *testing.T) *MutableTree { require.True(t, ver == 2) require.NoError(t, err) - newTree, err := NewMutableTree(mdb, 1000, false) + newTree, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) return newTree @@ -405,18 +406,18 @@ func TestMutableTree_DeleteVersion(t *testing.T) { func TestMutableTree_LazyLoadVersionWithEmptyTree(t *testing.T) { mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 1000, false) + tree, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) _, v1, err := tree.SaveVersion() require.NoError(t, err) - newTree1, err := NewMutableTree(mdb, 1000, false) + newTree1, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) v2, err := newTree1.LoadVersion(1) require.NoError(t, err) require.True(t, v1 == v2) - newTree2, err := NewMutableTree(mdb, 1000, false) + newTree2, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) v2, err = newTree1.LoadVersion(1) require.NoError(t, err) @@ -427,7 +428,7 @@ func TestMutableTree_LazyLoadVersionWithEmptyTree(t *testing.T) { func TestMutableTree_SetSimple(t *testing.T) { mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 0, false) + tree, err := NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(t, err) const testKey1 = "a" @@ -599,7 +600,7 @@ func TestMutableTree_SetRemoveSet(t *testing.T) { func TestMutableTree_FastNodeIntegration(t *testing.T) { mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 1000, false) + tree, err := NewMutableTree(mdb, 1000, false, log.NewNopLogger()) require.NoError(t, err) const key1 = "a" @@ -664,7 +665,7 @@ func TestMutableTree_FastNodeIntegration(t *testing.T) { require.Equal(t, len(unsavedNodeRemovals), 0) // Load - t2, err := NewMutableTree(mdb, 0, false) + t2, err := NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(t, err) _, err = t2.Load() @@ -733,7 +734,7 @@ func TestIterator_MutableTree_Invalid(t *testing.T) { func TestUpgradeStorageToFast_LatestVersion_Success(t *testing.T) { // Setup db := db.NewMemDB() - tree, err := NewMutableTree(db, 1000, false) + tree, err := NewMutableTree(db, 1000, false, log.NewNopLogger()) require.NoError(t, err) // Default version when storage key does not exist in the db @@ -764,7 +765,7 @@ func TestUpgradeStorageToFast_LatestVersion_Success(t *testing.T) { func TestUpgradeStorageToFast_AlreadyUpgraded_Success(t *testing.T) { // Setup db := db.NewMemDB() - tree, err := NewMutableTree(db, 1000, false) + tree, err := NewMutableTree(db, 1000, false, log.NewNopLogger()) require.NoError(t, err) // Default version when storage key does not exist in the db @@ -815,7 +816,7 @@ func TestUpgradeStorageToFast_DbErrorConstructor_Failure(t *testing.T) { dbMock.EXPECT().NewBatch().Return(nil).Times(1) dbMock.EXPECT().ReverseIterator(gomock.Any(), gomock.Any()).Return(rIterMock, nil).Times(1) - tree, err := NewMutableTree(dbMock, 0, false) + tree, err := NewMutableTree(dbMock, 0, false, log.NewNopLogger()) require.Nil(t, err) require.NotNil(t, tree) @@ -850,7 +851,7 @@ func TestUpgradeStorageToFast_DbErrorEnableFastStorage_Failure(t *testing.T) { batchMock.EXPECT().Set(gomock.Any(), gomock.Any()).Return(expectedError).Times(1) - tree, err := NewMutableTree(dbMock, 0, false) + tree, err := NewMutableTree(dbMock, 0, false, log.NewNopLogger()) require.Nil(t, err) require.NotNil(t, tree) @@ -891,7 +892,7 @@ func TestFastStorageReUpgradeProtection_NoForceUpgrade_Success(t *testing.T) { dbMock.EXPECT().NewBatch().Return(batchMock).Times(1) dbMock.EXPECT().ReverseIterator(gomock.Any(), gomock.Any()).Return(rIterMock, nil).Times(1) // called to get latest version - tree, err := NewMutableTree(dbMock, 0, false) + tree, err := NewMutableTree(dbMock, 0, false, log.NewNopLogger()) require.Nil(t, err) require.NotNil(t, tree) @@ -984,7 +985,7 @@ func TestFastStorageReUpgradeProtection_ForceUpgradeFirstTime_NoForceSecondTime_ iterMock.EXPECT().Valid().Return(false).Times(1) iterMock.EXPECT().Close().Return(nil).Times(1) - tree, err := NewMutableTree(dbMock, 0, false) + tree, err := NewMutableTree(dbMock, 0, false, log.NewNopLogger()) require.Nil(t, err) require.NotNil(t, tree) @@ -1035,7 +1036,7 @@ func TestUpgradeStorageToFast_Integration_Upgraded_FastIterator_Success(t *testi require.False(t, isUpgradeable) require.NoError(t, err) - sut, _ := NewMutableTree(tree.ndb.db, 1000, false) + sut, _ := NewMutableTree(tree.ndb.db, 1000, false, log.NewNopLogger()) isFastCacheEnabled, err = sut.IsFastCacheEnabled() require.NoError(t, err) @@ -1102,7 +1103,7 @@ func TestUpgradeStorageToFast_Integration_Upgraded_GetFast_Success(t *testing.T) require.False(t, isUpgradeable) require.NoError(t, err) - sut, _ := NewMutableTree(tree.ndb.db, 1000, false) + sut, _ := NewMutableTree(tree.ndb.db, 1000, false, log.NewNopLogger()) isFastCacheEnabled, err = sut.IsFastCacheEnabled() require.NoError(t, err) @@ -1241,7 +1242,7 @@ func TestUpgradeStorageToFast_Delete_Stale_Success(t *testing.T) { func setupTreeAndMirror(t *testing.T, numEntries int, skipFastStorageUpgrade bool) (*MutableTree, [][]string) { db := db.NewMemDB() - tree, _ := NewMutableTree(db, 0, skipFastStorageUpgrade) + tree, _ := NewMutableTree(db, 0, skipFastStorageUpgrade, log.NewNopLogger()) keyPrefix, valPrefix := "key", "val" @@ -1289,7 +1290,7 @@ func TestNoFastStorageUpgrade_Integration_SaveVersion_Load_Get_Success(t *testin require.False(t, isUpgradeable) require.NoError(t, err) - sut, _ := NewMutableTree(tree.ndb.db, 1000, true) + sut, _ := NewMutableTree(tree.ndb.db, 1000, true, log.NewNopLogger()) isFastCacheEnabled, err = sut.IsFastCacheEnabled() require.NoError(t, err) @@ -1376,7 +1377,7 @@ func TestNoFastStorageUpgrade_Integration_SaveVersion_Load_Iterate_Success(t *te require.False(t, isUpgradeable) require.NoError(t, err) - sut, _ := NewMutableTree(tree.ndb.db, 1000, true) + sut, _ := NewMutableTree(tree.ndb.db, 1000, true, log.NewNopLogger()) isFastCacheEnabled, err = sut.IsFastCacheEnabled() require.NoError(t, err) @@ -1437,7 +1438,7 @@ func TestMutableTree_InitialVersion_FirstVersion(t *testing.T) { initialVersion := int64(1000) tree, err := NewMutableTreeWithOpts(db, 0, &Options{ InitialVersion: uint64(initialVersion), - }, true) + }, true, log.NewNopLogger()) require.NoError(t, err) _, err = tree.Set([]byte("hello"), []byte("world")) diff --git a/nodedb_test.go b/nodedb_test.go index ba33c2a79..99687f5e3 100644 --- a/nodedb_test.go +++ b/nodedb_test.go @@ -5,6 +5,7 @@ import ( "strconv" "testing" + log "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" @@ -345,7 +346,7 @@ func TestNodeDB_traverseOrphans(t *testing.T) { func makeAndPopulateMutableTree(tb testing.TB) *MutableTree { memDB := db.NewMemDB() - tree, err := NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false) + tree, err := NewMutableTreeWithOpts(memDB, 0, &Options{InitialVersion: 9}, false, log.NewNopLogger()) require.NoError(tb, err) for i := 0; i < 1e4; i++ { diff --git a/proof_iavl_test.go b/proof_iavl_test.go index 16237f680..8c77097ee 100644 --- a/proof_iavl_test.go +++ b/proof_iavl_test.go @@ -4,12 +4,13 @@ import ( "fmt" "testing" + log "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/require" ) func TestProofOp(t *testing.T) { - tree, err := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false) + tree, err := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false, log.NewNopLogger()) require.NoError(t, err) keys := []byte{0x0a, 0x11, 0x2e, 0x32, 0x50, 0x72, 0x99, 0xa1, 0xe4, 0xf7} // 10 total. for _, ikey := range keys { diff --git a/proof_ics23_test.go b/proof_ics23_test.go index 8f7c15d7d..eaeddf52c 100644 --- a/proof_ics23_test.go +++ b/proof_ics23_test.go @@ -6,6 +6,7 @@ import ( "sort" "testing" + log "cosmossdk.io/log" ics23 "github.com/cosmos/ics23/go" "github.com/stretchr/testify/require" @@ -205,7 +206,7 @@ func GetNonKey(allkeys [][]byte, loc Where) []byte { // BuildTree creates random key/values and stores in tree // returns a list of all keys in sorted order func BuildTree(size int, cacheSize int) (itree *MutableTree, keys [][]byte, err error) { - tree, err := NewMutableTree(db.NewMemDB(), cacheSize, false) + tree, err := NewMutableTree(db.NewMemDB(), cacheSize, false, log.NewNopLogger()) if err != nil { return nil, nil, err } diff --git a/testutils_test.go b/testutils_test.go index 6572a21be..2370b36b4 100644 --- a/testutils_test.go +++ b/testutils_test.go @@ -9,6 +9,7 @@ import ( "sort" "testing" + log "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/require" @@ -42,7 +43,7 @@ func b2i(bz []byte) int { // Construct a MutableTree func getTestTree(cacheSize int) (*MutableTree, error) { - return NewMutableTreeWithOpts(db.NewMemDB(), cacheSize, nil, false) + return NewMutableTreeWithOpts(db.NewMemDB(), cacheSize, nil, false, log.NewNopLogger()) } // Convenience for a new node @@ -325,7 +326,7 @@ func benchmarkImmutableAvlTreeWithDB(b *testing.B, db db.DB) { b.StopTimer() - t, err := NewMutableTree(db, 100000, false) + t, err := NewMutableTree(db, 100000, false, log.NewNopLogger()) require.NoError(b, err) value := []byte{} diff --git a/tree_random_test.go b/tree_random_test.go index 3a2503607..22c0d237f 100644 --- a/tree_random_test.go +++ b/tree_random_test.go @@ -10,6 +10,7 @@ import ( "strings" "testing" + "cosmossdk.io/log" "github.com/stretchr/testify/require" db "github.com/cosmos/cosmos-db" @@ -79,7 +80,7 @@ func testRandomOperations(t *testing.T, randSeed int64) { if !(r.Float64() < cacheChance) { cacheSize = 0 } - tree, err = NewMutableTreeWithOpts(levelDB, cacheSize, options, false) + tree, err = NewMutableTreeWithOpts(levelDB, cacheSize, options, false, log.NewNopLogger()) require.NoError(t, err) version, err = tree.Load() require.NoError(t, err) diff --git a/tree_test.go b/tree_test.go index fdb0dff8f..4042254e0 100644 --- a/tree_test.go +++ b/tree_test.go @@ -12,6 +12,7 @@ import ( "strconv" "testing" + "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -53,7 +54,7 @@ func TestVersionedRandomTree(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 100, false) + tree, err := NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) versions := 50 keysPerVersion := 30 @@ -130,7 +131,7 @@ func TestTreeHash(t *testing.T) { require.Len(t, expectHashes, versions, "must have expected hashes for all versions") r := rand.New(rand.NewSource(randSeed)) - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) keys := make([][]byte, 0, versionOps) @@ -181,7 +182,7 @@ func TestVersionedRandomTreeSmallKeys(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 100, false) + tree, err := NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) singleVersionTree, err := getTestTree(0) require.NoError(err) @@ -231,7 +232,7 @@ func TestVersionedRandomTreeSmallKeysRandomDeletes(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 100, false) + tree, err := NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) singleVersionTree, err := getTestTree(0) require.NoError(err) @@ -326,7 +327,7 @@ func TestVersionedEmptyTree(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) hash, v, err := tree.SaveVersion() @@ -367,7 +368,7 @@ func TestVersionedEmptyTree(t *testing.T) { tree.Set([]byte("k"), []byte("v")) // Now reload the tree. - tree, err = NewMutableTree(d, 0, false) + tree, err = NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) tree.Load() @@ -384,7 +385,7 @@ func TestVersionedTree(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) // We start with empty database. @@ -435,7 +436,7 @@ func TestVersionedTree(t *testing.T) { // Recreate a new tree and load it, to make sure it works in this // scenario. - tree, err = NewMutableTree(d, 100, false) + tree, err = NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) _, err = tree.Load() require.NoError(err) @@ -489,7 +490,7 @@ func TestVersionedTree(t *testing.T) { require.EqualValues(hash3, hash4) require.NotNil(hash4) - tree, err = NewMutableTree(d, 100, false) + tree, err = NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) _, err = tree.Load() require.NoError(err) @@ -605,7 +606,7 @@ func TestVersionedTreeVersionDeletingEfficiency(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(t, err) tree.Set([]byte("key0"), []byte("val0")) @@ -700,7 +701,7 @@ func TestVersionedTreeSpecialCase(t *testing.T) { d, closeDB := getTestDB() defer closeDB() - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) tree.Set([]byte("key1"), []byte("val0")) @@ -725,7 +726,7 @@ func TestVersionedTreeSpecialCase2(t *testing.T) { require := require.New(t) d := db.NewMemDB() - tree, err := NewMutableTree(d, 100, false) + tree, err := NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) tree.Set([]byte("key1"), []byte("val0")) @@ -739,7 +740,7 @@ func TestVersionedTreeSpecialCase2(t *testing.T) { tree.Set([]byte("key2"), []byte("val2")) tree.SaveVersion() - tree, err = NewMutableTree(d, 100, false) + tree, err = NewMutableTree(d, 100, false, log.NewNopLogger()) require.NoError(err) _, err = tree.Load() require.NoError(err) @@ -785,7 +786,7 @@ func TestVersionedTreeSpecialCase3(t *testing.T) { func TestVersionedTreeSaveAndLoad(t *testing.T) { require := require.New(t) d := db.NewMemDB() - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) // Loading with an empty root is a no-op. @@ -811,7 +812,7 @@ func TestVersionedTreeSaveAndLoad(t *testing.T) { require.Equal(int64(6), tree.Version()) // Reload the tree, to test that roots and orphans are properly loaded. - ntree, err := NewMutableTree(d, 0, false) + ntree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(err) ntree.Load() @@ -936,7 +937,7 @@ func TestVersionedCheckpointsSpecialCase3(t *testing.T) { } func TestVersionedCheckpointsSpecialCase4(t *testing.T) { - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(t, err) tree.Set([]byte("U"), []byte("XamDUtiJ")) @@ -1059,7 +1060,7 @@ func TestVersionedCheckpointsSpecialCase7(t *testing.T) { func TestVersionedTreeEfficiency(t *testing.T) { require := require.New(t) - tree, err := NewMutableTree(db.NewMemDB(), 0, false) + tree, err := NewMutableTree(db.NewMemDB(), 0, false, log.NewNopLogger()) require.NoError(err) versions := 20 keysPerVersion := 100 @@ -1192,7 +1193,7 @@ func TestOrphans(t *testing.T) { // Then randomly delete versions other than the first and last until only those two remain // Any remaining orphan nodes should either have fromVersion == firstVersion || toVersion == lastVersion require := require.New(t) - tree, err := NewMutableTree(db.NewMemDB(), 100, false) + tree, err := NewMutableTree(db.NewMemDB(), 100, false, log.NewNopLogger()) require.NoError(err) NUMVERSIONS := 100 @@ -1352,7 +1353,7 @@ func TestOverwrite(t *testing.T) { require := require.New(t) mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 0, false) + tree, err := NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) // Set one kv pair and save version 1 @@ -1366,7 +1367,7 @@ func TestOverwrite(t *testing.T) { require.NoError(err, "SaveVersion should not fail") // Reload tree at version 1 - tree, err = NewMutableTree(mdb, 0, false) + tree, err = NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) _, err = tree.LoadVersion(int64(1)) require.NoError(err, "LoadVersion should not fail") @@ -1386,7 +1387,7 @@ func TestOverwriteEmpty(t *testing.T) { require := require.New(t) mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 0, false) + tree, err := NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) // Save empty version 1 @@ -1421,7 +1422,7 @@ func TestLoadVersionForOverwriting(t *testing.T) { require := require.New(t) mdb := db.NewMemDB() - tree, err := NewMutableTree(mdb, 0, false) + tree, err := NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) maxLength := 100 @@ -1433,11 +1434,11 @@ func TestLoadVersionForOverwriting(t *testing.T) { require.NoError(err, "SaveVersion should not fail") } - tree, err = NewMutableTree(mdb, 0, false) + tree, err = NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) require.Error(tree.LoadVersionForOverwriting(int64(maxLength * 2))) - tree, err = NewMutableTree(mdb, 0, false) + tree, err = NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) err = tree.LoadVersionForOverwriting(int64(maxLength / 2)) require.NoError(err, "LoadVersion should not fail") @@ -1461,7 +1462,7 @@ func TestLoadVersionForOverwriting(t *testing.T) { require.NoError(err, "SaveVersion should not fail, overwrite was allowed") // Reload tree at version 50, the latest tree version is 52 - tree, err = NewMutableTree(mdb, 0, false) + tree, err = NewMutableTree(mdb, 0, false, log.NewNopLogger()) require.NoError(err) _, err = tree.LoadVersion(int64(maxLength / 2)) require.NoError(err, "LoadVersion should not fail") @@ -1498,7 +1499,7 @@ func BenchmarkTreeLoadAndDelete(b *testing.B) { defer d.Close() defer os.RemoveAll("./bench.db") - tree, err := NewMutableTree(d, 0, false) + tree, err := NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(b, err) for v := 1; v < numVersions; v++ { for i := 0; i < numKeysPerVersion; i++ { @@ -1510,7 +1511,7 @@ func BenchmarkTreeLoadAndDelete(b *testing.B) { b.Run("LoadAndDelete", func(b *testing.B) { for n := 0; n < b.N; n++ { b.StopTimer() - tree, err = NewMutableTree(d, 0, false) + tree, err = NewMutableTree(d, 0, false, log.NewNopLogger()) require.NoError(b, err) runtime.GC() b.StartTimer() @@ -1534,7 +1535,7 @@ func BenchmarkTreeLoadAndDelete(b *testing.B) { func TestLoadVersionForOverwritingCase2(t *testing.T) { require := require.New(t) - tree, _ := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false) + tree, _ := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false, log.NewNopLogger()) for i := byte(0); i < 20; i++ { tree.Set([]byte{i}, []byte{i}) @@ -1596,7 +1597,7 @@ func TestLoadVersionForOverwritingCase2(t *testing.T) { func TestLoadVersionForOverwritingCase3(t *testing.T) { require := require.New(t) - tree, err := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false) + tree, err := NewMutableTreeWithOpts(db.NewMemDB(), 0, nil, false, log.NewNopLogger()) require.NoError(err) for i := byte(0); i < 20; i++ { @@ -1727,7 +1728,7 @@ func Benchmark_GetWithIndex(b *testing.B) { const numKeyVals = 100000 - t, err := NewMutableTree(db, numKeyVals, false) + t, err := NewMutableTree(db, numKeyVals, false, log.NewNopLogger()) require.NoError(b, err) keys := make([][]byte, 0, numKeyVals) @@ -1779,7 +1780,7 @@ func Benchmark_GetByIndex(b *testing.B) { const numKeyVals = 100000 - t, err := NewMutableTree(db, numKeyVals, false) + t, err := NewMutableTree(db, numKeyVals, false, log.NewNopLogger()) require.NoError(b, err) for i := 0; i < numKeyVals; i++ { @@ -1855,7 +1856,7 @@ func TestNodeCacheStatisic(t *testing.T) { opts := &Options{Stat: stat} db, err := db.NewDB("test", db.MemDBBackend, "") require.NoError(t, err) - mt, err := NewMutableTreeWithOpts(db, tc.cacheSize, opts, false) + mt, err := NewMutableTreeWithOpts(db, tc.cacheSize, opts, false, log.NewNopLogger()) require.NoError(t, err) for i := 0; i < numKeyVals; i++ { From 083c9e7fd6c5b09b870abe9bf13064f7bcab174b Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 10 Apr 2023 11:21:53 +0200 Subject: [PATCH 2/3] nodedb logger --- immutable_tree.go | 2 +- internal/logger/logger.go | 13 ------------- iterator_test.go | 2 +- mutable_tree.go | 2 +- nodedb.go | 9 ++++++--- nodedb_test.go | 30 +++++++++++++++--------------- 6 files changed, 24 insertions(+), 34 deletions(-) delete mode 100644 internal/logger/logger.go diff --git a/immutable_tree.go b/immutable_tree.go index dcf637131..04adf20fb 100644 --- a/immutable_tree.go +++ b/immutable_tree.go @@ -38,7 +38,7 @@ func NewImmutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastS return &ImmutableTree{ logger: lg, // NodeDB-backed Tree. - ndb: newNodeDB(db, cacheSize, opts), + ndb: newNodeDB(db, cacheSize, opts, lg), skipFastStorageUpgrade: skipFastStorageUpgrade, } } diff --git a/internal/logger/logger.go b/internal/logger/logger.go deleted file mode 100644 index 3e4d383ed..000000000 --- a/internal/logger/logger.go +++ /dev/null @@ -1,13 +0,0 @@ -package logger - -import ( - "fmt" -) - -var debugging = false - -func Debug(format string, args ...interface{}) { - if debugging { - fmt.Printf(format, args...) - } -} diff --git a/iterator_test.go b/iterator_test.go index c6d507e0c..4b94409c6 100644 --- a/iterator_test.go +++ b/iterator_test.go @@ -369,7 +369,7 @@ func TestNodeIterator_Success(t *testing.T) { } func TestNodeIterator_WithEmptyRoot(t *testing.T) { - itr, err := NewNodeIterator(nil, newNodeDB(dbm.NewMemDB(), 0, nil)) + itr, err := NewNodeIterator(nil, newNodeDB(dbm.NewMemDB(), 0, nil, log.NewNopLogger())) require.NoError(t, err) require.False(t, itr.Valid()) } diff --git a/mutable_tree.go b/mutable_tree.go index 80f37363e..a5e455761 100644 --- a/mutable_tree.go +++ b/mutable_tree.go @@ -51,7 +51,7 @@ func NewMutableTree(db dbm.DB, cacheSize int, skipFastStorageUpgrade bool, lg lo // NewMutableTreeWithOpts returns a new tree with the specified options. func NewMutableTreeWithOpts(db dbm.DB, cacheSize int, opts *Options, skipFastStorageUpgrade bool, lg log.Logger) (*MutableTree, error) { - ndb := newNodeDB(db, cacheSize, opts) + ndb := newNodeDB(db, cacheSize, opts, lg) head := &ImmutableTree{ndb: ndb, skipFastStorageUpgrade: skipFastStorageUpgrade} return &MutableTree{ diff --git a/nodedb.go b/nodedb.go index 15901c364..51b05174e 100644 --- a/nodedb.go +++ b/nodedb.go @@ -11,12 +11,12 @@ import ( "strings" "sync" + "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/iavl/cache" "github.com/cosmos/iavl/fastnode" ibytes "github.com/cosmos/iavl/internal/bytes" - "github.com/cosmos/iavl/internal/logger" "github.com/cosmos/iavl/keyformat" ) @@ -60,6 +60,8 @@ var ( var errInvalidFastStorageVersion = fmt.Sprintf("Fast storage version must be in the format %s", fastStorageVersionDelimiter) type nodeDB struct { + logger log.Logger + mtx sync.Mutex // Read/write lock. db dbm.DB // Persistent node storage. batch dbm.Batch // Batched writing buffer. @@ -72,7 +74,7 @@ type nodeDB struct { fastNodeCache cache.Cache // Cache for nodes in the fast index that represents only key-value pairs at the latest version. } -func newNodeDB(db dbm.DB, cacheSize int, opts *Options) *nodeDB { +func newNodeDB(db dbm.DB, cacheSize int, opts *Options, lg log.Logger) *nodeDB { if opts == nil { o := DefaultOptions() opts = &o @@ -85,6 +87,7 @@ func newNodeDB(db dbm.DB, cacheSize int, opts *Options) *nodeDB { } return &nodeDB{ + logger: lg, db: db, batch: db.NewBatch(), opts: *opts, @@ -198,7 +201,7 @@ func (ndb *nodeDB) SaveNode(node *Node) error { } } - logger.Debug("BATCH SAVE %+v\n", node) + ndb.logger.Debug("BATCH SAVE", "node", node) ndb.nodeCache.Add(node) return nil } diff --git a/nodedb_test.go b/nodedb_test.go index 99687f5e3..ad9c6f04c 100644 --- a/nodedb_test.go +++ b/nodedb_test.go @@ -47,7 +47,7 @@ func TestNewNoDbStorage_StorageVersionInDb_Success(t *testing.T) { dbMock.EXPECT().Get(gomock.Any()).Return([]byte(expectedVersion), nil).Times(1) dbMock.EXPECT().NewBatch().Return(nil).Times(1) - ndb := newNodeDB(dbMock, 0, nil) + ndb := newNodeDB(dbMock, 0, nil, log.NewNopLogger()) require.Equal(t, expectedVersion, ndb.storageVersion) } @@ -60,7 +60,7 @@ func TestNewNoDbStorage_ErrorInConstructor_DefaultSet(t *testing.T) { dbMock.EXPECT().Get(gomock.Any()).Return(nil, errors.New("some db error")).Times(1) dbMock.EXPECT().NewBatch().Return(nil).Times(1) - ndb := newNodeDB(dbMock, 0, nil) + ndb := newNodeDB(dbMock, 0, nil, log.NewNopLogger()) require.Equal(t, expectedVersion, ndb.getStorageVersion()) } @@ -73,7 +73,7 @@ func TestNewNoDbStorage_DoesNotExist_DefaultSet(t *testing.T) { dbMock.EXPECT().Get(gomock.Any()).Return(nil, nil).Times(1) dbMock.EXPECT().NewBatch().Return(nil).Times(1) - ndb := newNodeDB(dbMock, 0, nil) + ndb := newNodeDB(dbMock, 0, nil, log.NewNopLogger()) require.Equal(t, expectedVersion, ndb.getStorageVersion()) } @@ -82,7 +82,7 @@ func TestSetStorageVersion_Success(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) require.Equal(t, defaultStorageVersionValue, ndb.getStorageVersion()) err := ndb.setFastStorageVersionToBatch() @@ -115,7 +115,7 @@ func TestSetStorageVersion_DBFailure_OldKept(t *testing.T) { dbMock.EXPECT().ReverseIterator(gomock.Any(), gomock.Any()).Return(rIterMock, nil).Times(1) batchMock.EXPECT().Set(metadataKeyFormat.Key([]byte(storageVersionKey)), []byte(fastStorageVersionValue+fastStorageVersionDelimiter+strconv.Itoa(expectedFastCacheVersion))).Return(errors.New(expectedErrorMsg)).Times(1) - ndb := newNodeDB(dbMock, 0, nil) + ndb := newNodeDB(dbMock, 0, nil, log.NewNopLogger()) require.Equal(t, defaultStorageVersionValue, ndb.getStorageVersion()) err := ndb.setFastStorageVersionToBatch() @@ -136,7 +136,7 @@ func TestSetStorageVersion_InvalidVersionFailure_OldKept(t *testing.T) { dbMock.EXPECT().Get(gomock.Any()).Return([]byte(invalidStorageVersion), nil).Times(1) dbMock.EXPECT().NewBatch().Return(batchMock).Times(1) - ndb := newNodeDB(dbMock, 0, nil) + ndb := newNodeDB(dbMock, 0, nil, log.NewNopLogger()) require.Equal(t, invalidStorageVersion, ndb.getStorageVersion()) err := ndb.setFastStorageVersionToBatch() @@ -147,7 +147,7 @@ func TestSetStorageVersion_InvalidVersionFailure_OldKept(t *testing.T) { func TestSetStorageVersion_FastVersionFirst_VersionAppended(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.storageVersion = fastStorageVersionValue ndb.latestVersion = 100 @@ -158,7 +158,7 @@ func TestSetStorageVersion_FastVersionFirst_VersionAppended(t *testing.T) { func TestSetStorageVersion_FastVersionSecond_VersionAppended(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 storageVersionBytes := []byte(fastStorageVersionValue) @@ -172,7 +172,7 @@ func TestSetStorageVersion_FastVersionSecond_VersionAppended(t *testing.T) { func TestSetStorageVersion_SameVersionTwice(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 storageVersionBytes := []byte(fastStorageVersionValue) @@ -192,7 +192,7 @@ func TestSetStorageVersion_SameVersionTwice(t *testing.T) { // Test case where version is incorrect and has some extra garbage at the end func TestShouldForceFastStorageUpdate_DefaultVersion_True(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.storageVersion = defaultStorageVersionValue ndb.latestVersion = 100 @@ -203,7 +203,7 @@ func TestShouldForceFastStorageUpdate_DefaultVersion_True(t *testing.T) { func TestShouldForceFastStorageUpdate_FastVersion_Greater_True(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 ndb.storageVersion = fastStorageVersionValue + fastStorageVersionDelimiter + strconv.Itoa(int(ndb.latestVersion+1)) @@ -214,7 +214,7 @@ func TestShouldForceFastStorageUpdate_FastVersion_Greater_True(t *testing.T) { func TestShouldForceFastStorageUpdate_FastVersion_Smaller_True(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 ndb.storageVersion = fastStorageVersionValue + fastStorageVersionDelimiter + strconv.Itoa(int(ndb.latestVersion-1)) @@ -225,7 +225,7 @@ func TestShouldForceFastStorageUpdate_FastVersion_Smaller_True(t *testing.T) { func TestShouldForceFastStorageUpdate_FastVersion_Match_False(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 ndb.storageVersion = fastStorageVersionValue + fastStorageVersionDelimiter + strconv.Itoa(int(ndb.latestVersion)) @@ -236,7 +236,7 @@ func TestShouldForceFastStorageUpdate_FastVersion_Match_False(t *testing.T) { func TestIsFastStorageEnabled_True(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 ndb.storageVersion = fastStorageVersionValue + fastStorageVersionDelimiter + strconv.Itoa(int(ndb.latestVersion)) @@ -245,7 +245,7 @@ func TestIsFastStorageEnabled_True(t *testing.T) { func TestIsFastStorageEnabled_False(t *testing.T) { db := db.NewMemDB() - ndb := newNodeDB(db, 0, nil) + ndb := newNodeDB(db, 0, nil, log.NewNopLogger()) ndb.latestVersion = 100 ndb.storageVersion = defaultStorageVersionValue From 15831f437650177a2669b94cf6959f33df86f25d Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Wed, 12 Apr 2023 13:10:55 +0200 Subject: [PATCH 3/3] add changelog entries --- CHANGELOG.md | 2 ++ cmd/iaviewer/main.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 137a0df7c..49ee6bdbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ ### Breaking Changes +- [#735](https://github.com/cosmos/iavl/pull/735) Pass logger to `NodeDB`, `MutableTree` and `ImmutableTree` + - [#646](https://github.com/cosmos/iavl/pull/646) Remove the `orphans` from the storage ### API Changes diff --git a/cmd/iaviewer/main.go b/cmd/iaviewer/main.go index b3cce09e7..8fec9d4ca 100644 --- a/cmd/iaviewer/main.go +++ b/cmd/iaviewer/main.go @@ -127,7 +127,7 @@ func ReadTree(dir string, version int, prefix []byte) (*iavl.MutableTree, error) db = dbm.NewPrefixDB(db, prefix) } - tree, err := iavl.NewMutableTree(db, DefaultCacheSize, false, log.NewNopLogger()) + tree, err := iavl.NewMutableTree(db, DefaultCacheSize, false, log.NewLogger(os.Stdout)) if err != nil { return nil, err }