|
2 | 2 | // This source code is licensed under both the Apache 2.0 and MIT License |
3 | 3 | // (found in the LICENSE-* files in the repository) |
4 | 4 |
|
| 5 | +// #[cfg(test)] |
| 6 | +// mod test; |
| 7 | + |
5 | 8 | use super::{Choice, CompactionStrategy, Input as CompactionInput}; |
6 | 9 | use crate::{ |
7 | 10 | compaction::state::{hidden_set::HiddenSet, CompactionState}, |
@@ -503,310 +506,3 @@ impl CompactionStrategy for Strategy { |
503 | 506 | Choice::Merge(choice) |
504 | 507 | } |
505 | 508 | } |
506 | | - |
507 | | -/* |
508 | | -#[cfg(test)] |
509 | | -mod tests { |
510 | | - use super::{Choice, Strategy}; |
511 | | - use crate::{ |
512 | | - cache::Cache, |
513 | | - compaction::{CompactionStrategy, Input as CompactionInput}, |
514 | | - descriptor_table::FileDescriptorTable, |
515 | | - level_manifest::LevelManifest, |
516 | | - segment::{ |
517 | | - block::offset::BlockOffset, |
518 | | - block_index::{two_level_index::TwoLevelBlockIndex, BlockIndexImpl}, |
519 | | - file_offsets::FileOffsets, |
520 | | - meta::{Metadata, SegmentId}, |
521 | | - SegmentInner, |
522 | | - }, |
523 | | - super_segment::Segment, |
524 | | - time::unix_timestamp, |
525 | | - Config, HashSet, KeyRange, |
526 | | - }; |
527 | | - use std::{ |
528 | | - path::Path, |
529 | | - sync::{atomic::AtomicBool, Arc}, |
530 | | - }; |
531 | | - use test_log::test; |
532 | | -
|
533 | | - fn string_key_range(a: &str, b: &str) -> KeyRange { |
534 | | - KeyRange::new((a.as_bytes().into(), b.as_bytes().into())) |
535 | | - } |
536 | | -
|
537 | | - #[allow( |
538 | | - clippy::expect_used, |
539 | | - clippy::cast_possible_truncation, |
540 | | - clippy::cast_sign_loss |
541 | | - )] |
542 | | - fn fixture_segment( |
543 | | - id: SegmentId, |
544 | | - key_range: KeyRange, |
545 | | - size: u64, |
546 | | - tombstone_ratio: f32, |
547 | | - ) -> Segment { |
548 | | - todo!() |
549 | | -
|
550 | | - /* let cache = Arc::new(Cache::with_capacity_bytes(10 * 1_024 * 1_024)); |
551 | | -
|
552 | | - let block_index = TwoLevelBlockIndex::new((0, id).into(), cache.clone()); |
553 | | - let block_index = Arc::new(BlockIndexImpl::TwoLevel(block_index)); |
554 | | -
|
555 | | - SegmentInner { |
556 | | - tree_id: 0, |
557 | | - descriptor_table: Arc::new(FileDescriptorTable::new(512, 1)), |
558 | | - block_index, |
559 | | -
|
560 | | - offsets: FileOffsets { |
561 | | - bloom_ptr: BlockOffset(0), |
562 | | - range_filter_ptr: BlockOffset(0), |
563 | | - index_block_ptr: BlockOffset(0), |
564 | | - metadata_ptr: BlockOffset(0), |
565 | | - range_tombstones_ptr: BlockOffset(0), |
566 | | - tli_ptr: BlockOffset(0), |
567 | | - pfx_ptr: BlockOffset(0), |
568 | | - }, |
569 | | -
|
570 | | - metadata: Metadata { |
571 | | - data_block_count: 0, |
572 | | - index_block_count: 0, |
573 | | - data_block_size: 4_096, |
574 | | - index_block_size: 4_096, |
575 | | - created_at: unix_timestamp().as_nanos(), |
576 | | - id, |
577 | | - file_size: size, |
578 | | - compression: crate::segment::meta::CompressionType::None, |
579 | | - table_type: crate::segment::meta::TableType::Block, |
580 | | - item_count: 1_000_000, |
581 | | - key_count: 0, |
582 | | - key_range, |
583 | | - tombstone_count: (1_000_000.0 * tombstone_ratio) as u64, |
584 | | - range_tombstone_count: 0, |
585 | | - uncompressed_size: 0, |
586 | | - seqnos: (0, 0), |
587 | | - }, |
588 | | - cache, |
589 | | -
|
590 | | - bloom_filter: Some(crate::bloom::BloomFilter::with_fp_rate(1, 0.1)), |
591 | | -
|
592 | | - path: "a".into(), |
593 | | - is_deleted: AtomicBool::default(), |
594 | | - } |
595 | | - .into() */ |
596 | | - } |
597 | | -
|
598 | | - #[allow(clippy::expect_used)] |
599 | | - fn build_levels( |
600 | | - path: &Path, |
601 | | - recipe: Vec<Vec<(SegmentId, &str, &str, u64)>>, |
602 | | - ) -> crate::Result<LevelManifest> { |
603 | | - let mut levels = LevelManifest::create_new( |
604 | | - recipe.len().try_into().expect("oopsie"), |
605 | | - path.join("levels"), |
606 | | - )?; |
607 | | -
|
608 | | - for (idx, level) in recipe.into_iter().enumerate() { |
609 | | - for (id, min, max, size_mib) in level { |
610 | | - levels.insert_into_level( |
611 | | - idx.try_into().expect("oopsie"), |
612 | | - fixture_segment( |
613 | | - id, |
614 | | - string_key_range(min, max), |
615 | | - size_mib * 1_024 * 1_024, |
616 | | - 0.0, |
617 | | - ), |
618 | | - ); |
619 | | - } |
620 | | - } |
621 | | -
|
622 | | - Ok(levels) |
623 | | - } |
624 | | -
|
625 | | - #[test] |
626 | | - fn leveled_empty_levels() -> crate::Result<()> { |
627 | | - let tempdir = tempfile::tempdir()?; |
628 | | - let compactor = Strategy::default(); |
629 | | -
|
630 | | - #[rustfmt::skip] |
631 | | - let levels = build_levels(tempdir.path(), vec![ |
632 | | - vec![], |
633 | | - vec![], |
634 | | - vec![], |
635 | | - vec![], |
636 | | - ])?; |
637 | | -
|
638 | | - assert_eq!( |
639 | | - compactor.choose(&levels, &Config::default()), |
640 | | - Choice::DoNothing |
641 | | - ); |
642 | | -
|
643 | | - Ok(()) |
644 | | - } |
645 | | -
|
646 | | - #[test] |
647 | | - fn leveled_default_l0() -> crate::Result<()> { |
648 | | - let tempdir = tempfile::tempdir()?; |
649 | | - let compactor = Strategy { |
650 | | - target_size: 64 * 1_024 * 1_024, |
651 | | - ..Default::default() |
652 | | - }; |
653 | | -
|
654 | | - #[rustfmt::skip] |
655 | | - let mut levels = build_levels(tempdir.path(), vec![ |
656 | | - vec![(1, "a", "z", 64), (2, "a", "z", 64), (3, "a", "z", 64), (4, "a", "z", 64)], |
657 | | - vec![], |
658 | | - vec![], |
659 | | - vec![], |
660 | | - ])?; |
661 | | -
|
662 | | - assert_eq!( |
663 | | - compactor.choose(&levels, &Config::default()), |
664 | | - Choice::Merge(CompactionInput { |
665 | | - dest_level: 1, |
666 | | - segment_ids: [1, 2, 3, 4].into_iter().collect::<HashSet<_>>(), |
667 | | - target_size: 64 * 1_024 * 1_024 |
668 | | - }) |
669 | | - ); |
670 | | -
|
671 | | - levels.hide_segments(std::iter::once(4)); |
672 | | -
|
673 | | - assert_eq!( |
674 | | - compactor.choose(&levels, &Config::default()), |
675 | | - Choice::DoNothing |
676 | | - ); |
677 | | -
|
678 | | - Ok(()) |
679 | | - } |
680 | | -
|
681 | | - #[test] |
682 | | - #[allow( |
683 | | - clippy::cast_sign_loss, |
684 | | - clippy::cast_precision_loss, |
685 | | - clippy::cast_possible_truncation |
686 | | - )] |
687 | | - fn leveled_intra_l0() -> crate::Result<()> { |
688 | | - let tempdir = tempfile::tempdir()?; |
689 | | - let compactor = Strategy { |
690 | | - target_size: 64 * 1_024 * 1_024, |
691 | | - ..Default::default() |
692 | | - }; |
693 | | -
|
694 | | - #[rustfmt::skip] |
695 | | - let mut levels = build_levels(tempdir.path(), vec![ |
696 | | - vec![(1, "a", "z", 1), (2, "a", "z", 1), (3, "a", "z", 1), (4, "a", "z", 1)], |
697 | | - vec![], |
698 | | - vec![], |
699 | | - vec![], |
700 | | - ])?; |
701 | | -
|
702 | | - assert_eq!( |
703 | | - compactor.choose(&levels, &Config::default()), |
704 | | - Choice::Merge(CompactionInput { |
705 | | - dest_level: 0, |
706 | | - segment_ids: [1, 2, 3, 4].into_iter().collect::<HashSet<_>>(), |
707 | | - target_size: u64::from(compactor.target_size), |
708 | | - }) |
709 | | - ); |
710 | | -
|
711 | | - levels.hide_segments(std::iter::once(4)); |
712 | | -
|
713 | | - assert_eq!( |
714 | | - compactor.choose(&levels, &Config::default()), |
715 | | - Choice::DoNothing |
716 | | - ); |
717 | | -
|
718 | | - Ok(()) |
719 | | - } |
720 | | -
|
721 | | - #[test] |
722 | | - fn leveled_more_than_min_no_overlap() -> crate::Result<()> { |
723 | | - let tempdir = tempfile::tempdir()?; |
724 | | - let compactor = Strategy { |
725 | | - target_size: 64 * 1_024 * 1_024, |
726 | | - ..Default::default() |
727 | | - }; |
728 | | -
|
729 | | - #[rustfmt::skip] |
730 | | - let levels = build_levels(tempdir.path(), vec![ |
731 | | - vec![(1, "h", "t", 64), (2, "h", "t", 64), (3, "h", "t", 64), (4, "h", "t", 64)], |
732 | | - vec![(5, "a", "g", 64), (6, "a", "g", 64), (7, "a", "g", 64), (8, "a", "g", 64)], |
733 | | - vec![], |
734 | | - vec![], |
735 | | - ])?; |
736 | | -
|
737 | | - assert_eq!( |
738 | | - compactor.choose(&levels, &Config::default()), |
739 | | - Choice::Merge(CompactionInput { |
740 | | - dest_level: 1, |
741 | | - segment_ids: [1, 2, 3, 4].into_iter().collect::<HashSet<_>>(), |
742 | | - target_size: 64 * 1_024 * 1_024 |
743 | | - }) |
744 | | - ); |
745 | | -
|
746 | | - Ok(()) |
747 | | - } |
748 | | -
|
749 | | - #[test] |
750 | | - fn leveled_more_than_min_with_overlap() -> crate::Result<()> { |
751 | | - let tempdir = tempfile::tempdir()?; |
752 | | - let compactor = Strategy { |
753 | | - target_size: 64 * 1_024 * 1_024, |
754 | | - ..Default::default() |
755 | | - }; |
756 | | -
|
757 | | - #[rustfmt::skip] |
758 | | - let mut levels = build_levels(tempdir.path(), vec![ |
759 | | - vec![(1, "a", "g", 64), (2, "h", "t", 64), (3, "i", "t", 64), (4, "j", "t", 64)], |
760 | | - vec![(5, "a", "g", 64), (6, "a", "g", 64), (7, "y", "z", 64), (8, "y", "z", 64)], |
761 | | - vec![], |
762 | | - vec![], |
763 | | - ])?; |
764 | | -
|
765 | | - assert_eq!( |
766 | | - compactor.choose(&levels, &Config::default()), |
767 | | - Choice::Merge(CompactionInput { |
768 | | - dest_level: 1, |
769 | | - segment_ids: [1, 2, 3, 4, 5, 6].into_iter().collect::<HashSet<_>>(), |
770 | | - target_size: 64 * 1_024 * 1_024 |
771 | | - }) |
772 | | - ); |
773 | | -
|
774 | | - levels.hide_segments(std::iter::once(5)); |
775 | | - assert_eq!( |
776 | | - compactor.choose(&levels, &Config::default()), |
777 | | - Choice::DoNothing |
778 | | - ); |
779 | | -
|
780 | | - Ok(()) |
781 | | - } |
782 | | -
|
783 | | - #[test] |
784 | | - fn levelled_from_tiered() -> crate::Result<()> { |
785 | | - let tempdir = tempfile::tempdir()?; |
786 | | - let compactor = Strategy { |
787 | | - target_size: 64 * 1_024 * 1_024, |
788 | | - ..Default::default() |
789 | | - }; |
790 | | - let config = Config::default(); |
791 | | -
|
792 | | - #[rustfmt::skip] |
793 | | - let levels = build_levels(tempdir.path(), vec![ |
794 | | - vec![], |
795 | | - vec![(1, "a", "z", 64), (2, "a", "z", 64), (3, "g", "z", 64), (5, "g", "z", 64), (6, "g", "z", 64)], |
796 | | - vec![(4, "a", "g", 64)], |
797 | | - vec![], |
798 | | - ])?; |
799 | | -
|
800 | | - assert_eq!( |
801 | | - compactor.choose(&levels, &config), |
802 | | - Choice::Merge(CompactionInput { |
803 | | - dest_level: 2, |
804 | | - segment_ids: [1, 2, 3, 4, 5, 6].into_iter().collect::<HashSet<_>>(), |
805 | | - target_size: 64 * 1_024 * 1_024 |
806 | | - }) |
807 | | - ); |
808 | | -
|
809 | | - Ok(()) |
810 | | - } |
811 | | -} |
812 | | - */ |
0 commit comments