Skip to content

Commit d8674e3

Browse files
committed
move leveled tests #213
1 parent 03926de commit d8674e3

File tree

2 files changed

+306
-307
lines changed

2 files changed

+306
-307
lines changed

src/compaction/leveled.rs renamed to src/compaction/leveled/mod.rs

Lines changed: 3 additions & 307 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
// This source code is licensed under both the Apache 2.0 and MIT License
33
// (found in the LICENSE-* files in the repository)
44

5+
// #[cfg(test)]
6+
// mod test;
7+
58
use super::{Choice, CompactionStrategy, Input as CompactionInput};
69
use crate::{
710
compaction::state::{hidden_set::HiddenSet, CompactionState},
@@ -503,310 +506,3 @@ impl CompactionStrategy for Strategy {
503506
Choice::Merge(choice)
504507
}
505508
}
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

Comments
 (0)