Skip to content

Commit

Permalink
Add prints
Browse files Browse the repository at this point in the history
  • Loading branch information
yzang2019 committed Dec 8, 2023
1 parent 316ab35 commit 9365ed9
Show file tree
Hide file tree
Showing 8 changed files with 188 additions and 4 deletions.
5 changes: 3 additions & 2 deletions immutable_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,15 @@ func (t *ImmutableTree) renderNode(node *Node, indent string, depth int, encoder
}
// handle leaf
if node.isLeaf() {
here := fmt.Sprintf("%s%s", prefix, encoder(node.GetNodeKey(), depth, true))
here := fmt.Sprintf("%s|key:%s,val:%s,ver:%d,height:%d", prefix, encoder(node.GetNodeKey(), depth, true), string(node.GetValue()), node.GetVersion(), node.height)
return []string{here}, nil
}

// recurse on inner node
here := fmt.Sprintf("%s%s", prefix, encoder(node.GetHash(), depth, false))
here := fmt.Sprintf("%s%s|ver:%d|h:%d", prefix, encoder(node.GetNodeKey(), depth, false), node.version, node.height)

rightNode, err := node.getRightNode(t)

if err != nil {
return nil, err
}
Expand Down
6 changes: 6 additions & 0 deletions mutable_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ func (tree *MutableTree) Set(key, value []byte) (updated bool, err error) {
return false, err
}
err = tree.addOrphans(orphaned)

if err != nil {
return updated, err
}
Expand Down Expand Up @@ -271,6 +272,10 @@ func (tree *MutableTree) set(key []byte, value []byte) (orphans []*Node, updated

orphans = tree.prepareOrphansSlice()
tree.ITree.root, updated, err = tree.recursiveSet(tree.ITree.root, key, value, &orphans)
if err != nil {
return nil, updated, err
}

return orphans, updated, err
}

Expand Down Expand Up @@ -1405,6 +1410,7 @@ func (tree *MutableTree) addOrphans(orphans []*Node) error {
if len(node.GetHash()) == 0 {
return fmt.Errorf("expected to find node hash, but was empty")
}
fmt.Printf("adding orphan: %s\n", node.String())
tree.orphans[unsafeToStr(node.GetHash())] = node.GetVersion()
}
return nil
Expand Down
109 changes: 109 additions & 0 deletions mutable_tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"runtime"
"sort"
"strconv"
"strings"
"testing"

"github.com/cosmos/iavl/internal/encoding"
Expand Down Expand Up @@ -1481,3 +1482,111 @@ func TestSaveCurrentVersion_ChangedHash(t *testing.T) {
_, version, err = tree.SaveCurrentVersion()
require.Error(t, err)
}

func TestAddPrint(t *testing.T) {
tree := setupMutableTree(t)
tree.Set([]byte("1"), []byte("1"))
tree.SaveVersion()
shape, err := tree.ITree.RenderShape("\t", myNodeEncoder)
require.NoError(t, err)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("2"), []byte("2"))
tree.SaveVersion()
shape, err = tree.ITree.RenderShape("\t", myNodeEncoder)
require.NoError(t, err)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("3"), []byte("3"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("4"), []byte("4"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("5"), []byte("5"))
tree.SaveVersion()
shape, err = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("6"), []byte("6"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("7"), []byte("7"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("8"), []byte("9"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
tree.Set([]byte("9"), []byte("9"))
tree.SaveVersion()
shape, _ = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s", strings.Join(shape, "\n"))
fmt.Printf("===========================================\n")
}

func TestAddVersions(t *testing.T) {
tree := setupMutableTree(t)

// step 1
tree.Set([]byte("1"), []byte("1"))
tree.SaveVersion()
tree.ndb.traverse(func(key, value []byte) error {
fmt.Printf("db key: %s\n", key)
return nil
})
shape, err := tree.ITree.RenderShape("\t", myNodeEncoder)
require.NoError(t, err)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("=========================\n")

// step 2
tree.Set([]byte("2"), []byte("2"))
tree.SaveVersion()
tree.ndb.traverse(func(key, value []byte) error {
fmt.Printf("db key: %s\n", key)
return nil
})
fmt.Printf("tree version: %d\n", tree.Version())
shape, err = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("=========================\n")

// step 3
tree.SaveVersion()
tree.ndb.traverse(func(key, value []byte) error {
fmt.Printf("db key: %s\n", key)
return nil
})

// step 4
tree.Set([]byte("2"), []byte("4"))
tree.SaveVersion()
tree.ndb.traverse(func(key, value []byte) error {
fmt.Printf("db key: %s\n", key)
return nil
})
fmt.Printf("tree version: %d\n", tree.Version())
shape, err = tree.ITree.RenderShape("\t", myNodeEncoder)
fmt.Printf("%s\n", strings.Join(shape, "\n"))
fmt.Printf("=========================\n")

}

// defaultNodeEncoder can encode any node unless the client overrides it
func myNodeEncoder(key []byte, depth int, isLeaf bool) string {
if isLeaf {
return fmt.Sprintf("%s-%s", "LF", string(key))
}
return fmt.Sprintf("%s-%s", "BR", string(key))

}
4 changes: 3 additions & 1 deletion node.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,11 @@ func (node *Node) String() string {
if len(node.hash) > 0 {
hashstr = fmt.Sprintf("%X", node.hash)
}
return fmt.Sprintf("Node{%s:%s@%d %X;%X}#%s",
return fmt.Sprintf("Node key:%s, value:%s, height: %d, size:%d, version:%d, lh:%X, rh:%X, #%s",
ColoredBytes(node.key, Green, Blue),
ColoredBytes(node.value, Cyan, Blue),
node.height,
node.size,
node.version,
node.leftHash, node.rightHash,
hashstr)
Expand Down
3 changes: 2 additions & 1 deletion nodedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ func (ndb *nodeDB) SaveOrphans(version int64, orphans map[string]int64) error {
}

for hash, fromVersion := range orphans {
logger.Debug("SAVEORPHAN %v-%v %X\n", fromVersion, toVersion, hash)
//fmt.Printf("SAVEORPHAN %v-%v %X\n", fromVersion, toVersion, hash)
err := ndb.saveOrphan([]byte(hash), fromVersion, toVersion)
if err != nil {
return err
Expand Down Expand Up @@ -916,6 +916,7 @@ func (ndb *nodeDB) SaveRoot(root *Node, version int64) error {
if len(root.GetHash()) == 0 {
return ErrRootMissingHash
}
fmt.Printf("Saving root %s at version %d\n", string(root.key), version)
return ndb.saveRoot(root.GetHash(), version)
}

Expand Down
26 changes: 26 additions & 0 deletions proto/memiavl/commit_info.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
syntax = "proto3";
package memiavl;

option go_package = "github.com/sei-protocol/sei-db";

// CommitInfo defines commit information used by the multi-store when committing
// a version/height.
message CommitInfo {
int64 version = 1;
repeated StoreInfo store_infos = 2;
}

// StoreInfo defines store-specific commit information. It contains a reference
// between a store name and the commit ID.
message StoreInfo {
string name = 1;
CommitID commit_id = 2;
}

// CommitID defines the committment information when a specific store is
// committed.
message CommitID {

int64 version = 1;
bytes hash = 2;
}
35 changes: 35 additions & 0 deletions proto/memiavl/wal.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
syntax = "proto3";
package memiavl;

option go_package = "github.com/sei-protocol/sei-db";

import "iavl/changeset.proto";
import "memiavl/commit_info.proto";

// NamedChangeSet combine a tree name with the changeset
message NamedChangeSet {
iavl.ChangeSet changeset = 1;
string name = 2;
}

// TreeNameUpgrade defines upgrade of tree names:
// - New tree: { name: "tree" }
// - Delete tree: { name: "tree", delete: true }
// - Rename tree: { name: "new-tree", rename_from: "old-tree" }
message TreeNameUpgrade {
string name = 1;
string rename_from = 2;
bool delete = 3;
}

// WALEntry is a single Write-Ahead-Log entry
message WALEntry {
repeated NamedChangeSet changesets = 1;
repeated TreeNameUpgrade upgrades = 2;
}

// MultiTreeMetadata stores the metadata for MultiTree
message MultiTreeMetadata {
CommitInfo commit_info = 1;
int64 initial_version = 2;
}
4 changes: 4 additions & 0 deletions scripts/protocgen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@ set -eo pipefail
buf generate --path proto/iavl

mv ./proto/iavl/*.go ./proto

buf generate --path proto/memiavl

mv ./proto/memiavl/*.go ./proto

0 comments on commit 9365ed9

Please sign in to comment.