Skip to content

Commit 0d64869

Browse files
fix: legacy node key (#928)
1 parent ff86011 commit 0d64869

3 files changed

Lines changed: 41 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
### Bug Fixes
4+
5+
- [#928](https://github.com/cosmos/iavl/pull/928) Fix the reformatted root node issue.
6+
37
## v1.1.1 March 16, 2024
48

59
### Bug Fixes

mutable_tree.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,10 +1010,7 @@ func (tree *MutableTree) saveNewNodes(version int64) error {
10101010
var recursiveAssignKey func(*Node) ([]byte, error)
10111011
recursiveAssignKey = func(node *Node) ([]byte, error) {
10121012
if node.nodeKey != nil {
1013-
if node.nodeKey.nonce != 0 {
1014-
return node.nodeKey.GetKey(), nil
1015-
}
1016-
return node.hash, nil
1013+
return node.GetKey(), nil
10171014
}
10181015
nonce++
10191016
node.nodeKey = &NodeKey{

tree_test.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1876,12 +1876,47 @@ func TestReferenceRoot(t *testing.T) {
18761876
_, _, err = tree.SaveVersion()
18771877
require.NoError(t, err)
18781878

1879-
// Load the tree from disk.
1879+
// load the tree from disk
18801880
tree = NewMutableTree(db, 0, false, log.NewNopLogger())
18811881
_, err = tree.Load()
18821882
require.NoError(t, err)
18831883
require.Equal(t, int64(2), tree.Version())
18841884
// check the root of version 2 is the leaf node of key2
18851885
require.Equal(t, tree.root.GetKey(), (&NodeKey{version: 1, nonce: 3}).GetKey())
18861886
require.Equal(t, tree.root.key, []byte("key2"))
1887+
1888+
// test the reference root when pruning
1889+
db, err = dbm.NewDB("test", "memdb", "")
1890+
require.NoError(t, err)
1891+
tree = NewMutableTree(db, 0, false, log.NewNopLogger())
1892+
1893+
_, err = tree.Set([]byte("key1"), []byte("value1"))
1894+
require.NoError(t, err)
1895+
1896+
_, _, err = tree.SaveVersion()
1897+
require.NoError(t, err)
1898+
1899+
_, _, err = tree.SaveVersion() // empty version
1900+
require.NoError(t, err)
1901+
1902+
require.NoError(t, tree.DeleteVersionsTo(1))
1903+
_, _, err = tree.SaveVersion() // empty version
1904+
require.NoError(t, err)
1905+
1906+
// load the tree from disk
1907+
tree = NewMutableTree(db, 0, false, log.NewNopLogger())
1908+
_, err = tree.Load()
1909+
require.NoError(t, err)
1910+
1911+
_, err = tree.Set([]byte("key2"), []byte("value2"))
1912+
require.NoError(t, err)
1913+
_, _, err = tree.SaveVersion()
1914+
require.NoError(t, err)
1915+
1916+
// load the tree from disk to check if the reference root is loaded correctly
1917+
tree = NewMutableTree(db, 0, false, log.NewNopLogger())
1918+
_, err = tree.Load()
1919+
require.NoError(t, err)
1920+
_, err = tree.Set([]byte("key1"), []byte("value2"))
1921+
require.NoError(t, err)
18871922
}

0 commit comments

Comments
 (0)