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

Function TestHintFileIntegration_LargeDataset

hintfile_integration_test.go:519–589  ·  view source on GitHub ↗

TestHintFileIntegration_LargeDataset tests hint files with large datasets

(t *testing.T)

Source from the content-addressed store, hash-verified

517
518// TestHintFileIntegration_LargeDataset tests hint files with large datasets
519func TestHintFileIntegration_LargeDataset(t *testing.T) {
520 if testing.Short() {
521 t.Skip("Skipping large dataset test in short mode")
522 }
523
524 runForMergeModes(t, func(t *testing.T, mode mergeTestMode) {
525 opts := DefaultOptions
526 opts.SegmentSize = 256 * KB
527 opts.Dir = filepath.Join(t.TempDir(), fmt.Sprintf("test-hintfile-large-%s", mode.name))
528 opts.EnableHintFile = true
529 opts.EnableMergeV2 = mode.enableMergeV2
530
531 removeDir(opts.Dir)
532
533 db, err := Open(opts)
534 require.NoError(t, err)
535
536 bucket := "bucket"
537 txCreateBucket(t, db, DataStructureBTree, bucket, nil)
538
539 // Write a large amount of data
540 n := 10000
541 for i := 0; i < n; i++ {
542 txPut(t, db, bucket, testutils.GetTestBytes(i), testutils.GetTestBytes(i), Persistent, nil, nil)
543 }
544
545 // Delete some data
546 for i := 0; i < n/4; i++ {
547 txDel(t, db, bucket, testutils.GetTestBytes(i), nil)
548 }
549
550 // Perform merge
551 start := time.Now()
552 require.NoError(t, db.Merge())
553 mergeTime := time.Since(start)
554 t.Logf("%s merge completed in %v", mode.name, mergeTime)
555
556 // Verify hint files are created
557 sets := collectMergeFileSets(t, opts.Dir)
558 idsToCheck := dataFileIDsForMode(mode, sets)
559 require.Greater(t, len(idsToCheck), 0)
560 hintPath := getHintPath(idsToCheck[len(idsToCheck)-1], opts.Dir)
561 _, err = os.Stat(hintPath)
562 require.NoError(t, err, "Hint file should exist after merge")
563
564 require.NoError(t, db.Close())
565
566 // Restart and verify recovery
567 start = time.Now()
568 db, err = Open(opts)
569 require.NoError(t, err)
570 recoveryTime := time.Since(start)
571 t.Logf("%s recovery completed in %v", mode.name, recoveryTime)
572
573 // Verify sample data
574 for i := n / 4; i < n/4+100; i++ {
575 txGet(t, db, bucket, testutils.GetTestBytes(i), testutils.GetTestBytes(i), nil)
576 }

Callers

nothing calls this directly

Calls 15

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
getHintPathFunction · 0.85
txGetFunction · 0.85
MergeMethod · 0.80

Tested by

no test coverage detected