Skip to content

Commit

Permalink
fix: make LazyLoadVersion possible to load empty root
Browse files Browse the repository at this point in the history
  • Loading branch information
Woosang Son committed Apr 26, 2021
1 parent 7501c2c commit c4c54b5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
6 changes: 5 additions & 1 deletion mutable_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,11 @@ func (tree *MutableTree) LazyLoadVersion(targetVersion int64) (int64, error) {
iTree := &ImmutableTree{
ndb: tree.ndb,
version: targetVersion,
root: tree.ndb.GetNode(rootHash),
}
if len(rootHash) > 0 {
// If rootHash is empty then root of tree should be nil
// This makes `LazyLoadVersion` to do the same thing as `LoadVersion`
iTree.root = tree.ndb.GetNode(rootHash)
}

tree.orphans = map[string]int64{}
Expand Down
22 changes: 22 additions & 0 deletions mutable_tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,3 +358,25 @@ func TestMutableTree_DeleteVersion(t *testing.T) {
// cannot delete latest version
require.Error(t, tree.DeleteVersion(2))
}

func TestMutableTree_LazyLoadVersionWithEmptyTree(t *testing.T) {
mdb := db.NewMemDB()
tree, err := NewMutableTree(mdb, 1000)
require.NoError(t, err)
_, v1, err := tree.SaveVersion()
require.NoError(t, err)

newTree1, err := NewMutableTree(mdb, 1000)
require.NoError(t, err)
v2, err := newTree1.LazyLoadVersion(1)
require.NoError(t, err)
require.True(t, v1 == v2)

newTree2, err := NewMutableTree(mdb, 1000)
require.NoError(t, err)
v2, err = newTree1.LoadVersion(1)
require.NoError(t, err)
require.True(t, v1 == v2)

require.True(t, newTree1.root == newTree2.root)
}

0 comments on commit c4c54b5

Please sign in to comment.