From df0999bc1de74d34db0d88855d06536e59133423 Mon Sep 17 00:00:00 2001 From: Cool Developer Date: Tue, 26 Mar 2024 11:30:10 -0400 Subject: [PATCH 1/2] lint --- Makefile | 2 +- cmd/latest.go | 2 +- cmd/main.go | 7 +--- cmd/root.go | 4 +- cmd/scan/scan.go | 4 +- cmd/snapshot/snapshot.go | 2 +- go.mod | 2 +- go.sum | 5 +++ iterator_test.go | 8 ++-- multitree.go | 12 +++--- node.go | 11 +++--- pool.go | 17 +-------- pool_test.go | 4 +- snapshot.go | 3 +- sqlite.go | 14 +++---- sqlite_test.go | 61 +++++++++++-------------------- testutil/util.go | 20 +++++----- tree.go | 5 +-- tree_test.go | 79 ++++++++++++++++++++-------------------- visualize.go | 2 +- 20 files changed, 113 insertions(+), 151 deletions(-) diff --git a/Makefile b/Makefile index b23af8b26..73e05df27 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ format: # look into .golangci.yml for enabling / disabling linters golangci_lint_cmd=golangci-lint -golangci_version=v1.51.2 +golangci_version=v1.55.2 lint: @echo "--> Running linter" diff --git a/cmd/latest.go b/cmd/latest.go index 9e8bdf4fe..92ed6486d 100644 --- a/cmd/latest.go +++ b/cmd/latest.go @@ -31,7 +31,7 @@ func latestCommand() *cobra.Command { if err != nil { return err } - tree := iavl.NewTree(sql, pool, iavl.TreeOptions{}) + tree := iavl.NewTree(sql, iavl.TreeOptions{}) if err = tree.LoadVersion(version); err != nil { return err } diff --git a/cmd/main.go b/cmd/main.go index 43d4fcf17..84577aa39 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -8,11 +8,7 @@ import ( ) func main() { - root, err := RootCommand() - if err != nil { - os.Exit(1) - } - + root := RootCommand() ctx := context.Background() ctx, cancel := context.WithCancel(ctx) @@ -35,6 +31,5 @@ func main() { if err := root.ExecuteContext(ctx); err != nil { fmt.Printf("Error: %s\n", err.Error()) - os.Exit(1) } } diff --git a/cmd/root.go b/cmd/root.go index 95a76b1b7..683948f7a 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/cobra" ) -func RootCommand() (*cobra.Command, error) { +func RootCommand() *cobra.Command { cmd := &cobra.Command{ Use: "iavl", Short: "benchmark cosmos/iavl", @@ -20,5 +20,5 @@ func RootCommand() (*cobra.Command, error) { scan.Command(), latestCommand(), ) - return cmd, nil + return cmd } diff --git a/cmd/scan/scan.go b/cmd/scan/scan.go index 2535e3b58..abcfc3f81 100644 --- a/cmd/scan/scan.go +++ b/cmd/scan/scan.go @@ -97,7 +97,7 @@ func rootsCommand() *cobra.Command { } cmd.Flags().StringVar(&dbPath, "db", "", "path to sqlite db") cmd.Flags().Int64Var(&version, "version", 0, "version to query") - cmd.MarkFlagRequired("db") - cmd.MarkFlagRequired("version") + _ = cmd.MarkFlagRequired("db") + _ = cmd.MarkFlagRequired("version") return cmd } diff --git a/cmd/snapshot/snapshot.go b/cmd/snapshot/snapshot.go index 27e10b64f..5dd25ec63 100644 --- a/cmd/snapshot/snapshot.go +++ b/cmd/snapshot/snapshot.go @@ -43,7 +43,7 @@ func Command() *cobra.Command { if err != nil { return err } - tree := iavl.NewTree(sql, pool, iavl.TreeOptions{}) + tree := iavl.NewTree(sql, iavl.TreeOptions{}) if err = tree.LoadVersion(version); err != nil { return err } diff --git a/go.mod b/go.mod index 25d0522dc..5e0f268fd 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/cosmos/iavl/v2 -go 1.18 +go 1.21 require ( github.com/aybabtme/uniplot v0.0.0-20151203143629-039c559e5e7e diff --git a/go.sum b/go.sum index 8e14cbeaf..679d0417b 100644 --- a/go.sum +++ b/go.sum @@ -24,12 +24,15 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kocubinski/costor-api v1.1.1 h1:sgfJA7T/8IfZ59zxiMrED0xdjerAFuPNBTqyO90GiEE= github.com/kocubinski/costor-api v1.1.1/go.mod h1:ESMBMDkKfN+9vvvhhNVdKLhbOmzI3O/i16iXvRM9Tuc= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 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= @@ -51,6 +54,7 @@ github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= @@ -77,5 +81,6 @@ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/iterator_test.go b/iterator_test.go index 767fd0b13..2958160ff 100644 --- a/iterator_test.go +++ b/iterator_test.go @@ -13,7 +13,7 @@ func Test_Iterator(t *testing.T) { sql, err := iavl.NewInMemorySqliteDb(pool) require.NoError(t, err) - tree := iavl.NewTree(sql, pool, iavl.TreeOptions{StateStorage: false}) + tree := iavl.NewTree(sql, iavl.TreeOptions{StateStorage: false}) set := func(key string, value string) { _, err := tree.Set([]byte(key), []byte(value)) require.NoError(t, err) @@ -208,7 +208,6 @@ func Test_Iterator(t *testing.T) { if cnt == 0 { require.Equal(t, tc.expectedStart, itr.Key()) } - //fmt.Printf("%s %s\n", itr.Key(), itr.Value()) require.NoError(t, itr.Error()) cnt++ } @@ -226,7 +225,7 @@ func Test_IteratorTree(t *testing.T) { sql, err := iavl.NewSqliteDb(pool, iavl.SqliteDbOptions{Path: tmpDir}) require.NoError(t, err) - tree := iavl.NewTree(sql, pool, iavl.TreeOptions{StateStorage: true}) + tree := iavl.NewTree(sql, iavl.TreeOptions{StateStorage: true}) set := func(key string, value string) { _, err := tree.Set([]byte(key), []byte(value)) require.NoError(t, err) @@ -241,7 +240,7 @@ func Test_IteratorTree(t *testing.T) { _, version, err := tree.SaveVersion() require.NoError(t, err) - tree = iavl.NewTree(sql, pool, iavl.TreeOptions{StateStorage: true}) + tree = iavl.NewTree(sql, iavl.TreeOptions{StateStorage: true}) require.NoError(t, tree.LoadVersion(version)) cases := []struct { name string @@ -304,5 +303,4 @@ func Test_IteratorTree(t *testing.T) { require.NoError(t, itr.Close()) }) } - } diff --git a/multitree.go b/multitree.go index ccfbcd4c9..71bdc9783 100644 --- a/multitree.go +++ b/multitree.go @@ -58,7 +58,7 @@ func ImportMultiTree(pool *NodePool, version int64, path string, treeOpts TreeOp return nil, err } go func(p string) { - tree := NewTree(sql, pool, mt.treeOpts) + tree := NewTree(sql, mt.treeOpts) importErr := tree.LoadSnapshot(version, PreOrder) if importErr != nil { @@ -94,7 +94,7 @@ func (mt *MultiTree) MountTree(storeKey string) error { if err != nil { return err } - tree := NewTree(sql, mt.pool, mt.treeOpts) + tree := NewTree(sql, mt.treeOpts) mt.Trees[storeKey] = tree return nil } @@ -113,7 +113,7 @@ func (mt *MultiTree) MountTrees() error { if err != nil { return err } - tree := NewTree(sql, mt.pool, mt.treeOpts) + tree := NewTree(sql, mt.treeOpts) mt.Trees[prefix] = tree } return nil @@ -230,10 +230,8 @@ func (mt *MultiTree) SnapshotConcurrently() error { // https://github.com/cosmos/cosmos-sdk/blob/80dd55f79bba8ab675610019a5764470a3e2fef9/store/types/commit_info.go#L30 // it used in testing. App chains should use the store hashing code referenced above instead. func (mt *MultiTree) Hash() []byte { - var ( - storeKeys []string - hashes []byte - ) + storeKeys := make([]string, len(mt.Trees)) + hashes := make([]byte, 0) for k := range mt.Trees { storeKeys = append(storeKeys, k) } diff --git a/node.go b/node.go index f27c208ec..06a668cc0 100644 --- a/node.go +++ b/node.go @@ -59,14 +59,13 @@ type Node struct { rightNode *Node subtreeHeight int8 - dirty bool - evict bool - poolId uint64 + dirty bool + evict bool } func (node *Node) String() string { - return fmt.Sprintf("Node{hash: %x, nodeKey: %s, leftNodeKey: %v, rightNodeKey: %v, size: %d, subtreeHeight: %d, poolId: %d}", - node.hash, node.nodeKey, node.leftNodeKey, node.rightNodeKey, node.size, node.subtreeHeight, node.poolId) + return fmt.Sprintf("Node{hash: %x, nodeKey: %s, leftNodeKey: %v, rightNodeKey: %v, size: %d, subtreeHeight: %d}", + node.hash, node.nodeKey, node.leftNodeKey, node.rightNodeKey, node.size, node.subtreeHeight) } func (node *Node) isLeaf() bool { @@ -341,7 +340,7 @@ var ( // Computes the hash of the node without computing its descendants. Must be // called on nodes which have descendant node hashes already computed. -func (node *Node) _hash() []byte { +func (node *Node) _hash() []byte { // nolint: unparam if node.hash != nil { return node.hash } diff --git a/pool.go b/pool.go index d68bd479e..5f9416fd1 100644 --- a/pool.go +++ b/pool.go @@ -1,17 +1,11 @@ package iavl import ( - "math" "sync" ) type NodePool struct { syncPool *sync.Pool - - free chan int - nodes []Node - - poolId uint64 } func NewNodePool() *NodePool { @@ -21,20 +15,12 @@ func NewNodePool() *NodePool { return &Node{} }, }, - free: make(chan int, 1000), } return np } func (np *NodePool) Get() *Node { - if np.poolId == math.MaxUint64 { - np.poolId = 1 - } else { - np.poolId++ - } - n := np.syncPool.Get().(*Node) - n.poolId = np.poolId - return n + return np.syncPool.Get().(*Node) } func (np *NodePool) Put(node *Node) { @@ -51,6 +37,5 @@ func (np *NodePool) Put(node *Node) { node.dirty = false node.evict = false - node.poolId = 0 np.syncPool.Put(node) } diff --git a/pool_test.go b/pool_test.go index d8a90ac0a..48fbe6997 100644 --- a/pool_test.go +++ b/pool_test.go @@ -9,8 +9,8 @@ import ( func TestNodePool_Get(t *testing.T) { pool := NewNodePool() node := pool.Get() + require.Equal(t, []byte(nil), node.key) node.key = []byte("hello") - require.Equal(t, node.key, pool.nodes[node.poolId].key) pool.Put(node) - require.Equal(t, []byte(nil), pool.nodes[node.poolId].key) + require.Equal(t, []byte(nil), pool.Get().key) } diff --git a/snapshot.go b/snapshot.go index 861a95a8a..a5a17fe72 100644 --- a/snapshot.go +++ b/snapshot.go @@ -277,10 +277,11 @@ func (sql *SqliteDb) WriteSnapshot( return nil, err } - var versions []int64 + versions := make([]int64, len(uniqueVersions)) for v := range uniqueVersions { versions = append(versions, v) } + fmt.Printf("snapshot %d: %d versions\n", version, len(versions)) if err = sql.SaveRoot(version, root, true); err != nil { return nil, err diff --git a/sqlite.go b/sqlite.go index 78feff512..8a10c416c 100644 --- a/sqlite.go +++ b/sqlite.go @@ -137,8 +137,7 @@ func NewSqliteDb(pool *NodePool, opts SqliteDbOptions) (*SqliteDb, error) { } if !api.IsFileExistent(opts.Path) { - err := os.MkdirAll(opts.Path, 0755) - if err != nil { + if err := os.MkdirAll(opts.Path, 0o755); err != nil { return nil, err } } @@ -226,6 +225,10 @@ CREATE INDEX leaf_orphan_idx ON leaf_orphan (at);`) return nil } +func (sql *SqliteDb) getPool() *NodePool { + return sql.pool +} + func (sql *SqliteDb) resetWriteConn() (err error) { if sql.treeWrite != nil { err = sql.treeWrite.Close() @@ -501,7 +504,7 @@ func (sql *SqliteDb) LoadRoot(version int64) (*Node, error) { // lastCheckpoint fetches the last checkpoint version from the shard table previous to the loaded root's version. // a return value of zero and nil error indicates no checkpoint was found. -func (sql *SqliteDb) lastCheckpoint(treeVersion int64) (checkpointVersion int64, err error) { +func (sql *SqliteDb) lastCheckpoint(treeVersion int64) (checkpointVersion int64, err error) { // nolint: unused conn, err := sqlite3.Open(sql.opts.treeConnectionString()) if err != nil { return 0, err @@ -556,7 +559,6 @@ func (sql *SqliteDb) loadCheckpointRange() (*VersionRange, error) { } if err = versionRange.Add(version); err != nil { return nil, err - } } if err = q.Close(); err != nil { @@ -826,8 +828,6 @@ func (sql *SqliteDb) Revert(version int) error { return err } } - } else { - } return nil } @@ -840,7 +840,7 @@ func (sql *SqliteDb) GetLatestLeaf(key []byte) ([]byte, error) { return nil, err } } - defer sql.queryLatest.Reset() + defer sql.queryLatest.Reset() //nolint:errcheck if err := sql.queryLatest.Bind(key); err != nil { return nil, err diff --git a/sqlite_test.go b/sqlite_test.go index 1468e6868..6e7a06479 100644 --- a/sqlite_test.go +++ b/sqlite_test.go @@ -50,7 +50,6 @@ Reads: 30,000 nodes/sec !!! var testDbLocation = "/tmp/sqlite_test" func TestBuildSqlite(t *testing.T) { - //dir := t.TempDir() dir := testDbLocation t.Logf("using temp dir %s", dir) @@ -69,39 +68,25 @@ func TestBuildSqlite(t *testing.T) { require.NoError(t, err) err = sql.leafWrite.Exec("CREATE INDEX trie_idx ON node (key)") - //err = sql.leafWrite.Exec("CREATE INDEX node_idx ON node (version, seq)") require.NoError(t, err) - err = sql.leafWrite.Exec("CREATE INDEX tree_idx ON tree (version, sequence)") + err = sql.leafWrite.Exec("CREATE INDEX tree_idx ON node (version, seq)") require.NoError(t, err) require.NoError(t, sql.leafWrite.Begin()) var stmt *sqlite3.Stmt - //stmt, err = sql.leafWrite.Prepare("INSERT INTO tree(version, sequence, bytes) VALUES (?, ?, ?)") stmt, err = sql.leafWrite.Prepare("INSERT INTO node(version, seq, hash, key, height, size, l_seq, l_version, r_seq, r_version)" + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") - require.NoError(t, err) startTime := time.Now() batchSize := 200_000 - //nodeBz := new(bytes.Buffer) for ; version1.Valid(); err = version1.Next() { + require.NoError(t, err) node := version1.GetNode() lnk := NewNodeKey(1, uint32(count+1)) rnk := NewNodeKey(1, uint32(count+2)) - n := &Node{key: node.Key, hash: node.Key[:32], - subtreeHeight: 13, size: 4, leftNodeKey: lnk, rightNodeKey: rnk} - - //nodeBz.Reset() - //require.NoError(t, n.WriteBytes(nodeBz)) - - // tree table - //nk := NewNodeKey(1, uint32(count)) - //nodeBz, err := n.Bytes() - //require.NoError(t, err) - //err = stmt.Exec(int(nk.Version()), int(nk.Sequence()), nodeBz) - //require.NoError(t, err) + n := &Node{key: node.Key, hash: node.Key[:32], subtreeHeight: 13, size: 4, leftNodeKey: lnk, rightNodeKey: rnk} // node table err = stmt.Exec( @@ -120,8 +105,6 @@ func TestBuildSqlite(t *testing.T) { if count%batchSize == 0 { err := sql.leafWrite.Commit() require.NoError(t, err) - //stmt, err = newBatch() - //require.NoError(t, err) require.NoError(t, sql.leafWrite.Begin()) log.Info().Msgf("nodes=%s dur=%s; rate=%s", humanize.Comma(int64(count)), @@ -162,6 +145,7 @@ func TestReadSqlite_Trie(t *testing.T) { gen := testutil.OsmoLike() version1 := gen.Iterator.Nodes() for ; version1.Valid(); err = version1.Next() { + require.NoError(t, err) node := version1.GetNode() require.NoError(t, query.Bind(node.Key)) hasRow, err := query.Step() @@ -181,12 +165,11 @@ func TestReadSqlite_Trie(t *testing.T) { require.NoError(t, query.Reset()) i++ } - } func TestReadSqlite(t *testing.T) { - //pool := NewNodePool() - //dir := t.TempDir() + // pool := NewNodePool() + // dir := t.TempDir() var err error dir := testDbLocation t.Logf("using temp dir %s", dir) @@ -194,11 +177,11 @@ func TestReadSqlite(t *testing.T) { require.NoError(t, err) var stmt *sqlite3.Stmt - //stmt, err = sql.leafWrite.Prepare("SELECT bytes FROM tree WHERE node_key = ?") + // stmt, err = sql.leafWrite.Prepare("SELECT bytes FROM tree WHERE node_key = ?") sqlRead, err := sql.getReadConn() require.NoError(t, err) - //stmt, err = sqlRead.Prepare("SELECT bytes FROM tree WHERE version = ? AND sequence = ?") + // stmt, err = sqlRead.Prepare("SELECT bytes FROM tree WHERE version = ? AND sequence = ?") stmt, err = sqlRead.Prepare("SELECT hash, key, height, size, l_seq, l_version, r_seq, r_version FROM node WHERE seq = ? AND version = ?") require.NoError(t, err) @@ -210,15 +193,15 @@ func TestReadSqlite(t *testing.T) { j := rand.Intn(40_000_000) // unstructured leafRead: - //nk := NewNodeKey(1, uint32(j)) - //require.NoError(t, stmt.Bind(1, j)) - //hasRow, err := stmt.Step() - //require.Truef(t, hasRow, "no row for %d", j) - //require.NoError(t, err) - //nodeBz, err := stmt.ColumnBlob(0) - //require.NoError(t, err) - //_, err = MakeNode(pool, nk, nodeBz) - //require.NoError(t, err) + // nk := NewNodeKey(1, uint32(j)) + // require.NoError(t, stmt.Bind(1, j)) + // hasRow, err := stmt.Step() + // require.Truef(t, hasRow, "no row for %d", j) + // require.NoError(t, err) + // nodeBz, err := stmt.ColumnBlob(0) + // require.NoError(t, err) + // _, err = MakeNode(pool, nk, nodeBz) + // require.NoError(t, err) // structured leafRead: require.NoError(t, stmt.Bind(j, 1)) @@ -237,13 +220,13 @@ func TestReadSqlite(t *testing.T) { require.NoError(t, stmt.Reset()) } - //gen := testutil.OsmoLike() - //version1 := gen.TreeIterator.Nodes() - //var count int - //require.Equal(t, int64(1), gen.TreeIterator.Version()) + // gen := testutil.OsmoLike() + // version1 := gen.TreeIterator.Nodes() + // var count int + // require.Equal(t, int64(1), gen.TreeIterator.Version()) } -func TestNodeKeyFormat(t *testing.T) { +func TestNodeKeyFormat(_ *testing.T) { nk := NewNodeKey(100, 2) k := (int(nk.Version()) << 32) | int(nk.Sequence()) fmt.Printf("k: %d - %x\n", k, k) diff --git a/testutil/util.go b/testutil/util.go index b95ab47fe..3cbc25cab 100644 --- a/testutil/util.go +++ b/testutil/util.go @@ -62,11 +62,11 @@ func NewTreeBuildOptions() *TreeBuildOptions { var seed int64 = 1234 var versions int64 = 10_000_000 bankGen := bench.BankLikeGenerator(seed, versions) - //bankGen.InitialSize = 10_000 + // bankGen.InitialSize = 10_000 lockupGen := bench.LockupLikeGenerator(seed, versions) - //lockupGen.InitialSize = 10_000 + // lockupGen.InitialSize = 10_000 stakingGen := bench.StakingLikeGenerator(seed, versions) - //stakingGen.InitialSize = 10_000 + // stakingGen.InitialSize = 10_000 itr, err := bench.NewChangesetIterators([]bench.ChangesetGenerator{ bankGen, lockupGen, @@ -101,7 +101,7 @@ func BankLockup25_000() TreeBuildOptions { return opts } -func BigTreeOptions_100_000() *TreeBuildOptions { +func BigTreeOptions100_000() *TreeBuildOptions { var seed int64 = 1234 var versions int64 = 200_000 bankGen := bench.BankLikeGenerator(seed, versions) @@ -163,10 +163,10 @@ func OsmoLike() *TreeBuildOptions { bankGen2 := bench.BankLikeGenerator(seed+1, versions) bankGen2.InitialSize = initialSize bankGen2.FinalSize = finalSize - //lockupGen := bench.LockupLikeGenerator(seed, versions) - //lockupGen.InitialSize = initialSize - //stakingGen := bench.StakingLikeGenerator(seed, versions) - //stakingGen.InitialSize = initialSize + // lockupGen := bench.LockupLikeGenerator(seed, versions) + // lockupGen.InitialSize = initialSize + // stakingGen := bench.StakingLikeGenerator(seed, versions) + // stakingGen.InitialSize = initialSize itr, err := bench.NewChangesetIterators([]bench.ChangesetGenerator{ bankGen, @@ -182,7 +182,7 @@ func OsmoLike() *TreeBuildOptions { // hash for 10k WITHOUT a store key prefix on the key UntilHash: "e996df6099bc4b6e8a723dc551af4fa7cfab50e3a182ab1e21f5e90e5e7124cd", // 10000 // hash for 10k WITH store key prefix on key - //UntilHash: "3b43ef49895a7c483ef4b9a84a1f0ddbe7615c9a65bc533f69bc6bf3eb1b3d6c", // OsmoLike, 10000 + // UntilHash: "3b43ef49895a7c483ef4b9a84a1f0ddbe7615c9a65bc533f69bc6bf3eb1b3d6c", // OsmoLike, 10000 } return opts @@ -455,6 +455,6 @@ func CompactedChangelogs(logDir string) *TreeBuildOptions { // hash for 10k WITHOUT a store key prefix on the key UntilHash: "e996df6099bc4b6e8a723dc551af4fa7cfab50e3a182ab1e21f5e90e5e7124cd", // 10000 // hash for 10k WITH store key prefix on key - //UntilHash: "3b43ef49895a7c483ef4b9a84a1f0ddbe7615c9a65bc533f69bc6bf3eb1b3d6c", // OsmoLike, 10000 + // UntilHash: "3b43ef49895a7c483ef4b9a84a1f0ddbe7615c9a65bc533f69bc6bf3eb1b3d6c", // OsmoLike, 10000 } } diff --git a/tree.go b/tree.go index e8111990a..0e4433ed1 100644 --- a/tree.go +++ b/tree.go @@ -77,13 +77,13 @@ func DefaultTreeOptions() TreeOptions { } } -func NewTree(sql *SqliteDb, pool *NodePool, opts TreeOptions) *Tree { +func NewTree(sql *SqliteDb, opts TreeOptions) *Tree { ctx, cancel := context.WithCancel(context.Background()) tree := &Tree{ sql: sql, sqlWriter: sql.newSQLWriter(), writerCancel: cancel, - pool: pool, + pool: sql.getPool(), checkpoints: &VersionRange{}, metrics: &metrics.TreeMetrics{}, maxWorkingSize: 1.5 * 1024 * 1024 * 1024, @@ -416,7 +416,6 @@ func (tree *Tree) recursiveSet(node *Node, key []byte, value []byte) ( } return node, true, nil } - } else { tree.addOrphan(node) tree.mutateNode(node) diff --git a/tree_test.go b/tree_test.go index 7bd5aa53a..3d5c06a61 100644 --- a/tree_test.go +++ b/tree_test.go @@ -31,7 +31,7 @@ func MemUsage() string { // For info on each, see: https://golang.org/pkg/runtime/#MemStats s := fmt.Sprintf("alloc=%s sys=%s gc=%d", humanize.Bytes(m.HeapAlloc), - //humanize.Bytes(m.TotalAlloc), + // humanize.Bytes(m.TotalAlloc), humanize.Bytes(m.Sys), m.NumGC) return s @@ -111,10 +111,10 @@ func testTreeBuild(t *testing.T, multiTree *MultiTree, opts *testutil.TreeBuildO require.NoError(t, err) node := changeset.GetNode() - //var keyBz bytes.Buffer - //keyBz.Write([]byte(node.StoreKey)) - //keyBz.Write(node.Key) - //key := keyBz.Bytes() + // var keyBz bytes.Buffer + // keyBz.Write([]byte(node.StoreKey)) + // keyBz.Write(node.Key) + // key := keyBz.Bytes() key := node.Key tree, ok := multiTree.Trees[node.StoreKey] @@ -158,11 +158,11 @@ func TestTree_Hash(t *testing.T) { var err error tmpDir := t.TempDir() - //tmpDir := "/tmp/iavl-test" + // tmpDir := "/tmp/iavl-test" t.Logf("levelDb tmpDir: %s\n", tmpDir) require.NoError(t, err) - opts := testutil.BigTreeOptions_100_000() + opts := testutil.BigTreeOptions100_000() // this hash was validated as correct (with this same dataset) in iavl-bench // with `go run . tree --seed 1234 --dataset std` @@ -187,7 +187,7 @@ func TestTree_Hash(t *testing.T) { func TestTree_Build_Load(t *testing.T) { // build the initial version of the tree with periodic checkpoints - //tmpDir := t.TempDir() + // tmpDir := t.TempDir() tmpDir := "/tmp/iavl-v2-test" opts := testutil.NewTreeBuildOptions().With10_000() multiTree := NewMultiTree(tmpDir, TreeOptions{CheckpointInterval: 4000, HeightFilter: 0, StateStorage: false}) @@ -258,7 +258,7 @@ func TestTree_Build_Load(t *testing.T) { // $ go run ./cmd snapshot --db /tmp/iavl-v2 --version 1 // mkdir -p /tmp/osmo-like-many/v2 && go run ./cmd gen emit --start 2 --limit 5000 --type osmo-like-many --out /tmp/osmo-like-many/v2 func TestOsmoLike_HotStart(t *testing.T) { - tmpDir := "/tmp/iavl-v2" + tmpDir := "/tmp/iavl-v2" // nolint: goconst // logDir := "/tmp/osmo-like-many-v2" logDir := "/Users/mattk/src/scratch/osmo-like-many/v2" pool := NewNodePool() @@ -269,7 +269,7 @@ func TestOsmoLike_HotStart(t *testing.T) { opts.SampleRate = 250_000 opts.Until = 1_000 - opts.UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda" + opts.UntilHash = "557663181d9ab97882ecfc6538e3b4cfe31cd805222fae905c4b4f4403ca5cda" // nolint: goconst testTreeBuild(t, multiTree, opts) } @@ -315,7 +315,7 @@ func TestTree_Rehash(t *testing.T) { pool := NewNodePool() sql, err := NewSqliteDb(pool, SqliteDbOptions{Path: "/Users/mattk/src/scratch/sqlite/height-zero"}) require.NoError(t, err) - tree := NewTree(sql, pool, TreeOptions{}) + tree := NewTree(sql, TreeOptions{}) require.NoError(t, tree.LoadVersion(1)) savedHash := make([]byte, 32) @@ -347,7 +347,7 @@ func TestTreeSanity(t *testing.T) { pool := NewNodePool() sql, err := NewInMemorySqliteDb(pool) require.NoError(t, err) - return NewTree(sql, pool, TreeOptions{}) + return NewTree(sql, TreeOptions{}) }, hashFn: func(tree *Tree) []byte { hash, _, err := tree.SaveVersion() @@ -358,8 +358,7 @@ func TestTreeSanity(t *testing.T) { { name: "no db", treeFn: func() *Tree { - pool := NewNodePool() - return NewTree(nil, pool, TreeOptions{}) + return NewTree(nil, TreeOptions{}) }, hashFn: func(tree *Tree) []byte { rehashTree(tree.root) @@ -413,7 +412,7 @@ func Test_EmptyTree(t *testing.T) { pool := NewNodePool() sql, err := NewInMemorySqliteDb(pool) require.NoError(t, err) - tree := NewTree(sql, pool, TreeOptions{}) + tree := NewTree(sql, TreeOptions{}) _, err = tree.Set([]byte("foo"), []byte("bar")) require.NoError(t, err) @@ -443,7 +442,7 @@ func Test_Replay_Tmp(t *testing.T) { pool := NewNodePool() sql, err := NewSqliteDb(pool, SqliteDbOptions{Path: "/Users/mattk/src/scratch/icahost"}) require.NoError(t, err) - tree := NewTree(sql, pool, TreeOptions{StateStorage: true}) + tree := NewTree(sql, TreeOptions{StateStorage: true}) err = tree.LoadVersion(13946707) require.NoError(t, err) } @@ -473,7 +472,7 @@ func Test_Replay(t *testing.T) { tmpDir := t.TempDir() sql, err := NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) require.NoError(t, err) - tree := NewTree(sql, pool, TreeOptions{StateStorage: true, CheckpointInterval: 100}) + tree := NewTree(sql, TreeOptions{StateStorage: true, CheckpointInterval: 100}) // we must buffer all sets/deletes and order them first for replay to work properly. // store v1 and v2 already do this via cachekv write buffering. @@ -532,7 +531,7 @@ func Test_Replay(t *testing.T) { sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) require.NoError(t, err) - tree = NewTree(sql, pool, TreeOptions{StateStorage: true}) + tree = NewTree(sql, TreeOptions{StateStorage: true}) err = tree.LoadVersion(140) require.NoError(t, err) itr, err = gen.Iterator() @@ -541,32 +540,32 @@ func Test_Replay(t *testing.T) { sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) require.NoError(t, err) - tree = NewTree(sql, pool, TreeOptions{StateStorage: true, CheckpointInterval: 100}) + tree = NewTree(sql, TreeOptions{StateStorage: true, CheckpointInterval: 100}) err = tree.LoadVersion(170) require.NoError(t, err) itr, err = gen.Iterator() require.NoError(t, err) ingest(171, 250) - //sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) - //require.NoError(t, err) - //tree = NewTree(sql, pool, TreeOptions{StateStorage: true}) - //require.NoError(t, err) - //require.NoError(t, tree.Close()) - // - //sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) - //require.NoError(t, err) - //tree = NewTree(sql, pool, TreeOptions{StateStorage: true}) - //err = tree.LoadVersion(5) - //require.NoError(t, err) - // - //tree = NewTree(sql, pool, TreeOptions{StateStorage: true}) - //err = tree.LoadVersion(555) - //require.NoError(t, err) - // - //tree = NewTree(sql, pool, TreeOptions{StateStorage: true}) - //err = tree.LoadVersion(1000) - //require.NoError(t, err) + // sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) + // require.NoError(t, err) + // tree = NewTree(sql, TreeOptions{StateStorage: true}) + // require.NoError(t, err) + // require.NoError(t, tree.Close()) + + // sql, err = NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir}) + // require.NoError(t, err) + // tree = NewTree(sql, TreeOptions{StateStorage: true}) + // err = tree.LoadVersion(5) + // require.NoError(t, err) + + // tree = NewTree(sql, TreeOptions{StateStorage: true}) + // err = tree.LoadVersion(555) + // require.NoError(t, err) + + // tree = NewTree(sql, TreeOptions{StateStorage: true}) + // err = tree.LoadVersion(1000) + // require.NoError(t, err) } func Test_Prune_Logic(t *testing.T) { @@ -592,7 +591,7 @@ func Test_Prune_Logic(t *testing.T) { tmpDir := t.TempDir() sql, err := NewSqliteDb(pool, SqliteDbOptions{Path: tmpDir, ShardTrees: false}) require.NoError(t, err) - tree := NewTree(sql, pool, TreeOptions{StateStorage: true, CheckpointInterval: 100}) + tree := NewTree(sql, TreeOptions{StateStorage: true, CheckpointInterval: 100}) for ; itr.Valid(); err = itr.Next() { require.NoError(t, err) @@ -763,7 +762,7 @@ func newPrometheusMetricsProxy() *prometheusMetricsProxy { }) http.Handle("/metrics", promhttp.Handler()) go func() { - err := http.ListenAndServe(":2112", nil) + err := http.ListenAndServe(":2112", nil) // nolint: gosec if err != nil { panic(err) } diff --git a/visualize.go b/visualize.go index 6ef973166..1d2ebf518 100644 --- a/visualize.go +++ b/visualize.go @@ -6,7 +6,7 @@ import ( "github.com/emicklei/dot" ) -func writeDotGraph(root *Node, lastGraph *dot.Graph) *dot.Graph { +func writeDotGraph(root *Node, lastGraph *dot.Graph) *dot.Graph { // nolint: unused graph := dot.NewGraph(dot.Directed) var traverse func(node *Node) dot.Node From eab486880d4b4f79a4e16ea9c03a50934646876e Mon Sep 17 00:00:00 2001 From: Cool Developer Date: Tue, 26 Mar 2024 11:34:41 -0400 Subject: [PATCH 2/2] fix workflow --- .github/workflows/lint.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2a4cd670f..c35a2e5d0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,8 +15,8 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: '^1.20.0' + go-version: "^1.21.0" - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: - version: v1.51.2 + version: v1.55.2