refactor: Extract functions for the different purposes of partition filters

pull/24376/head
Carol (Nichols || Goulding) 2023-03-31 12:53:41 -04:00
parent 9a27736c65
commit 90d07412ff
No known key found for this signature in database
GPG Key ID: E907EE5A736F87D4
1 changed files with 23 additions and 12 deletions

View File

@ -279,6 +279,23 @@ fn make_round_info_source(config: &Config) -> Arc<dyn RoundInfoSource> {
// Conditions to compact this partition
fn make_partition_filter(config: &Config) -> Arc<dyn PartitionFilter> {
let mut partition_filters = exceptional_cases_partition_filters(config);
partition_filters.push(continue_condition_filter(config));
let partition_continue_conditions = "continue_conditions";
Arc::new(LoggingPartitionFilterWrapper::new(
MetricsPartitionFilterWrapper::new(
AndPartitionFilter::new(partition_filters),
&config.metric_registry,
partition_continue_conditions,
),
partition_continue_conditions,
))
}
fn exceptional_cases_partition_filters(config: &Config) -> Vec<Arc<dyn PartitionFilter>> {
// Capacity is hardcoded to a somewhat arbitrary number to prevent some reallocations
let mut partition_filters: Vec<Arc<dyn PartitionFilter>> = Vec::with_capacity(8);
partition_filters.push(Arc::new(HasFilesPartitionFilter::new()));
@ -295,10 +312,14 @@ fn make_partition_filter(config: &Config) -> Arc<dyn PartitionFilter> {
config.max_num_columns_per_table,
)));
partition_filters
}
fn continue_condition_filter(config: &Config) -> Arc<dyn PartitionFilter> {
// (Has-L0) OR -- to avoid overlapped files
// (num(L1) > N) OR -- to avoid many files
// (total_size(L1) > max_desired_file_size) -- to avoid compact and than split
partition_filters.push(Arc::new(OrPartitionFilter::new(vec![
Arc::new(OrPartitionFilter::new(vec![
Arc::new(HasMatchingFilePartitionFilter::new(
LevelRangeFileFilter::new(CompactionLevel::Initial..=CompactionLevel::Initial),
)),
@ -314,17 +335,7 @@ fn make_partition_filter(config: &Config) -> Arc<dyn PartitionFilter> {
),
config.max_desired_file_size_bytes,
)),
])));
let partition_continue_conditions = "continue_conditions";
Arc::new(LoggingPartitionFilterWrapper::new(
MetricsPartitionFilterWrapper::new(
AndPartitionFilter::new(partition_filters),
&config.metric_registry,
partition_continue_conditions,
),
partition_continue_conditions,
))
]))
}
fn make_ir_planner(config: &Config) -> Arc<dyn IRPlanner> {