From 0a756f081925526ae035e3d72fda666ae6c1aad1 Mon Sep 17 00:00:00 2001 From: HuangYi Date: Fri, 1 Sep 2023 14:38:18 +0800 Subject: [PATCH] add unit test that reproduce the issue --- memiavl/db_test.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/memiavl/db_test.go b/memiavl/db_test.go index 003a03cf65..469b1a9bd8 100644 --- a/memiavl/db_test.go +++ b/memiavl/db_test.go @@ -280,16 +280,27 @@ func TestLoadVersion(t *testing.T) { } func TestZeroCopy(t *testing.T) { - db, err := Load(t.TempDir(), Options{InitialStores: []string{"test"}, CreateIfMissing: true, ZeroCopy: true}) + db, err := Load(t.TempDir(), Options{InitialStores: []string{"test", "test2"}, CreateIfMissing: true, ZeroCopy: true}) require.NoError(t, err) - db.Commit([]*NamedChangeSet{ + _, _, err = db.Commit([]*NamedChangeSet{ {Name: "test", Changeset: ChangeSets[0]}, + {Name: "test2"}, }) + require.NoError(t, err) require.NoError(t, errors.Join( db.RewriteSnapshot(), db.Reload(), )) + // the test tree's root hash will reference the zero-copy value + _, _, err = db.Commit([]*NamedChangeSet{ + {Name: "test"}, + {Name: "test2", Changeset: ChangeSets[0]}, + }) + require.NoError(t, err) + + commitInfo := *db.LastCommitInfo() + value := db.TreeByName("test").Get([]byte("hello")) require.Equal(t, []byte("world"), value) @@ -297,6 +308,8 @@ func TestZeroCopy(t *testing.T) { valueCloned := db.TreeByName("test").Get([]byte("hello")) require.Equal(t, []byte("world"), valueCloned) + _ = commitInfo.CommitID() + require.NoError(t, db.Close()) require.Equal(t, []byte("world"), valueCloned) @@ -307,6 +320,9 @@ func TestZeroCopy(t *testing.T) { require.Panics(t, func() { require.Equal(t, []byte("world"), value) }) + + // it's ok to access after db closed + _ = commitInfo.CommitID() } func TestWalIndexConversion(t *testing.T) {