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

Function TestHintFileIntegration_EnableDisableToggle

hintfile_integration_test.go:109–185  ·  view source on GitHub ↗

TestHintFileIntegration_EnableDisableToggle tests enabling and disabling hint files

(t *testing.T)

Source from the content-addressed store, hash-verified

107
108// TestHintFileIntegration_EnableDisableToggle tests enabling and disabling hint files
109func 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

Callers

nothing calls this directly

Calls 13

GetTestBytesFunction · 0.92
runForMergeModesFunction · 0.85
removeDirFunction · 0.85
OpenFunction · 0.85
txCreateBucketFunction · 0.85
txPutFunction · 0.85
collectMergeFileSetsFunction · 0.85
dataFileIDsForModeFunction · 0.85
getHintPathFunction · 0.85
unionDataFileIDsFunction · 0.85
MergeMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected