TestHintFileIntegration_LargeDataset tests hint files with large datasets
(t *testing.T)
| 517 | |
| 518 | // TestHintFileIntegration_LargeDataset tests hint files with large datasets |
| 519 | func 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 | } |
nothing calls this directly
no test coverage detected