MCPcopy Create free account
hub / github.com/nutsdb/nutsdb / TestDB_MergeWithHintFile

Function TestDB_MergeWithHintFile

merge_test.go:618–713  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

616}
617
618func TestDB_MergeWithHintFile(t *testing.T) {
619 runForMergeModes(t, func(t *testing.T, mode mergeTestMode) {
620 bucket := "bucket"
621 opts := DefaultOptions
622 opts.SegmentSize = KB
623 opts.Dir = fmt.Sprintf("/tmp/test-merge-hintfile-%s/", mode.name)
624 opts.EnableHintFile = true
625 opts.EnableMergeV2 = mode.enableMergeV2
626
627 for _, idxMode := range []EntryIdxMode{HintKeyValAndRAMIdxMode, HintKeyAndRAMIdxMode} {
628 removeDir(opts.Dir)
629 opts.EntryIdxMode = idxMode
630
631 db, err := Open(opts)
632 require.NoError(t, err)
633 txCreateBucket(t, db, DataStructureBTree, bucket, nil)
634
635 n := 2000
636 for i := 0; i < n; i++ {
637 txPut(t, db, bucket, testutils.GetTestBytes(i), testutils.GetTestBytes(i), Persistent, nil, nil)
638 }
639
640 for i := 0; i < n/2; i++ {
641 txDel(t, db, bucket, testutils.GetTestBytes(i), nil)
642 }
643
644 require.NoError(t, db.Close())
645 db, err = Open(opts)
646 require.NoError(t, err)
647
648 require.NoError(t, db.Merge())
649
650 sets := collectMergeFileSets(t, opts.Dir)
651 idsToCheck := dataFileIDsForMode(mode, sets)
652 require.Greater(t, len(idsToCheck), 0)
653
654 totalHintEntryCount := 0
655 for _, fid := range idsToCheck {
656 hintPath := getHintPath(fid, opts.Dir)
657
658 _, err = os.Stat(hintPath)
659 require.NoError(t, err, "Hint file should exist after merge for file %d", fid)
660
661 reader := &HintFileReader{}
662 err = reader.Open(hintPath)
663 require.NoError(t, err)
664
665 hintEntryCount := 0
666 for {
667 _, err := reader.Read()
668 if err == io.EOF {
669 break
670 }
671 require.NoError(t, err)
672 hintEntryCount++
673 }
674 _ = reader.Close()
675

Callers

nothing calls this directly

Calls 15

OpenMethod · 0.95
ReadMethod · 0.95
CloseMethod · 0.95
GetTestBytesFunction · 0.92
runForMergeModesFunction · 0.85
removeDirFunction · 0.85
OpenFunction · 0.85
txCreateBucketFunction · 0.85
txPutFunction · 0.85
txDelFunction · 0.85
collectMergeFileSetsFunction · 0.85
dataFileIDsForModeFunction · 0.85

Tested by

no test coverage detected