1use risingwave_common_proc_macro::serde_prefix_all;
16use serde::de::Error as _;
17
18use super::*;
19
20#[derive(Copy, Clone, Debug, Default, ValueEnum, Serialize, Deserialize)]
21pub enum MetaBackend {
22 #[default]
23 Mem,
24 Sql, Sqlite,
26 Postgres,
27 Mysql,
28}
29
30#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
32#[serde(rename_all = "lowercase")]
33#[repr(i32)]
34pub enum CheckpointCompression {
35 None = 0,
39 #[default]
41 Zstd = 1,
42 Lz4 = 2,
44}
45
46#[cfg(test)]
47mod tests {
48 use risingwave_pb::hummock::CheckpointCompressionAlgorithm;
49
50 use super::CheckpointCompression;
51
52 #[test]
53 fn checkpoint_compression_numeric_values_align_with_pb() {
54 assert_eq!(
55 CheckpointCompression::None as i32,
56 CheckpointCompressionAlgorithm::CheckpointCompressionUnspecified as i32
57 );
58 assert_eq!(
59 CheckpointCompression::Zstd as i32,
60 CheckpointCompressionAlgorithm::CheckpointCompressionZstd as i32
61 );
62 assert_eq!(
63 CheckpointCompression::Lz4 as i32,
64 CheckpointCompressionAlgorithm::CheckpointCompressionLz4 as i32
65 );
66 }
67}
68
69#[derive(Copy, Clone, Debug, Default)]
70pub enum DefaultParallelism {
71 #[default]
72 Full,
73 Default(NonZeroUsize),
74}
75
76impl Serialize for DefaultParallelism {
77 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
78 where
79 S: Serializer,
80 {
81 #[derive(Debug, Serialize, Deserialize)]
82 #[serde(untagged)]
83 enum Parallelism {
84 Str(String),
85 Int(usize),
86 }
87 match self {
88 DefaultParallelism::Full => Parallelism::Str("Full".to_owned()).serialize(serializer),
89 DefaultParallelism::Default(val) => {
90 Parallelism::Int(val.get() as _).serialize(serializer)
91 }
92 }
93 }
94}
95
96impl<'de> Deserialize<'de> for DefaultParallelism {
97 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
98 where
99 D: serde::Deserializer<'de>,
100 {
101 #[derive(Debug, Deserialize)]
102 #[serde(untagged)]
103 enum Parallelism {
104 Str(String),
105 Int(usize),
106 }
107 let p = Parallelism::deserialize(deserializer)?;
108 match p {
109 Parallelism::Str(s) => {
110 if s.trim().eq_ignore_ascii_case("full") {
111 Ok(DefaultParallelism::Full)
112 } else {
113 Err(serde::de::Error::custom(format!(
114 "invalid default parallelism: {}",
115 s
116 )))
117 }
118 }
119 Parallelism::Int(i) => Ok(DefaultParallelism::Default(
120 NonZeroUsize::new(i).ok_or_else(|| {
123 serde::de::Error::custom("default parallelism should not be 0")
124 })?,
125 )),
126 }
127 }
128}
129
130#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
132#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
133pub struct MetaConfig {
134 #[serde(default = "default::meta::min_sst_retention_time_sec")]
137 pub min_sst_retention_time_sec: u64,
138
139 #[serde(default = "default::meta::full_gc_interval_sec")]
141 pub full_gc_interval_sec: u64,
142
143 #[serde(default = "default::meta::full_gc_object_limit")]
145 pub full_gc_object_limit: u64,
146
147 #[serde(default = "default::meta::gc_history_retention_time_sec")]
149 pub gc_history_retention_time_sec: u64,
150
151 #[serde(default = "default::meta::max_inflight_time_travel_query")]
153 pub max_inflight_time_travel_query: u64,
154
155 #[serde(default = "default::meta::periodic_compaction_interval_sec")]
158 pub periodic_compaction_interval_sec: u64,
159
160 #[serde(default = "default::meta::vacuum_interval_sec")]
163 pub vacuum_interval_sec: u64,
164
165 #[serde(default = "default::meta::vacuum_spin_interval_ms")]
168 pub vacuum_spin_interval_ms: u64,
169
170 #[serde(default = "default::meta::iceberg_gc_interval_sec")]
172 pub iceberg_gc_interval_sec: u64,
173
174 #[serde(default = "default::meta::hummock_version_checkpoint_interval_sec")]
176 pub hummock_version_checkpoint_interval_sec: u64,
177
178 #[serde(default)]
180 pub checkpoint_compression_algorithm: CheckpointCompression,
181
182 #[serde(default = "default::meta::checkpoint_read_chunk_size")]
186 pub checkpoint_read_chunk_size: usize,
187
188 #[serde(default = "default::meta::checkpoint_read_max_in_flight_chunks")]
193 pub checkpoint_read_max_in_flight_chunks: usize,
194
195 #[serde(default = "default::meta::enable_hummock_data_archive")]
201 pub enable_hummock_data_archive: bool,
202
203 #[serde(default = "default::meta::hummock_time_travel_snapshot_interval")]
207 pub hummock_time_travel_snapshot_interval: u64,
208
209 #[serde(default = "default::meta::min_delta_log_num_for_hummock_version_checkpoint")]
212 pub min_delta_log_num_for_hummock_version_checkpoint: u64,
213
214 #[serde(default = "default::meta::max_heartbeat_interval_sec")]
216 pub max_heartbeat_interval_secs: u32,
217
218 #[serde(default)]
220 pub disable_recovery: bool,
221
222 #[serde(default = "default::meta::pause_on_next_bootstrap_offline")]
230 pub pause_on_next_bootstrap_offline: bool,
231
232 #[serde(default)]
234 pub disable_automatic_parallelism_control: bool,
235
236 #[serde(default = "default::meta::parallelism_control_batch_size")]
238 pub parallelism_control_batch_size: usize,
239
240 #[serde(default = "default::meta::parallelism_control_trigger_period_sec")]
242 pub parallelism_control_trigger_period_sec: u64,
243
244 #[serde(default = "default::meta::parallelism_control_trigger_first_delay_sec")]
246 pub parallelism_control_trigger_first_delay_sec: u64,
247
248 #[serde(default = "default::meta::meta_leader_lease_secs")]
249 pub meta_leader_lease_secs: u64,
250
251 #[serde(default)]
254 pub dangerous_max_idle_secs: Option<u64>,
255
256 #[serde(default = "default::meta::default_parallelism")]
260 pub default_parallelism: DefaultParallelism,
261
262 #[serde(default)]
266 pub enable_compaction_deterministic: bool,
267
268 #[serde(default)]
270 pub enable_committed_sst_sanity_check: bool,
271
272 #[serde(default = "default::meta::node_num_monitor_interval_sec")]
273 pub node_num_monitor_interval_sec: u64,
274
275 #[serde(default = "default::meta::backend")]
276 pub backend: MetaBackend,
277
278 #[serde(default = "default::meta::periodic_space_reclaim_compaction_interval_sec")]
280 pub periodic_space_reclaim_compaction_interval_sec: u64,
281
282 #[serde(default = "default::meta::periodic_ttl_reclaim_compaction_interval_sec")]
284 pub periodic_ttl_reclaim_compaction_interval_sec: u64,
285
286 #[serde(default = "default::meta::periodic_tombstone_reclaim_compaction_interval_sec")]
287 pub periodic_tombstone_reclaim_compaction_interval_sec: u64,
288
289 #[serde(default = "default::meta::move_table_size_limit")]
290 #[deprecated]
291 pub move_table_size_limit: u64,
292
293 #[serde(default = "default::meta::split_group_size_limit")]
294 #[deprecated]
295 pub split_group_size_limit: u64,
296
297 #[serde(default = "default::meta::cut_table_size_limit")]
298 #[deprecated]
299 pub cut_table_size_limit: u64,
300
301 #[serde(default = "default::meta::protect_drop_table_with_incoming_sink")]
303 pub protect_drop_table_with_incoming_sink: bool,
304
305 #[serde(default, flatten)]
306 #[config_doc(omitted)]
307 pub unrecognized: Unrecognized<Self>,
308
309 #[serde(default)]
311 pub do_not_config_object_storage_lifecycle: bool,
312
313 #[serde(default = "default::meta::partition_vnode_count")]
316 pub partition_vnode_count: u32,
317
318 #[serde(
320 default = "default::meta::table_high_write_throughput_threshold",
321 alias = "table_write_throughput_threshold"
322 )]
323 pub table_high_write_throughput_threshold: u64,
324
325 #[serde(
326 default = "default::meta::table_low_write_throughput_threshold",
327 alias = "min_table_split_write_throughput"
328 )]
329 pub table_low_write_throughput_threshold: u64,
331
332 #[serde(default = "default::meta::compaction_task_max_heartbeat_interval_secs")]
335 pub compaction_task_max_heartbeat_interval_secs: u64,
336
337 #[serde(default = "default::meta::compaction_task_max_progress_interval_secs")]
340 pub compaction_task_max_progress_interval_secs: u64,
341
342 #[serde(default = "default::meta::compaction_task_id_refill_capacity")]
344 pub compaction_task_id_refill_capacity: u32,
345
346 #[serde(default)]
347 #[config_doc(nested)]
348 pub compaction_config: CompactionConfig,
349
350 #[serde(default = "default::meta::hybrid_partition_vnode_count")]
355 pub hybrid_partition_vnode_count: u32,
356
357 #[serde(default = "default::meta::event_log_enabled")]
358 pub event_log_enabled: bool,
359 #[serde(default = "default::meta::event_log_channel_max_size")]
361 pub event_log_channel_max_size: u32,
362
363 #[serde(default)]
364 #[config_doc(nested)]
365 pub developer: MetaDeveloperConfig,
366
367 #[serde(default = "default::meta::enable_dropped_column_reclaim")]
369 pub enable_dropped_column_reclaim: bool,
370
371 #[serde(default = "default::meta::split_group_size_ratio")]
373 pub split_group_size_ratio: f64,
374
375 #[serde(default = "default::meta::table_stat_high_write_throughput_ratio_for_split")]
379 pub table_stat_high_write_throughput_ratio_for_split: f64,
380
381 #[serde(default = "default::meta::table_stat_low_write_throughput_ratio_for_merge")]
383 pub table_stat_low_write_throughput_ratio_for_merge: f64,
384
385 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_split")]
391 pub table_stat_throuput_window_seconds_for_split: usize,
392
393 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_merge")]
395 pub table_stat_throuput_window_seconds_for_merge: usize,
396
397 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_low")]
400 pub compact_task_table_size_partition_threshold_low: u64,
401
402 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_high")]
405 pub compact_task_table_size_partition_threshold_high: u64,
406
407 #[serde(
411 default = "default::meta::periodic_scheduling_compaction_group_split_interval_sec",
412 alias = "periodic_split_compact_group_interval_sec"
413 )]
414 pub periodic_scheduling_compaction_group_split_interval_sec: u64,
415
416 #[serde(default = "default::meta::enable_compaction_group_normalize")]
418 pub enable_compaction_group_normalize: bool,
419
420 #[serde(
422 default = "default::meta::max_normalize_splits_per_round",
423 deserialize_with = "deserialize_max_normalize_splits_per_round"
424 )]
425 pub max_normalize_splits_per_round: u64,
426
427 #[serde(default = "default::meta::periodic_scheduling_compaction_group_merge_interval_sec")]
429 pub periodic_scheduling_compaction_group_merge_interval_sec: u64,
430
431 #[serde(default = "default::meta::compaction_group_merge_dimension_threshold")]
433 pub compaction_group_merge_dimension_threshold: f64,
434
435 #[serde(default = "default::meta::cdc_table_split_init_sleep_interval_splits")]
437 pub cdc_table_split_init_sleep_interval_splits: u64,
438
439 #[serde(default = "default::meta::cdc_table_split_init_sleep_duration_millis")]
441 pub cdc_table_split_init_sleep_duration_millis: u64,
442
443 #[serde(default = "default::meta::cdc_table_split_init_insert_batch_size")]
445 pub cdc_table_split_init_insert_batch_size: u64,
446
447 #[serde(default = "default::meta::enable_legacy_table_migration")]
449 pub enable_legacy_table_migration: bool,
450
451 #[serde(default)]
452 #[config_doc(nested)]
453 pub meta_store_config: MetaStoreConfig,
454}
455
456#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
458#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
459pub struct MetaStoreConfig {
460 #[serde(default = "default::meta_store_config::max_connections")]
462 pub max_connections: u32,
463 #[serde(default = "default::meta_store_config::min_connections")]
465 pub min_connections: u32,
466 #[serde(default = "default::meta_store_config::connection_timeout_sec")]
468 pub connection_timeout_sec: u64,
469 #[serde(default = "default::meta_store_config::idle_timeout_sec")]
471 pub idle_timeout_sec: u64,
472 #[serde(default = "default::meta_store_config::acquire_timeout_sec")]
474 pub acquire_timeout_sec: u64,
475}
476
477fn deserialize_max_normalize_splits_per_round<'de, D>(deserializer: D) -> Result<u64, D::Error>
478where
479 D: serde::Deserializer<'de>,
480{
481 let value = u64::deserialize(deserializer)?;
482 if value == 0 {
483 return Err(D::Error::custom(
484 "meta.max_normalize_splits_per_round must be greater than 0",
485 ));
486 }
487 Ok(value)
488}
489
490#[serde_prefix_all("meta_", mode = "alias")]
494#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
495#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
496pub struct MetaDeveloperConfig {
497 #[serde(default = "default::developer::meta_cached_traces_num")]
500 pub cached_traces_num: u32,
501
502 #[serde(default = "default::developer::meta_cached_traces_memory_limit_bytes")]
505 pub cached_traces_memory_limit_bytes: usize,
506
507 #[serde(default = "default::developer::enable_trivial_move")]
509 pub enable_trivial_move: bool,
510 #[serde(default = "default::developer::enable_check_task_level_overlap")]
511 pub enable_check_task_level_overlap: bool,
512 #[serde(default = "default::developer::max_trivial_move_task_count_per_loop")]
513 pub max_trivial_move_task_count_per_loop: usize,
514
515 #[serde(default = "default::developer::max_get_task_probe_times")]
516 pub max_get_task_probe_times: usize,
517
518 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_soft_limit")]
521 pub actor_cnt_per_worker_parallelism_soft_limit: usize,
522
523 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_hard_limit")]
526 pub actor_cnt_per_worker_parallelism_hard_limit: usize,
527
528 #[serde(default = "default::developer::hummock_time_travel_sst_info_fetch_batch_size")]
530 pub hummock_time_travel_sst_info_fetch_batch_size: usize,
531
532 #[serde(default = "default::developer::hummock_time_travel_sst_info_insert_batch_size")]
534 pub hummock_time_travel_sst_info_insert_batch_size: usize,
535
536 #[serde(default = "default::developer::time_travel_vacuum_interval_sec")]
537 pub time_travel_vacuum_interval_sec: u64,
538
539 #[serde(default = "default::developer::time_travel_vacuum_max_version_count")]
540 pub time_travel_vacuum_max_version_count: Option<u32>,
541
542 #[serde(default = "default::developer::hummock_time_travel_epoch_version_insert_batch_size")]
544 pub hummock_time_travel_epoch_version_insert_batch_size: usize,
545
546 #[serde(default = "default::developer::hummock_gc_history_insert_batch_size")]
547 pub hummock_gc_history_insert_batch_size: usize,
548
549 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_batch_size")]
550 pub hummock_time_travel_filter_out_objects_batch_size: usize,
551
552 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_v1")]
553 pub hummock_time_travel_filter_out_objects_v1: bool,
554
555 #[serde(
556 default = "default::developer::hummock_time_travel_filter_out_objects_list_version_batch_size"
557 )]
558 pub hummock_time_travel_filter_out_objects_list_version_batch_size: usize,
559
560 #[serde(
561 default = "default::developer::hummock_time_travel_filter_out_objects_list_delta_batch_size"
562 )]
563 pub hummock_time_travel_filter_out_objects_list_delta_batch_size: usize,
564
565 #[serde(default)]
566 pub compute_client_config: RpcClientConfig,
567
568 #[serde(default)]
569 pub stream_client_config: RpcClientConfig,
570
571 #[serde(default)]
572 pub frontend_client_config: RpcClientConfig,
573
574 #[serde(default = "default::developer::table_change_log_insert_batch_size")]
575 pub table_change_log_insert_batch_size: u64,
576
577 #[serde(default = "default::developer::table_change_log_delete_batch_size")]
578 pub table_change_log_delete_batch_size: u64,
579}
580
581#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
582#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
583pub struct CompactionConfig {
584 #[serde(default = "default::compaction_config::max_bytes_for_level_base")]
585 pub max_bytes_for_level_base: u64,
586 #[serde(default = "default::compaction_config::max_bytes_for_level_multiplier")]
587 pub max_bytes_for_level_multiplier: u64,
588 #[serde(default = "default::compaction_config::max_compaction_bytes")]
589 pub max_compaction_bytes: u64,
590 #[serde(default = "default::compaction_config::sub_level_max_compaction_bytes")]
591 pub sub_level_max_compaction_bytes: u64,
592 #[serde(default = "default::compaction_config::level0_tier_compact_file_number")]
593 pub level0_tier_compact_file_number: u64,
594 #[serde(default = "default::compaction_config::target_file_size_base")]
595 pub target_file_size_base: u64,
596 #[serde(default = "default::compaction_config::compaction_filter_mask")]
597 pub compaction_filter_mask: u32,
598 #[serde(default = "default::compaction_config::max_sub_compaction")]
599 pub max_sub_compaction: u32,
600 #[serde(default = "default::compaction_config::level0_stop_write_threshold_sub_level_number")]
601 pub level0_stop_write_threshold_sub_level_number: u64,
602 #[serde(default = "default::compaction_config::level0_sub_level_compact_level_count")]
603 pub level0_sub_level_compact_level_count: u32,
604 #[serde(
605 default = "default::compaction_config::level0_overlapping_sub_level_compact_level_count"
606 )]
607 pub level0_overlapping_sub_level_compact_level_count: u32,
608 #[serde(default = "default::compaction_config::max_space_reclaim_bytes")]
609 pub max_space_reclaim_bytes: u64,
610 #[serde(default = "default::compaction_config::level0_max_compact_file_number")]
611 pub level0_max_compact_file_number: u64,
612 #[serde(default = "default::compaction_config::tombstone_reclaim_ratio")]
613 pub tombstone_reclaim_ratio: u32,
614 #[serde(default = "default::compaction_config::enable_emergency_picker")]
615 pub enable_emergency_picker: bool,
616 #[serde(default = "default::compaction_config::max_level")]
617 pub max_level: u32,
618 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_min_size")]
619 pub sst_allowed_trivial_move_min_size: u64,
620 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_max_count")]
621 pub sst_allowed_trivial_move_max_count: u32,
622 #[serde(default = "default::compaction_config::max_l0_compact_level_count")]
623 pub max_l0_compact_level_count: u32,
624 #[serde(default = "default::compaction_config::disable_auto_group_scheduling")]
625 pub disable_auto_group_scheduling: bool,
626 #[serde(default = "default::compaction_config::max_overlapping_level_size")]
627 pub max_overlapping_level_size: u64,
628 #[serde(default = "default::compaction_config::emergency_level0_sst_file_count")]
629 pub emergency_level0_sst_file_count: u32,
630 #[serde(default = "default::compaction_config::emergency_level0_sub_level_partition")]
631 pub emergency_level0_sub_level_partition: u32,
632 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_sst_count")]
633 pub level0_stop_write_threshold_max_sst_count: u32,
634 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_size")]
635 pub level0_stop_write_threshold_max_size: u64,
636 #[serde(default = "default::compaction_config::enable_optimize_l0_interval_selection")]
637 pub enable_optimize_l0_interval_selection: bool,
638 #[serde(default = "default::compaction_config::max_kv_count_for_xor16")]
639 pub max_kv_count_for_xor16: Option<u64>,
640 #[serde(default = "default::compaction_config::max_vnode_key_range_bytes")]
641 pub max_vnode_key_range_bytes: Option<u64>,
642}
643
644pub mod default {
645 pub use crate::config::default::developer;
646
647 pub mod meta {
648 use crate::config::{DefaultParallelism, MetaBackend};
649
650 pub fn min_sst_retention_time_sec() -> u64 {
651 3600 * 6
652 }
653
654 pub fn gc_history_retention_time_sec() -> u64 {
655 3600 * 6
656 }
657
658 pub fn full_gc_interval_sec() -> u64 {
659 3600
660 }
661
662 pub fn full_gc_object_limit() -> u64 {
663 100_000
664 }
665
666 pub fn max_inflight_time_travel_query() -> u64 {
667 1000
668 }
669
670 pub fn periodic_compaction_interval_sec() -> u64 {
671 300
672 }
673
674 pub fn vacuum_interval_sec() -> u64 {
675 30
676 }
677
678 pub fn vacuum_spin_interval_ms() -> u64 {
679 100
680 }
681
682 pub fn iceberg_gc_interval_sec() -> u64 {
683 3600
684 }
685
686 pub fn hummock_version_checkpoint_interval_sec() -> u64 {
687 30
688 }
689
690 pub fn checkpoint_read_chunk_size() -> usize {
691 128 * 1024 * 1024 }
693
694 pub fn checkpoint_read_max_in_flight_chunks() -> usize {
695 4
696 }
697
698 pub fn enable_hummock_data_archive() -> bool {
699 false
700 }
701
702 pub fn hummock_time_travel_snapshot_interval() -> u64 {
703 100
704 }
705
706 pub fn min_delta_log_num_for_hummock_version_checkpoint() -> u64 {
707 10
708 }
709
710 pub fn max_heartbeat_interval_sec() -> u32 {
711 60
712 }
713
714 pub fn meta_leader_lease_secs() -> u64 {
715 30
716 }
717
718 pub fn default_parallelism() -> DefaultParallelism {
719 DefaultParallelism::Full
720 }
721
722 pub fn pause_on_next_bootstrap_offline() -> bool {
723 false
724 }
725
726 pub fn node_num_monitor_interval_sec() -> u64 {
727 10
728 }
729
730 pub fn backend() -> MetaBackend {
731 MetaBackend::Mem
732 }
733
734 pub fn periodic_space_reclaim_compaction_interval_sec() -> u64 {
735 3600 }
737
738 pub fn periodic_ttl_reclaim_compaction_interval_sec() -> u64 {
739 1800 }
741
742 pub fn periodic_scheduling_compaction_group_split_interval_sec() -> u64 {
743 10 }
745
746 pub fn periodic_tombstone_reclaim_compaction_interval_sec() -> u64 {
747 600
748 }
749
750 pub fn move_table_size_limit() -> u64 {
752 10 * 1024 * 1024 * 1024 }
754
755 pub fn split_group_size_limit() -> u64 {
757 64 * 1024 * 1024 * 1024 }
759
760 pub fn protect_drop_table_with_incoming_sink() -> bool {
761 false
762 }
763
764 pub fn partition_vnode_count() -> u32 {
765 16
766 }
767
768 pub fn table_high_write_throughput_threshold() -> u64 {
769 16 * 1024 * 1024 }
771
772 pub fn table_low_write_throughput_threshold() -> u64 {
773 4 * 1024 * 1024 }
775
776 pub fn compaction_task_max_heartbeat_interval_secs() -> u64 {
777 30 }
779
780 pub fn compaction_task_max_progress_interval_secs() -> u64 {
781 60 * 10 }
783
784 pub fn compaction_task_id_refill_capacity() -> u32 {
785 64
786 }
787
788 pub fn cut_table_size_limit() -> u64 {
789 1024 * 1024 * 1024 }
791
792 pub fn hybrid_partition_vnode_count() -> u32 {
793 4
794 }
795
796 pub fn compact_task_table_size_partition_threshold_low() -> u64 {
797 128 * 1024 * 1024 }
799
800 pub fn compact_task_table_size_partition_threshold_high() -> u64 {
801 512 * 1024 * 1024 }
803
804 pub fn event_log_enabled() -> bool {
805 true
806 }
807
808 pub fn event_log_channel_max_size() -> u32 {
809 10
810 }
811
812 pub fn parallelism_control_batch_size() -> usize {
813 10
814 }
815
816 pub fn parallelism_control_trigger_period_sec() -> u64 {
817 10
818 }
819
820 pub fn parallelism_control_trigger_first_delay_sec() -> u64 {
821 30
822 }
823
824 pub fn enable_dropped_column_reclaim() -> bool {
825 false
826 }
827
828 pub fn split_group_size_ratio() -> f64 {
829 0.9
830 }
831
832 pub fn table_stat_high_write_throughput_ratio_for_split() -> f64 {
833 0.5
834 }
835
836 pub fn table_stat_low_write_throughput_ratio_for_merge() -> f64 {
837 0.7
838 }
839
840 pub fn table_stat_throuput_window_seconds_for_split() -> usize {
841 60
842 }
843
844 pub fn table_stat_throuput_window_seconds_for_merge() -> usize {
845 240
846 }
847
848 pub fn periodic_scheduling_compaction_group_merge_interval_sec() -> u64 {
849 60 * 10 }
851
852 pub fn enable_compaction_group_normalize() -> bool {
853 false
854 }
855
856 pub fn max_normalize_splits_per_round() -> u64 {
857 4
858 }
859
860 pub fn compaction_group_merge_dimension_threshold() -> f64 {
861 1.2
862 }
863
864 pub fn cdc_table_split_init_sleep_interval_splits() -> u64 {
865 1000
866 }
867
868 pub fn cdc_table_split_init_sleep_duration_millis() -> u64 {
869 500
870 }
871
872 pub fn cdc_table_split_init_insert_batch_size() -> u64 {
873 100
874 }
875
876 pub fn enable_legacy_table_migration() -> bool {
877 true
878 }
879 }
880
881 pub mod meta_store_config {
882 const DEFAULT_MAX_CONNECTIONS: u32 = 10;
883 const DEFAULT_MIN_CONNECTIONS: u32 = 1;
884 const DEFAULT_CONNECTION_TIMEOUT_SEC: u64 = 10;
885 const DEFAULT_IDLE_TIMEOUT_SEC: u64 = 30;
886 const DEFAULT_ACQUIRE_TIMEOUT_SEC: u64 = 30;
887
888 pub fn max_connections() -> u32 {
889 DEFAULT_MAX_CONNECTIONS
890 }
891
892 pub fn min_connections() -> u32 {
893 DEFAULT_MIN_CONNECTIONS
894 }
895
896 pub fn connection_timeout_sec() -> u64 {
897 DEFAULT_CONNECTION_TIMEOUT_SEC
898 }
899
900 pub fn idle_timeout_sec() -> u64 {
901 DEFAULT_IDLE_TIMEOUT_SEC
902 }
903
904 pub fn acquire_timeout_sec() -> u64 {
905 DEFAULT_ACQUIRE_TIMEOUT_SEC
906 }
907 }
908
909 pub mod compaction_config {
910 const MB: u64 = 1024 * 1024;
911 const GB: u64 = 1024 * 1024 * 1024;
912 const DEFAULT_MAX_COMPACTION_BYTES: u64 = 2 * GB; const DEFAULT_MIN_COMPACTION_BYTES: u64 = 128 * MB; const DEFAULT_MAX_BYTES_FOR_LEVEL_BASE: u64 = 512 * MB; const DEFAULT_TIER_COMPACT_TRIGGER_NUMBER: u64 = 12;
918 const DEFAULT_TARGET_FILE_SIZE_BASE: u64 = 32 * MB;
919 const DEFAULT_MAX_SUB_COMPACTION: u32 = 4;
921 const DEFAULT_LEVEL_MULTIPLIER: u64 = 10;
922 const DEFAULT_MAX_SPACE_RECLAIM_BYTES: u64 = 512 * MB; const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER: u64 = 128;
924 const DEFAULT_MAX_COMPACTION_FILE_COUNT: u64 = 100;
925 const DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 3;
926 const DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 12;
927 const DEFAULT_TOMBSTONE_RATIO_PERCENT: u32 = 40;
928 const DEFAULT_EMERGENCY_PICKER: bool = true;
929 const DEFAULT_MAX_LEVEL: u32 = 6;
930 const DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT: u32 = 42;
931 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE: u64 = 4 * MB;
932 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT: u32 = 256;
933 const DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT: u32 = 2000; const DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION: u32 = 256;
935 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT: u32 = 5000;
936 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE: u64 = 300 * 1024 * MB; const DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION: bool = true;
938 pub const DEFAULT_MAX_KV_COUNT_FOR_XOR16: u64 = 256 * 1024;
939 const DEFAULT_MAX_VNODE_KEY_RANGE_BYTES: Option<u64> = None;
940
941 use crate::catalog::hummock::CompactionFilterFlag;
942
943 pub fn max_bytes_for_level_base() -> u64 {
944 DEFAULT_MAX_BYTES_FOR_LEVEL_BASE
945 }
946
947 pub fn max_bytes_for_level_multiplier() -> u64 {
948 DEFAULT_LEVEL_MULTIPLIER
949 }
950
951 pub fn max_compaction_bytes() -> u64 {
952 DEFAULT_MAX_COMPACTION_BYTES
953 }
954
955 pub fn sub_level_max_compaction_bytes() -> u64 {
956 DEFAULT_MIN_COMPACTION_BYTES
957 }
958
959 pub fn level0_tier_compact_file_number() -> u64 {
960 DEFAULT_TIER_COMPACT_TRIGGER_NUMBER
961 }
962
963 pub fn target_file_size_base() -> u64 {
964 DEFAULT_TARGET_FILE_SIZE_BASE
965 }
966
967 pub fn compaction_filter_mask() -> u32 {
968 (CompactionFilterFlag::STATE_CLEAN | CompactionFilterFlag::TTL).into()
969 }
970
971 pub fn max_sub_compaction() -> u32 {
972 DEFAULT_MAX_SUB_COMPACTION
973 }
974
975 pub fn level0_stop_write_threshold_sub_level_number() -> u64 {
976 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER
977 }
978
979 pub fn level0_sub_level_compact_level_count() -> u32 {
980 DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT
981 }
982
983 pub fn level0_overlapping_sub_level_compact_level_count() -> u32 {
984 DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT
985 }
986
987 pub fn max_space_reclaim_bytes() -> u64 {
988 DEFAULT_MAX_SPACE_RECLAIM_BYTES
989 }
990
991 pub fn level0_max_compact_file_number() -> u64 {
992 DEFAULT_MAX_COMPACTION_FILE_COUNT
993 }
994
995 pub fn tombstone_reclaim_ratio() -> u32 {
996 DEFAULT_TOMBSTONE_RATIO_PERCENT
997 }
998
999 pub fn enable_emergency_picker() -> bool {
1000 DEFAULT_EMERGENCY_PICKER
1001 }
1002
1003 pub fn max_level() -> u32 {
1004 DEFAULT_MAX_LEVEL
1005 }
1006
1007 pub fn max_l0_compact_level_count() -> u32 {
1008 DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT
1009 }
1010
1011 pub fn sst_allowed_trivial_move_min_size() -> u64 {
1012 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE
1013 }
1014
1015 pub fn disable_auto_group_scheduling() -> bool {
1016 false
1017 }
1018
1019 pub fn max_overlapping_level_size() -> u64 {
1020 256 * MB
1021 }
1022
1023 pub fn sst_allowed_trivial_move_max_count() -> u32 {
1024 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT
1025 }
1026
1027 pub fn emergency_level0_sst_file_count() -> u32 {
1028 DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT
1029 }
1030
1031 pub fn emergency_level0_sub_level_partition() -> u32 {
1032 DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION
1033 }
1034
1035 pub fn level0_stop_write_threshold_max_sst_count() -> u32 {
1036 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT
1037 }
1038
1039 pub fn level0_stop_write_threshold_max_size() -> u64 {
1040 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE
1041 }
1042
1043 pub fn enable_optimize_l0_interval_selection() -> bool {
1044 DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION
1045 }
1046
1047 pub fn max_kv_count_for_xor16() -> Option<u64> {
1048 Some(DEFAULT_MAX_KV_COUNT_FOR_XOR16)
1049 }
1050
1051 pub fn max_vnode_key_range_bytes() -> Option<u64> {
1052 DEFAULT_MAX_VNODE_KEY_RANGE_BYTES
1053 }
1054 }
1055}