(t *testing.T)
| 616 | } |
| 617 | |
| 618 | func 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 |
nothing calls this directly
no test coverage detected