TestHintFileIntegration_EnableDisableToggle tests enabling and disabling hint files
(t *testing.T)
| 107 | |
| 108 | // TestHintFileIntegration_EnableDisableToggle tests enabling and disabling hint files |
| 109 | func TestHintFileIntegration_EnableDisableToggle(t *testing.T) { |
| 110 | runForMergeModes(t, func(t *testing.T, mode mergeTestMode) { |
| 111 | bucket := "bucket" |
| 112 | opts := DefaultOptions |
| 113 | opts.SegmentSize = 64 * KB |
| 114 | opts.Dir = filepath.Join(t.TempDir(), fmt.Sprintf("test-hintfile-toggle-%s", mode.name)) |
| 115 | opts.EnableMergeV2 = mode.enableMergeV2 |
| 116 | |
| 117 | removeDir(opts.Dir) |
| 118 | |
| 119 | // Test with hint files enabled |
| 120 | opts.EnableHintFile = true |
| 121 | |
| 122 | db, err := Open(opts) |
| 123 | require.NoError(t, err) |
| 124 | txCreateBucket(t, db, DataStructureBTree, bucket, nil) |
| 125 | |
| 126 | // Write enough data to generate at least 2 data files (for merge to work) |
| 127 | n := 2000 |
| 128 | for i := 0; i < n; i++ { |
| 129 | txPut(t, db, bucket, testutils.GetTestBytes(i), testutils.GetTestBytes(i), Persistent, nil, nil) |
| 130 | } |
| 131 | |
| 132 | // Perform merge |
| 133 | require.NoError(t, db.Merge()) |
| 134 | |
| 135 | // Verify hint files are created for all merged files |
| 136 | setsEnabled := collectMergeFileSets(t, opts.Dir) |
| 137 | firstIDs := dataFileIDsForMode(mode, setsEnabled) |
| 138 | require.Greater(t, len(firstIDs), 0) |
| 139 | |
| 140 | for _, fid := range firstIDs { |
| 141 | hintPath := getHintPath(fid, opts.Dir) |
| 142 | _, err = os.Stat(hintPath) |
| 143 | require.NoError(t, err, "Hint file should exist when EnableHintFile is true for file %d", fid) |
| 144 | } |
| 145 | |
| 146 | require.NoError(t, db.Close()) |
| 147 | |
| 148 | // Test with hint files disabled |
| 149 | opts.EnableHintFile = false |
| 150 | |
| 151 | db, err = Open(opts) |
| 152 | require.NoError(t, err) |
| 153 | |
| 154 | // Write more data to generate additional files for the second merge |
| 155 | for i := n; i < n+1500; i++ { |
| 156 | txPut(t, db, bucket, testutils.GetTestBytes(i), testutils.GetTestBytes(i), Persistent, nil, nil) |
| 157 | } |
| 158 | |
| 159 | // Perform merge (should not create hint files) |
| 160 | require.NoError(t, db.Merge()) |
| 161 | |
| 162 | setsDisabled := collectMergeFileSets(t, opts.Dir) |
| 163 | secondIDs := unionDataFileIDs(setsDisabled) |
| 164 | require.Greater(t, len(secondIDs), 0) |
| 165 | |
| 166 | // Check that hint files do not exist for any merged files |
nothing calls this directly
no test coverage detected