Skip to content

Commit 0a756f0

Browse files
author
HuangYi
committed
add unit test that reproduce the issue
1 parent f40ba07 commit 0a756f0

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

memiavl/db_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,23 +280,36 @@ func TestLoadVersion(t *testing.T) {
280280
}
281281

282282
func TestZeroCopy(t *testing.T) {
283-
db, err := Load(t.TempDir(), Options{InitialStores: []string{"test"}, CreateIfMissing: true, ZeroCopy: true})
283+
db, err := Load(t.TempDir(), Options{InitialStores: []string{"test", "test2"}, CreateIfMissing: true, ZeroCopy: true})
284284
require.NoError(t, err)
285-
db.Commit([]*NamedChangeSet{
285+
_, _, err = db.Commit([]*NamedChangeSet{
286286
{Name: "test", Changeset: ChangeSets[0]},
287+
{Name: "test2"},
287288
})
289+
require.NoError(t, err)
288290
require.NoError(t, errors.Join(
289291
db.RewriteSnapshot(),
290292
db.Reload(),
291293
))
292294

295+
// the test tree's root hash will reference the zero-copy value
296+
_, _, err = db.Commit([]*NamedChangeSet{
297+
{Name: "test"},
298+
{Name: "test2", Changeset: ChangeSets[0]},
299+
})
300+
require.NoError(t, err)
301+
302+
commitInfo := *db.LastCommitInfo()
303+
293304
value := db.TreeByName("test").Get([]byte("hello"))
294305
require.Equal(t, []byte("world"), value)
295306

296307
db.SetZeroCopy(false)
297308
valueCloned := db.TreeByName("test").Get([]byte("hello"))
298309
require.Equal(t, []byte("world"), valueCloned)
299310

311+
_ = commitInfo.CommitID()
312+
300313
require.NoError(t, db.Close())
301314

302315
require.Equal(t, []byte("world"), valueCloned)
@@ -307,6 +320,9 @@ func TestZeroCopy(t *testing.T) {
307320
require.Panics(t, func() {
308321
require.Equal(t, []byte("world"), value)
309322
})
323+
324+
// it's ok to access after db closed
325+
_ = commitInfo.CommitID()
310326
}
311327

312328
func TestWalIndexConversion(t *testing.T) {

0 commit comments

Comments
 (0)