1use risingwave_common_proc_macro::serde_prefix_all;
16
17use super::*;
18
19#[derive(Copy, Clone, Debug, Default, ValueEnum, Serialize, Deserialize)]
20pub enum MetaBackend {
21 #[default]
22 Mem,
23 Sql, Sqlite,
25 Postgres,
26 Mysql,
27}
28
29#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
31#[serde(rename_all = "lowercase")]
32#[repr(i32)]
33pub enum CheckpointCompression {
34 None = 0,
38 #[default]
40 Zstd = 1,
41 Lz4 = 2,
43}
44
45#[cfg(test)]
46mod tests {
47 use risingwave_pb::hummock::CheckpointCompressionAlgorithm;
48
49 use super::CheckpointCompression;
50
51 #[test]
52 fn checkpoint_compression_numeric_values_align_with_pb() {
53 assert_eq!(
54 CheckpointCompression::None as i32,
55 CheckpointCompressionAlgorithm::CheckpointCompressionUnspecified as i32
56 );
57 assert_eq!(
58 CheckpointCompression::Zstd as i32,
59 CheckpointCompressionAlgorithm::CheckpointCompressionZstd as i32
60 );
61 assert_eq!(
62 CheckpointCompression::Lz4 as i32,
63 CheckpointCompressionAlgorithm::CheckpointCompressionLz4 as i32
64 );
65 }
66}
67
68#[derive(Copy, Clone, Debug, Default)]
69pub enum DefaultParallelism {
70 #[default]
71 Full,
72 Default(NonZeroUsize),
73}
74
75impl Serialize for DefaultParallelism {
76 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
77 where
78 S: Serializer,
79 {
80 #[derive(Debug, Serialize, Deserialize)]
81 #[serde(untagged)]
82 enum Parallelism {
83 Str(String),
84 Int(usize),
85 }
86 match self {
87 DefaultParallelism::Full => Parallelism::Str("Full".to_owned()).serialize(serializer),
88 DefaultParallelism::Default(val) => {
89 Parallelism::Int(val.get() as _).serialize(serializer)
90 }
91 }
92 }
93}
94
95impl<'de> Deserialize<'de> for DefaultParallelism {
96 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
97 where
98 D: serde::Deserializer<'de>,
99 {
100 #[derive(Debug, Deserialize)]
101 #[serde(untagged)]
102 enum Parallelism {
103 Str(String),
104 Int(usize),
105 }
106 let p = Parallelism::deserialize(deserializer)?;
107 match p {
108 Parallelism::Str(s) => {
109 if s.trim().eq_ignore_ascii_case("full") {
110 Ok(DefaultParallelism::Full)
111 } else {
112 Err(serde::de::Error::custom(format!(
113 "invalid default parallelism: {}",
114 s
115 )))
116 }
117 }
118 Parallelism::Int(i) => Ok(DefaultParallelism::Default(
119 NonZeroUsize::new(i).ok_or_else(|| {
122 serde::de::Error::custom("default parallelism should not be 0")
123 })?,
124 )),
125 }
126 }
127}
128
129#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
131#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
132pub struct MetaConfig {
133 #[serde(default = "default::meta::min_sst_retention_time_sec")]
136 pub min_sst_retention_time_sec: u64,
137
138 #[serde(default = "default::meta::full_gc_interval_sec")]
140 pub full_gc_interval_sec: u64,
141
142 #[serde(default = "default::meta::full_gc_object_limit")]
144 pub full_gc_object_limit: u64,
145
146 #[serde(default = "default::meta::gc_history_retention_time_sec")]
148 pub gc_history_retention_time_sec: u64,
149
150 #[serde(default = "default::meta::max_inflight_time_travel_query")]
152 pub max_inflight_time_travel_query: u64,
153
154 #[serde(default = "default::meta::periodic_compaction_interval_sec")]
157 pub periodic_compaction_interval_sec: u64,
158
159 #[serde(default = "default::meta::vacuum_interval_sec")]
162 pub vacuum_interval_sec: u64,
163
164 #[serde(default = "default::meta::vacuum_spin_interval_ms")]
167 pub vacuum_spin_interval_ms: u64,
168
169 #[serde(default = "default::meta::iceberg_gc_interval_sec")]
171 pub iceberg_gc_interval_sec: u64,
172
173 #[serde(default = "default::meta::hummock_version_checkpoint_interval_sec")]
175 pub hummock_version_checkpoint_interval_sec: u64,
176
177 #[serde(default)]
179 pub checkpoint_compression_algorithm: CheckpointCompression,
180
181 #[serde(default = "default::meta::checkpoint_read_chunk_size")]
185 pub checkpoint_read_chunk_size: usize,
186
187 #[serde(default = "default::meta::checkpoint_read_max_in_flight_chunks")]
192 pub checkpoint_read_max_in_flight_chunks: usize,
193
194 #[serde(default = "default::meta::enable_hummock_data_archive")]
200 pub enable_hummock_data_archive: bool,
201
202 #[serde(default = "default::meta::hummock_time_travel_snapshot_interval")]
206 pub hummock_time_travel_snapshot_interval: u64,
207
208 #[serde(default = "default::meta::min_delta_log_num_for_hummock_version_checkpoint")]
211 pub min_delta_log_num_for_hummock_version_checkpoint: u64,
212
213 #[serde(default = "default::meta::max_heartbeat_interval_sec")]
215 pub max_heartbeat_interval_secs: u32,
216
217 #[serde(default)]
219 pub disable_recovery: bool,
220
221 #[serde(default = "default::meta::pause_on_next_bootstrap_offline")]
229 pub pause_on_next_bootstrap_offline: bool,
230
231 #[serde(default)]
233 pub disable_automatic_parallelism_control: bool,
234
235 #[serde(default = "default::meta::parallelism_control_batch_size")]
237 pub parallelism_control_batch_size: usize,
238
239 #[serde(default = "default::meta::parallelism_control_trigger_period_sec")]
241 pub parallelism_control_trigger_period_sec: u64,
242
243 #[serde(default = "default::meta::parallelism_control_trigger_first_delay_sec")]
245 pub parallelism_control_trigger_first_delay_sec: u64,
246
247 #[serde(default = "default::meta::meta_leader_lease_secs")]
248 pub meta_leader_lease_secs: u64,
249
250 #[serde(default)]
253 pub dangerous_max_idle_secs: Option<u64>,
254
255 #[serde(default = "default::meta::default_parallelism")]
259 pub default_parallelism: DefaultParallelism,
260
261 #[serde(default)]
265 pub enable_compaction_deterministic: bool,
266
267 #[serde(default)]
269 pub enable_committed_sst_sanity_check: bool,
270
271 #[serde(default = "default::meta::node_num_monitor_interval_sec")]
272 pub node_num_monitor_interval_sec: u64,
273
274 #[serde(default = "default::meta::backend")]
275 pub backend: MetaBackend,
276
277 #[serde(default = "default::meta::periodic_space_reclaim_compaction_interval_sec")]
279 pub periodic_space_reclaim_compaction_interval_sec: u64,
280
281 #[serde(default = "default::meta::periodic_ttl_reclaim_compaction_interval_sec")]
283 pub periodic_ttl_reclaim_compaction_interval_sec: u64,
284
285 #[serde(default = "default::meta::periodic_tombstone_reclaim_compaction_interval_sec")]
286 pub periodic_tombstone_reclaim_compaction_interval_sec: u64,
287
288 #[serde(default = "default::meta::move_table_size_limit")]
289 #[deprecated]
290 pub move_table_size_limit: u64,
291
292 #[serde(default = "default::meta::split_group_size_limit")]
293 #[deprecated]
294 pub split_group_size_limit: u64,
295
296 #[serde(default = "default::meta::cut_table_size_limit")]
297 #[deprecated]
298 pub cut_table_size_limit: u64,
299
300 #[serde(default = "default::meta::protect_drop_table_with_incoming_sink")]
302 pub protect_drop_table_with_incoming_sink: bool,
303
304 #[serde(default, flatten)]
305 #[config_doc(omitted)]
306 pub unrecognized: Unrecognized<Self>,
307
308 #[serde(default)]
310 pub do_not_config_object_storage_lifecycle: bool,
311
312 #[serde(default = "default::meta::partition_vnode_count")]
315 pub partition_vnode_count: u32,
316
317 #[serde(
319 default = "default::meta::table_high_write_throughput_threshold",
320 alias = "table_write_throughput_threshold"
321 )]
322 pub table_high_write_throughput_threshold: u64,
323
324 #[serde(
325 default = "default::meta::table_low_write_throughput_threshold",
326 alias = "min_table_split_write_throughput"
327 )]
328 pub table_low_write_throughput_threshold: u64,
330
331 #[serde(default = "default::meta::compaction_task_max_heartbeat_interval_secs")]
334 pub compaction_task_max_heartbeat_interval_secs: u64,
335
336 #[serde(default = "default::meta::compaction_task_max_progress_interval_secs")]
339 pub compaction_task_max_progress_interval_secs: u64,
340
341 #[serde(default)]
342 #[config_doc(nested)]
343 pub compaction_config: CompactionConfig,
344
345 #[serde(default = "default::meta::hybrid_partition_vnode_count")]
350 pub hybrid_partition_vnode_count: u32,
351
352 #[serde(default = "default::meta::event_log_enabled")]
353 pub event_log_enabled: bool,
354 #[serde(default = "default::meta::event_log_channel_max_size")]
356 pub event_log_channel_max_size: u32,
357
358 #[serde(default)]
359 #[config_doc(nested)]
360 pub developer: MetaDeveloperConfig,
361
362 #[serde(default = "default::meta::enable_dropped_column_reclaim")]
364 pub enable_dropped_column_reclaim: bool,
365
366 #[serde(default = "default::meta::split_group_size_ratio")]
368 pub split_group_size_ratio: f64,
369
370 #[serde(default = "default::meta::table_stat_high_write_throughput_ratio_for_split")]
374 pub table_stat_high_write_throughput_ratio_for_split: f64,
375
376 #[serde(default = "default::meta::table_stat_low_write_throughput_ratio_for_merge")]
378 pub table_stat_low_write_throughput_ratio_for_merge: f64,
379
380 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_split")]
386 pub table_stat_throuput_window_seconds_for_split: usize,
387
388 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_merge")]
390 pub table_stat_throuput_window_seconds_for_merge: usize,
391
392 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_low")]
395 pub compact_task_table_size_partition_threshold_low: u64,
396
397 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_high")]
400 pub compact_task_table_size_partition_threshold_high: u64,
401
402 #[serde(
404 default = "default::meta::periodic_scheduling_compaction_group_split_interval_sec",
405 alias = "periodic_split_compact_group_interval_sec"
406 )]
407 pub periodic_scheduling_compaction_group_split_interval_sec: u64,
408
409 #[serde(default = "default::meta::periodic_scheduling_compaction_group_merge_interval_sec")]
411 pub periodic_scheduling_compaction_group_merge_interval_sec: u64,
412
413 #[serde(default = "default::meta::compaction_group_merge_dimension_threshold")]
415 pub compaction_group_merge_dimension_threshold: f64,
416
417 #[serde(default = "default::meta::cdc_table_split_init_sleep_interval_splits")]
419 pub cdc_table_split_init_sleep_interval_splits: u64,
420
421 #[serde(default = "default::meta::cdc_table_split_init_sleep_duration_millis")]
423 pub cdc_table_split_init_sleep_duration_millis: u64,
424
425 #[serde(default = "default::meta::cdc_table_split_init_insert_batch_size")]
427 pub cdc_table_split_init_insert_batch_size: u64,
428
429 #[serde(default = "default::meta::enable_legacy_table_migration")]
431 pub enable_legacy_table_migration: bool,
432
433 #[serde(default)]
434 #[config_doc(nested)]
435 pub meta_store_config: MetaStoreConfig,
436}
437
438#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
440#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
441pub struct MetaStoreConfig {
442 #[serde(default = "default::meta_store_config::max_connections")]
444 pub max_connections: u32,
445 #[serde(default = "default::meta_store_config::min_connections")]
447 pub min_connections: u32,
448 #[serde(default = "default::meta_store_config::connection_timeout_sec")]
450 pub connection_timeout_sec: u64,
451 #[serde(default = "default::meta_store_config::idle_timeout_sec")]
453 pub idle_timeout_sec: u64,
454 #[serde(default = "default::meta_store_config::acquire_timeout_sec")]
456 pub acquire_timeout_sec: u64,
457}
458
459#[serde_prefix_all("meta_", mode = "alias")]
463#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
464#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
465pub struct MetaDeveloperConfig {
466 #[serde(default = "default::developer::meta_cached_traces_num")]
469 pub cached_traces_num: u32,
470
471 #[serde(default = "default::developer::meta_cached_traces_memory_limit_bytes")]
474 pub cached_traces_memory_limit_bytes: usize,
475
476 #[serde(default = "default::developer::enable_trivial_move")]
478 pub enable_trivial_move: bool,
479 #[serde(default = "default::developer::enable_check_task_level_overlap")]
480 pub enable_check_task_level_overlap: bool,
481 #[serde(default = "default::developer::max_trivial_move_task_count_per_loop")]
482 pub max_trivial_move_task_count_per_loop: usize,
483
484 #[serde(default = "default::developer::max_get_task_probe_times")]
485 pub max_get_task_probe_times: usize,
486
487 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_soft_limit")]
490 pub actor_cnt_per_worker_parallelism_soft_limit: usize,
491
492 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_hard_limit")]
495 pub actor_cnt_per_worker_parallelism_hard_limit: usize,
496
497 #[serde(default = "default::developer::hummock_time_travel_sst_info_fetch_batch_size")]
499 pub hummock_time_travel_sst_info_fetch_batch_size: usize,
500
501 #[serde(default = "default::developer::hummock_time_travel_sst_info_insert_batch_size")]
503 pub hummock_time_travel_sst_info_insert_batch_size: usize,
504
505 #[serde(default = "default::developer::time_travel_vacuum_interval_sec")]
506 pub time_travel_vacuum_interval_sec: u64,
507
508 #[serde(default = "default::developer::time_travel_vacuum_max_version_count")]
509 pub time_travel_vacuum_max_version_count: Option<u32>,
510
511 #[serde(default = "default::developer::hummock_time_travel_epoch_version_insert_batch_size")]
513 pub hummock_time_travel_epoch_version_insert_batch_size: usize,
514
515 #[serde(default = "default::developer::hummock_gc_history_insert_batch_size")]
516 pub hummock_gc_history_insert_batch_size: usize,
517
518 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_batch_size")]
519 pub hummock_time_travel_filter_out_objects_batch_size: usize,
520
521 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_v1")]
522 pub hummock_time_travel_filter_out_objects_v1: bool,
523
524 #[serde(
525 default = "default::developer::hummock_time_travel_filter_out_objects_list_version_batch_size"
526 )]
527 pub hummock_time_travel_filter_out_objects_list_version_batch_size: usize,
528
529 #[serde(
530 default = "default::developer::hummock_time_travel_filter_out_objects_list_delta_batch_size"
531 )]
532 pub hummock_time_travel_filter_out_objects_list_delta_batch_size: usize,
533
534 #[serde(default)]
535 pub compute_client_config: RpcClientConfig,
536
537 #[serde(default)]
538 pub stream_client_config: RpcClientConfig,
539
540 #[serde(default)]
541 pub frontend_client_config: RpcClientConfig,
542}
543
544#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
545#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
546pub struct CompactionConfig {
547 #[serde(default = "default::compaction_config::max_bytes_for_level_base")]
548 pub max_bytes_for_level_base: u64,
549 #[serde(default = "default::compaction_config::max_bytes_for_level_multiplier")]
550 pub max_bytes_for_level_multiplier: u64,
551 #[serde(default = "default::compaction_config::max_compaction_bytes")]
552 pub max_compaction_bytes: u64,
553 #[serde(default = "default::compaction_config::sub_level_max_compaction_bytes")]
554 pub sub_level_max_compaction_bytes: u64,
555 #[serde(default = "default::compaction_config::level0_tier_compact_file_number")]
556 pub level0_tier_compact_file_number: u64,
557 #[serde(default = "default::compaction_config::target_file_size_base")]
558 pub target_file_size_base: u64,
559 #[serde(default = "default::compaction_config::compaction_filter_mask")]
560 pub compaction_filter_mask: u32,
561 #[serde(default = "default::compaction_config::max_sub_compaction")]
562 pub max_sub_compaction: u32,
563 #[serde(default = "default::compaction_config::level0_stop_write_threshold_sub_level_number")]
564 pub level0_stop_write_threshold_sub_level_number: u64,
565 #[serde(default = "default::compaction_config::level0_sub_level_compact_level_count")]
566 pub level0_sub_level_compact_level_count: u32,
567 #[serde(
568 default = "default::compaction_config::level0_overlapping_sub_level_compact_level_count"
569 )]
570 pub level0_overlapping_sub_level_compact_level_count: u32,
571 #[serde(default = "default::compaction_config::max_space_reclaim_bytes")]
572 pub max_space_reclaim_bytes: u64,
573 #[serde(default = "default::compaction_config::level0_max_compact_file_number")]
574 pub level0_max_compact_file_number: u64,
575 #[serde(default = "default::compaction_config::tombstone_reclaim_ratio")]
576 pub tombstone_reclaim_ratio: u32,
577 #[serde(default = "default::compaction_config::enable_emergency_picker")]
578 pub enable_emergency_picker: bool,
579 #[serde(default = "default::compaction_config::max_level")]
580 pub max_level: u32,
581 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_min_size")]
582 pub sst_allowed_trivial_move_min_size: u64,
583 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_max_count")]
584 pub sst_allowed_trivial_move_max_count: u32,
585 #[serde(default = "default::compaction_config::max_l0_compact_level_count")]
586 pub max_l0_compact_level_count: u32,
587 #[serde(default = "default::compaction_config::disable_auto_group_scheduling")]
588 pub disable_auto_group_scheduling: bool,
589 #[serde(default = "default::compaction_config::max_overlapping_level_size")]
590 pub max_overlapping_level_size: u64,
591 #[serde(default = "default::compaction_config::emergency_level0_sst_file_count")]
592 pub emergency_level0_sst_file_count: u32,
593 #[serde(default = "default::compaction_config::emergency_level0_sub_level_partition")]
594 pub emergency_level0_sub_level_partition: u32,
595 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_sst_count")]
596 pub level0_stop_write_threshold_max_sst_count: u32,
597 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_size")]
598 pub level0_stop_write_threshold_max_size: u64,
599 #[serde(default = "default::compaction_config::enable_optimize_l0_interval_selection")]
600 pub enable_optimize_l0_interval_selection: bool,
601 #[serde(default = "default::compaction_config::max_kv_count_for_xor16")]
602 pub max_kv_count_for_xor16: Option<u64>,
603 #[serde(default = "default::compaction_config::max_vnode_key_range_bytes")]
604 pub max_vnode_key_range_bytes: Option<u64>,
605}
606
607pub mod default {
608 pub use crate::config::default::developer;
609
610 pub mod meta {
611 use crate::config::{DefaultParallelism, MetaBackend};
612
613 pub fn min_sst_retention_time_sec() -> u64 {
614 3600 * 6
615 }
616
617 pub fn gc_history_retention_time_sec() -> u64 {
618 3600 * 6
619 }
620
621 pub fn full_gc_interval_sec() -> u64 {
622 3600
623 }
624
625 pub fn full_gc_object_limit() -> u64 {
626 100_000
627 }
628
629 pub fn max_inflight_time_travel_query() -> u64 {
630 1000
631 }
632
633 pub fn periodic_compaction_interval_sec() -> u64 {
634 300
635 }
636
637 pub fn vacuum_interval_sec() -> u64 {
638 30
639 }
640
641 pub fn vacuum_spin_interval_ms() -> u64 {
642 100
643 }
644
645 pub fn iceberg_gc_interval_sec() -> u64 {
646 3600
647 }
648
649 pub fn hummock_version_checkpoint_interval_sec() -> u64 {
650 30
651 }
652
653 pub fn checkpoint_read_chunk_size() -> usize {
654 128 * 1024 * 1024 }
656
657 pub fn checkpoint_read_max_in_flight_chunks() -> usize {
658 4
659 }
660
661 pub fn enable_hummock_data_archive() -> bool {
662 false
663 }
664
665 pub fn hummock_time_travel_snapshot_interval() -> u64 {
666 100
667 }
668
669 pub fn min_delta_log_num_for_hummock_version_checkpoint() -> u64 {
670 10
671 }
672
673 pub fn max_heartbeat_interval_sec() -> u32 {
674 60
675 }
676
677 pub fn meta_leader_lease_secs() -> u64 {
678 30
679 }
680
681 pub fn default_parallelism() -> DefaultParallelism {
682 DefaultParallelism::Full
683 }
684
685 pub fn pause_on_next_bootstrap_offline() -> bool {
686 false
687 }
688
689 pub fn node_num_monitor_interval_sec() -> u64 {
690 10
691 }
692
693 pub fn backend() -> MetaBackend {
694 MetaBackend::Mem
695 }
696
697 pub fn periodic_space_reclaim_compaction_interval_sec() -> u64 {
698 3600 }
700
701 pub fn periodic_ttl_reclaim_compaction_interval_sec() -> u64 {
702 1800 }
704
705 pub fn periodic_scheduling_compaction_group_split_interval_sec() -> u64 {
706 10 }
708
709 pub fn periodic_tombstone_reclaim_compaction_interval_sec() -> u64 {
710 600
711 }
712
713 pub fn move_table_size_limit() -> u64 {
715 10 * 1024 * 1024 * 1024 }
717
718 pub fn split_group_size_limit() -> u64 {
720 64 * 1024 * 1024 * 1024 }
722
723 pub fn protect_drop_table_with_incoming_sink() -> bool {
724 false
725 }
726
727 pub fn partition_vnode_count() -> u32 {
728 16
729 }
730
731 pub fn table_high_write_throughput_threshold() -> u64 {
732 16 * 1024 * 1024 }
734
735 pub fn table_low_write_throughput_threshold() -> u64 {
736 4 * 1024 * 1024 }
738
739 pub fn compaction_task_max_heartbeat_interval_secs() -> u64 {
740 30 }
742
743 pub fn compaction_task_max_progress_interval_secs() -> u64 {
744 60 * 10 }
746
747 pub fn cut_table_size_limit() -> u64 {
748 1024 * 1024 * 1024 }
750
751 pub fn hybrid_partition_vnode_count() -> u32 {
752 4
753 }
754
755 pub fn compact_task_table_size_partition_threshold_low() -> u64 {
756 128 * 1024 * 1024 }
758
759 pub fn compact_task_table_size_partition_threshold_high() -> u64 {
760 512 * 1024 * 1024 }
762
763 pub fn event_log_enabled() -> bool {
764 true
765 }
766
767 pub fn event_log_channel_max_size() -> u32 {
768 10
769 }
770
771 pub fn parallelism_control_batch_size() -> usize {
772 10
773 }
774
775 pub fn parallelism_control_trigger_period_sec() -> u64 {
776 10
777 }
778
779 pub fn parallelism_control_trigger_first_delay_sec() -> u64 {
780 30
781 }
782
783 pub fn enable_dropped_column_reclaim() -> bool {
784 false
785 }
786
787 pub fn split_group_size_ratio() -> f64 {
788 0.9
789 }
790
791 pub fn table_stat_high_write_throughput_ratio_for_split() -> f64 {
792 0.5
793 }
794
795 pub fn table_stat_low_write_throughput_ratio_for_merge() -> f64 {
796 0.7
797 }
798
799 pub fn table_stat_throuput_window_seconds_for_split() -> usize {
800 60
801 }
802
803 pub fn table_stat_throuput_window_seconds_for_merge() -> usize {
804 240
805 }
806
807 pub fn periodic_scheduling_compaction_group_merge_interval_sec() -> u64 {
808 60 * 10 }
810
811 pub fn compaction_group_merge_dimension_threshold() -> f64 {
812 1.2
813 }
814
815 pub fn cdc_table_split_init_sleep_interval_splits() -> u64 {
816 1000
817 }
818
819 pub fn cdc_table_split_init_sleep_duration_millis() -> u64 {
820 500
821 }
822
823 pub fn cdc_table_split_init_insert_batch_size() -> u64 {
824 100
825 }
826
827 pub fn enable_legacy_table_migration() -> bool {
828 true
829 }
830 }
831
832 pub mod meta_store_config {
833 const DEFAULT_MAX_CONNECTIONS: u32 = 10;
834 const DEFAULT_MIN_CONNECTIONS: u32 = 1;
835 const DEFAULT_CONNECTION_TIMEOUT_SEC: u64 = 10;
836 const DEFAULT_IDLE_TIMEOUT_SEC: u64 = 30;
837 const DEFAULT_ACQUIRE_TIMEOUT_SEC: u64 = 30;
838
839 pub fn max_connections() -> u32 {
840 DEFAULT_MAX_CONNECTIONS
841 }
842
843 pub fn min_connections() -> u32 {
844 DEFAULT_MIN_CONNECTIONS
845 }
846
847 pub fn connection_timeout_sec() -> u64 {
848 DEFAULT_CONNECTION_TIMEOUT_SEC
849 }
850
851 pub fn idle_timeout_sec() -> u64 {
852 DEFAULT_IDLE_TIMEOUT_SEC
853 }
854
855 pub fn acquire_timeout_sec() -> u64 {
856 DEFAULT_ACQUIRE_TIMEOUT_SEC
857 }
858 }
859
860 pub mod compaction_config {
861 const MB: u64 = 1024 * 1024;
862 const GB: u64 = 1024 * 1024 * 1024;
863 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;
869 const DEFAULT_TARGET_FILE_SIZE_BASE: u64 = 32 * MB;
870 const DEFAULT_MAX_SUB_COMPACTION: u32 = 4;
872 const DEFAULT_LEVEL_MULTIPLIER: u64 = 10;
873 const DEFAULT_MAX_SPACE_RECLAIM_BYTES: u64 = 512 * MB; const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER: u64 = 128;
875 const DEFAULT_MAX_COMPACTION_FILE_COUNT: u64 = 100;
876 const DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 3;
877 const DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 12;
878 const DEFAULT_TOMBSTONE_RATIO_PERCENT: u32 = 40;
879 const DEFAULT_EMERGENCY_PICKER: bool = true;
880 const DEFAULT_MAX_LEVEL: u32 = 6;
881 const DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT: u32 = 42;
882 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE: u64 = 4 * MB;
883 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT: u32 = 256;
884 const DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT: u32 = 2000; const DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION: u32 = 256;
886 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT: u32 = 5000;
887 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE: u64 = 300 * 1024 * MB; const DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION: bool = true;
889 pub const DEFAULT_MAX_KV_COUNT_FOR_XOR16: u64 = 256 * 1024;
890 const DEFAULT_MAX_VNODE_KEY_RANGE_BYTES: Option<u64> = None;
891
892 use crate::catalog::hummock::CompactionFilterFlag;
893
894 pub fn max_bytes_for_level_base() -> u64 {
895 DEFAULT_MAX_BYTES_FOR_LEVEL_BASE
896 }
897
898 pub fn max_bytes_for_level_multiplier() -> u64 {
899 DEFAULT_LEVEL_MULTIPLIER
900 }
901
902 pub fn max_compaction_bytes() -> u64 {
903 DEFAULT_MAX_COMPACTION_BYTES
904 }
905
906 pub fn sub_level_max_compaction_bytes() -> u64 {
907 DEFAULT_MIN_COMPACTION_BYTES
908 }
909
910 pub fn level0_tier_compact_file_number() -> u64 {
911 DEFAULT_TIER_COMPACT_TRIGGER_NUMBER
912 }
913
914 pub fn target_file_size_base() -> u64 {
915 DEFAULT_TARGET_FILE_SIZE_BASE
916 }
917
918 pub fn compaction_filter_mask() -> u32 {
919 (CompactionFilterFlag::STATE_CLEAN | CompactionFilterFlag::TTL).into()
920 }
921
922 pub fn max_sub_compaction() -> u32 {
923 DEFAULT_MAX_SUB_COMPACTION
924 }
925
926 pub fn level0_stop_write_threshold_sub_level_number() -> u64 {
927 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER
928 }
929
930 pub fn level0_sub_level_compact_level_count() -> u32 {
931 DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT
932 }
933
934 pub fn level0_overlapping_sub_level_compact_level_count() -> u32 {
935 DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT
936 }
937
938 pub fn max_space_reclaim_bytes() -> u64 {
939 DEFAULT_MAX_SPACE_RECLAIM_BYTES
940 }
941
942 pub fn level0_max_compact_file_number() -> u64 {
943 DEFAULT_MAX_COMPACTION_FILE_COUNT
944 }
945
946 pub fn tombstone_reclaim_ratio() -> u32 {
947 DEFAULT_TOMBSTONE_RATIO_PERCENT
948 }
949
950 pub fn enable_emergency_picker() -> bool {
951 DEFAULT_EMERGENCY_PICKER
952 }
953
954 pub fn max_level() -> u32 {
955 DEFAULT_MAX_LEVEL
956 }
957
958 pub fn max_l0_compact_level_count() -> u32 {
959 DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT
960 }
961
962 pub fn sst_allowed_trivial_move_min_size() -> u64 {
963 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE
964 }
965
966 pub fn disable_auto_group_scheduling() -> bool {
967 false
968 }
969
970 pub fn max_overlapping_level_size() -> u64 {
971 256 * MB
972 }
973
974 pub fn sst_allowed_trivial_move_max_count() -> u32 {
975 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT
976 }
977
978 pub fn emergency_level0_sst_file_count() -> u32 {
979 DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT
980 }
981
982 pub fn emergency_level0_sub_level_partition() -> u32 {
983 DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION
984 }
985
986 pub fn level0_stop_write_threshold_max_sst_count() -> u32 {
987 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT
988 }
989
990 pub fn level0_stop_write_threshold_max_size() -> u64 {
991 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE
992 }
993
994 pub fn enable_optimize_l0_interval_selection() -> bool {
995 DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION
996 }
997
998 pub fn max_kv_count_for_xor16() -> Option<u64> {
999 Some(DEFAULT_MAX_KV_COUNT_FOR_XOR16)
1000 }
1001
1002 pub fn max_vnode_key_range_bytes() -> Option<u64> {
1003 DEFAULT_MAX_VNODE_KEY_RANGE_BYTES
1004 }
1005 }
1006}