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::iceberg_compaction_report_timeout_sec")]
176 pub iceberg_compaction_report_timeout_sec: u64,
177
178 #[serde(default = "default::meta::iceberg_compaction_config_refresh_interval_sec")]
181 pub iceberg_compaction_config_refresh_interval_sec: u64,
182
183 #[serde(default = "default::meta::hummock_version_checkpoint_interval_sec")]
185 pub hummock_version_checkpoint_interval_sec: u64,
186
187 #[serde(default)]
189 pub checkpoint_compression_algorithm: CheckpointCompression,
190
191 #[serde(default = "default::meta::checkpoint_read_chunk_size")]
195 pub checkpoint_read_chunk_size: usize,
196
197 #[serde(default = "default::meta::checkpoint_read_max_in_flight_chunks")]
202 pub checkpoint_read_max_in_flight_chunks: usize,
203
204 #[serde(default = "default::meta::enable_hummock_data_archive")]
210 pub enable_hummock_data_archive: bool,
211
212 #[serde(default = "default::meta::hummock_time_travel_snapshot_interval")]
216 pub hummock_time_travel_snapshot_interval: u64,
217
218 #[serde(default = "default::meta::min_delta_log_num_for_hummock_version_checkpoint")]
221 pub min_delta_log_num_for_hummock_version_checkpoint: u64,
222
223 #[serde(default = "default::meta::max_heartbeat_interval_sec")]
225 pub max_heartbeat_interval_secs: u32,
226
227 #[serde(default)]
229 pub disable_recovery: bool,
230
231 #[serde(default = "default::meta::pause_on_next_bootstrap_offline")]
239 pub pause_on_next_bootstrap_offline: bool,
240
241 #[serde(default)]
243 pub disable_automatic_parallelism_control: bool,
244
245 #[serde(default = "default::meta::parallelism_control_batch_size")]
247 pub parallelism_control_batch_size: usize,
248
249 #[serde(default = "default::meta::parallelism_control_trigger_period_sec")]
251 pub parallelism_control_trigger_period_sec: u64,
252
253 #[serde(default = "default::meta::parallelism_control_trigger_first_delay_sec")]
255 pub parallelism_control_trigger_first_delay_sec: u64,
256
257 #[serde(default = "default::meta::meta_leader_lease_secs")]
258 pub meta_leader_lease_secs: u64,
259
260 #[serde(default)]
263 pub dangerous_max_idle_secs: Option<u64>,
264
265 #[serde(default = "default::meta::default_parallelism")]
269 pub default_parallelism: DefaultParallelism,
270
271 #[serde(default)]
275 pub enable_compaction_deterministic: bool,
276
277 #[serde(default)]
279 pub enable_committed_sst_sanity_check: bool,
280
281 #[serde(default = "default::meta::node_num_monitor_interval_sec")]
282 pub node_num_monitor_interval_sec: u64,
283
284 #[serde(default = "default::meta::backend")]
285 pub backend: MetaBackend,
286
287 #[serde(default = "default::meta::periodic_space_reclaim_compaction_interval_sec")]
289 pub periodic_space_reclaim_compaction_interval_sec: u64,
290
291 #[serde(default = "default::meta::periodic_ttl_reclaim_compaction_interval_sec")]
293 pub periodic_ttl_reclaim_compaction_interval_sec: u64,
294
295 #[serde(default = "default::meta::periodic_tombstone_reclaim_compaction_interval_sec")]
296 pub periodic_tombstone_reclaim_compaction_interval_sec: u64,
297
298 #[serde(default = "default::meta::move_table_size_limit")]
299 #[deprecated]
300 pub move_table_size_limit: u64,
301
302 #[serde(default = "default::meta::split_group_size_limit")]
303 #[deprecated]
304 pub split_group_size_limit: u64,
305
306 #[serde(default = "default::meta::cut_table_size_limit")]
307 #[deprecated]
308 pub cut_table_size_limit: u64,
309
310 #[serde(default = "default::meta::protect_drop_table_with_incoming_sink")]
312 pub protect_drop_table_with_incoming_sink: bool,
313
314 #[serde(default, flatten)]
315 #[config_doc(omitted)]
316 pub unrecognized: Unrecognized<Self>,
317
318 #[serde(default)]
320 pub do_not_config_object_storage_lifecycle: bool,
321
322 #[serde(default = "default::meta::partition_vnode_count")]
325 pub partition_vnode_count: u32,
326
327 #[serde(
329 default = "default::meta::table_high_write_throughput_threshold",
330 alias = "table_write_throughput_threshold"
331 )]
332 pub table_high_write_throughput_threshold: u64,
333
334 #[serde(
335 default = "default::meta::table_low_write_throughput_threshold",
336 alias = "min_table_split_write_throughput"
337 )]
338 pub table_low_write_throughput_threshold: u64,
340
341 #[serde(default = "default::meta::compaction_task_max_heartbeat_interval_secs")]
344 pub compaction_task_max_heartbeat_interval_secs: u64,
345
346 #[serde(default = "default::meta::compaction_task_max_progress_interval_secs")]
349 pub compaction_task_max_progress_interval_secs: u64,
350
351 #[serde(default = "default::meta::compaction_task_id_refill_capacity")]
353 pub compaction_task_id_refill_capacity: u32,
354
355 #[serde(default)]
356 #[config_doc(nested)]
357 pub compaction_config: CompactionConfig,
358
359 #[serde(default = "default::meta::hybrid_partition_vnode_count")]
364 pub hybrid_partition_vnode_count: u32,
365
366 #[serde(default = "default::meta::event_log_enabled")]
367 pub event_log_enabled: bool,
368 #[serde(default = "default::meta::event_log_channel_max_size")]
370 pub event_log_channel_max_size: u32,
371
372 #[serde(default)]
373 #[config_doc(nested)]
374 pub developer: MetaDeveloperConfig,
375
376 #[serde(default = "default::meta::enable_dropped_column_reclaim")]
378 pub enable_dropped_column_reclaim: bool,
379
380 #[serde(default = "default::meta::split_group_size_ratio")]
382 pub split_group_size_ratio: f64,
383
384 #[serde(default = "default::meta::table_stat_high_write_throughput_ratio_for_split")]
388 pub table_stat_high_write_throughput_ratio_for_split: f64,
389
390 #[serde(default = "default::meta::table_stat_low_write_throughput_ratio_for_merge")]
392 pub table_stat_low_write_throughput_ratio_for_merge: f64,
393
394 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_split")]
400 pub table_stat_throuput_window_seconds_for_split: usize,
401
402 #[serde(default = "default::meta::table_stat_throuput_window_seconds_for_merge")]
404 pub table_stat_throuput_window_seconds_for_merge: usize,
405
406 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_low")]
409 pub compact_task_table_size_partition_threshold_low: u64,
410
411 #[serde(default = "default::meta::compact_task_table_size_partition_threshold_high")]
414 pub compact_task_table_size_partition_threshold_high: u64,
415
416 #[serde(
420 default = "default::meta::periodic_scheduling_compaction_group_split_interval_sec",
421 alias = "periodic_split_compact_group_interval_sec"
422 )]
423 pub periodic_scheduling_compaction_group_split_interval_sec: u64,
424
425 #[serde(default = "default::meta::enable_compaction_group_normalize")]
427 pub enable_compaction_group_normalize: bool,
428
429 #[serde(
431 default = "default::meta::max_normalize_splits_per_round",
432 deserialize_with = "deserialize_max_normalize_splits_per_round"
433 )]
434 pub max_normalize_splits_per_round: u64,
435
436 #[serde(default = "default::meta::periodic_scheduling_compaction_group_merge_interval_sec")]
438 pub periodic_scheduling_compaction_group_merge_interval_sec: u64,
439
440 #[serde(default = "default::meta::compaction_group_merge_dimension_threshold")]
442 pub compaction_group_merge_dimension_threshold: f64,
443
444 #[serde(default = "default::meta::cdc_table_split_init_sleep_interval_splits")]
446 pub cdc_table_split_init_sleep_interval_splits: u64,
447
448 #[serde(default = "default::meta::cdc_table_split_init_sleep_duration_millis")]
450 pub cdc_table_split_init_sleep_duration_millis: u64,
451
452 #[serde(default = "default::meta::cdc_table_split_init_insert_batch_size")]
454 pub cdc_table_split_init_insert_batch_size: u64,
455
456 #[serde(default = "default::meta::enable_legacy_table_migration")]
458 pub enable_legacy_table_migration: bool,
459
460 #[serde(default)]
461 #[config_doc(nested)]
462 pub meta_store_config: MetaStoreConfig,
463}
464
465#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
467#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
468pub struct MetaStoreConfig {
469 #[serde(default = "default::meta_store_config::max_connections")]
471 pub max_connections: u32,
472 #[serde(default = "default::meta_store_config::min_connections")]
474 pub min_connections: u32,
475 #[serde(default = "default::meta_store_config::connection_timeout_sec")]
477 pub connection_timeout_sec: u64,
478 #[serde(default = "default::meta_store_config::idle_timeout_sec")]
480 pub idle_timeout_sec: u64,
481 #[serde(default = "default::meta_store_config::acquire_timeout_sec")]
483 pub acquire_timeout_sec: u64,
484}
485
486fn deserialize_max_normalize_splits_per_round<'de, D>(deserializer: D) -> Result<u64, D::Error>
487where
488 D: serde::Deserializer<'de>,
489{
490 let value = u64::deserialize(deserializer)?;
491 if value == 0 {
492 return Err(D::Error::custom(
493 "meta.max_normalize_splits_per_round must be greater than 0",
494 ));
495 }
496 Ok(value)
497}
498
499#[serde_prefix_all("meta_", mode = "alias")]
503#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
504#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
505pub struct MetaDeveloperConfig {
506 #[serde(default = "default::developer::meta_cached_traces_num")]
509 pub cached_traces_num: u32,
510
511 #[serde(default = "default::developer::meta_cached_traces_memory_limit_bytes")]
514 pub cached_traces_memory_limit_bytes: usize,
515
516 #[serde(default = "default::developer::enable_trivial_move")]
518 pub enable_trivial_move: bool,
519 #[serde(default = "default::developer::enable_check_task_level_overlap")]
520 pub enable_check_task_level_overlap: bool,
521 #[serde(default = "default::developer::max_trivial_move_task_count_per_loop")]
522 pub max_trivial_move_task_count_per_loop: usize,
523
524 #[serde(default = "default::developer::max_get_task_probe_times")]
525 pub max_get_task_probe_times: usize,
526
527 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_soft_limit")]
530 pub actor_cnt_per_worker_parallelism_soft_limit: usize,
531
532 #[serde(default = "default::developer::actor_cnt_per_worker_parallelism_hard_limit")]
535 pub actor_cnt_per_worker_parallelism_hard_limit: usize,
536
537 #[serde(default = "default::developer::hummock_time_travel_sst_info_fetch_batch_size")]
539 pub hummock_time_travel_sst_info_fetch_batch_size: usize,
540
541 #[serde(default = "default::developer::hummock_time_travel_sst_info_insert_batch_size")]
543 pub hummock_time_travel_sst_info_insert_batch_size: usize,
544
545 #[serde(default = "default::developer::time_travel_vacuum_interval_sec")]
546 pub time_travel_vacuum_interval_sec: u64,
547
548 #[serde(default = "default::developer::time_travel_vacuum_max_version_count")]
549 pub time_travel_vacuum_max_version_count: Option<u32>,
550
551 #[serde(default = "default::developer::hummock_time_travel_epoch_version_insert_batch_size")]
553 pub hummock_time_travel_epoch_version_insert_batch_size: usize,
554
555 #[serde(default = "default::developer::hummock_time_travel_delta_fetch_batch_size")]
557 pub hummock_time_travel_delta_fetch_batch_size: usize,
558
559 #[serde(default = "default::developer::hummock_gc_history_insert_batch_size")]
560 pub hummock_gc_history_insert_batch_size: usize,
561
562 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_batch_size")]
563 pub hummock_time_travel_filter_out_objects_batch_size: usize,
564
565 #[serde(default = "default::developer::hummock_time_travel_filter_out_objects_v1")]
566 pub hummock_time_travel_filter_out_objects_v1: bool,
567
568 #[serde(
569 default = "default::developer::hummock_time_travel_filter_out_objects_list_version_batch_size"
570 )]
571 pub hummock_time_travel_filter_out_objects_list_version_batch_size: usize,
572
573 #[serde(
574 default = "default::developer::hummock_time_travel_filter_out_objects_list_delta_batch_size"
575 )]
576 pub hummock_time_travel_filter_out_objects_list_delta_batch_size: usize,
577
578 #[serde(default)]
579 pub compute_client_config: RpcClientConfig,
580
581 #[serde(default)]
582 pub stream_client_config: RpcClientConfig,
583
584 #[serde(default)]
585 pub frontend_client_config: RpcClientConfig,
586
587 #[serde(default = "default::developer::table_change_log_insert_batch_size")]
588 pub table_change_log_insert_batch_size: u64,
589
590 #[serde(default = "default::developer::table_change_log_delete_batch_size")]
591 pub table_change_log_delete_batch_size: u64,
592}
593
594#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
595#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
596pub struct CompactionConfig {
597 #[serde(default = "default::compaction_config::max_bytes_for_level_base")]
598 pub max_bytes_for_level_base: u64,
599 #[serde(default = "default::compaction_config::max_bytes_for_level_multiplier")]
600 pub max_bytes_for_level_multiplier: u64,
601 #[serde(default = "default::compaction_config::max_compaction_bytes")]
602 pub max_compaction_bytes: u64,
603 #[serde(default = "default::compaction_config::sub_level_max_compaction_bytes")]
604 pub sub_level_max_compaction_bytes: u64,
605 #[serde(default = "default::compaction_config::level0_tier_compact_file_number")]
606 pub level0_tier_compact_file_number: u64,
607 #[serde(default = "default::compaction_config::target_file_size_base")]
608 pub target_file_size_base: u64,
609 #[serde(default = "default::compaction_config::compaction_filter_mask")]
610 pub compaction_filter_mask: u32,
611 #[serde(default = "default::compaction_config::max_sub_compaction")]
612 pub max_sub_compaction: u32,
613 #[serde(default = "default::compaction_config::level0_stop_write_threshold_sub_level_number")]
614 pub level0_stop_write_threshold_sub_level_number: u64,
615 #[serde(default = "default::compaction_config::level0_sub_level_compact_level_count")]
616 pub level0_sub_level_compact_level_count: u32,
617 #[serde(
618 default = "default::compaction_config::level0_overlapping_sub_level_compact_level_count"
619 )]
620 pub level0_overlapping_sub_level_compact_level_count: u32,
621 #[serde(default = "default::compaction_config::max_space_reclaim_bytes")]
622 pub max_space_reclaim_bytes: u64,
623 #[serde(default = "default::compaction_config::level0_max_compact_file_number")]
624 pub level0_max_compact_file_number: u64,
625 #[serde(default = "default::compaction_config::tombstone_reclaim_ratio")]
626 pub tombstone_reclaim_ratio: u32,
627 #[serde(default = "default::compaction_config::enable_emergency_picker")]
628 pub enable_emergency_picker: bool,
629 #[serde(default = "default::compaction_config::max_level")]
630 pub max_level: u32,
631 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_min_size")]
632 pub sst_allowed_trivial_move_min_size: u64,
633 #[serde(default = "default::compaction_config::sst_allowed_trivial_move_max_count")]
634 pub sst_allowed_trivial_move_max_count: u32,
635 #[serde(default = "default::compaction_config::max_l0_compact_level_count")]
636 pub max_l0_compact_level_count: u32,
637 #[serde(default = "default::compaction_config::disable_auto_group_scheduling")]
638 pub disable_auto_group_scheduling: bool,
639 #[serde(default = "default::compaction_config::max_overlapping_level_size")]
640 pub max_overlapping_level_size: u64,
641 #[serde(default = "default::compaction_config::emergency_level0_sst_file_count")]
642 pub emergency_level0_sst_file_count: u32,
643 #[serde(default = "default::compaction_config::emergency_level0_sub_level_partition")]
644 pub emergency_level0_sub_level_partition: u32,
645 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_sst_count")]
646 pub level0_stop_write_threshold_max_sst_count: u32,
647 #[serde(default = "default::compaction_config::level0_stop_write_threshold_max_size")]
648 pub level0_stop_write_threshold_max_size: u64,
649 #[serde(default = "default::compaction_config::enable_optimize_l0_interval_selection")]
650 pub enable_optimize_l0_interval_selection: bool,
651 #[serde(default = "default::compaction_config::blocked_xor_filter_kv_count_threshold")]
665 #[serde(alias = "max_kv_count_for_xor16")]
666 pub blocked_xor_filter_kv_count_threshold: Option<u64>,
667 #[serde(default = "default::compaction_config::max_vnode_key_range_bytes")]
668 pub max_vnode_key_range_bytes: Option<u64>,
669 #[serde(default = "default::compaction_config::sstable_filter_kind")]
674 pub sstable_filter_kind: Vec<String>,
675 #[serde(default = "default::compaction_config::sstable_filter_layout")]
684 pub sstable_filter_layout: Vec<String>,
685}
686
687pub mod default {
688 pub use crate::config::default::developer;
689
690 pub mod meta {
691 use crate::config::{DefaultParallelism, MetaBackend};
692
693 pub fn min_sst_retention_time_sec() -> u64 {
694 3600 * 6
695 }
696
697 pub fn gc_history_retention_time_sec() -> u64 {
698 3600 * 6
699 }
700
701 pub fn full_gc_interval_sec() -> u64 {
702 3600
703 }
704
705 pub fn full_gc_object_limit() -> u64 {
706 100_000
707 }
708
709 pub fn max_inflight_time_travel_query() -> u64 {
710 1000
711 }
712
713 pub fn periodic_compaction_interval_sec() -> u64 {
714 300
715 }
716
717 pub fn vacuum_interval_sec() -> u64 {
718 30
719 }
720
721 pub fn vacuum_spin_interval_ms() -> u64 {
722 100
723 }
724
725 pub fn iceberg_gc_interval_sec() -> u64 {
726 3600
727 }
728
729 pub fn iceberg_compaction_report_timeout_sec() -> u64 {
730 30 * 60
731 }
732
733 pub fn iceberg_compaction_config_refresh_interval_sec() -> u64 {
734 60
735 }
736
737 pub fn hummock_version_checkpoint_interval_sec() -> u64 {
738 30
739 }
740
741 pub fn checkpoint_read_chunk_size() -> usize {
742 128 * 1024 * 1024 }
744
745 pub fn checkpoint_read_max_in_flight_chunks() -> usize {
746 4
747 }
748
749 pub fn enable_hummock_data_archive() -> bool {
750 false
751 }
752
753 pub fn hummock_time_travel_snapshot_interval() -> u64 {
754 100
755 }
756
757 pub fn min_delta_log_num_for_hummock_version_checkpoint() -> u64 {
758 10
759 }
760
761 pub fn max_heartbeat_interval_sec() -> u32 {
762 60
763 }
764
765 pub fn meta_leader_lease_secs() -> u64 {
766 30
767 }
768
769 pub fn default_parallelism() -> DefaultParallelism {
770 DefaultParallelism::Full
771 }
772
773 pub fn pause_on_next_bootstrap_offline() -> bool {
774 false
775 }
776
777 pub fn node_num_monitor_interval_sec() -> u64 {
778 10
779 }
780
781 pub fn backend() -> MetaBackend {
782 MetaBackend::Mem
783 }
784
785 pub fn periodic_space_reclaim_compaction_interval_sec() -> u64 {
786 3600 }
788
789 pub fn periodic_ttl_reclaim_compaction_interval_sec() -> u64 {
790 1800 }
792
793 pub fn periodic_scheduling_compaction_group_split_interval_sec() -> u64 {
794 10 }
796
797 pub fn periodic_tombstone_reclaim_compaction_interval_sec() -> u64 {
798 600
799 }
800
801 pub fn move_table_size_limit() -> u64 {
803 10 * 1024 * 1024 * 1024 }
805
806 pub fn split_group_size_limit() -> u64 {
808 64 * 1024 * 1024 * 1024 }
810
811 pub fn protect_drop_table_with_incoming_sink() -> bool {
812 false
813 }
814
815 pub fn partition_vnode_count() -> u32 {
816 16
817 }
818
819 pub fn table_high_write_throughput_threshold() -> u64 {
820 16 * 1024 * 1024 }
822
823 pub fn table_low_write_throughput_threshold() -> u64 {
824 4 * 1024 * 1024 }
826
827 pub fn compaction_task_max_heartbeat_interval_secs() -> u64 {
828 30 }
830
831 pub fn compaction_task_max_progress_interval_secs() -> u64 {
832 60 * 10 }
834
835 pub fn compaction_task_id_refill_capacity() -> u32 {
836 64
837 }
838
839 pub fn cut_table_size_limit() -> u64 {
840 1024 * 1024 * 1024 }
842
843 pub fn hybrid_partition_vnode_count() -> u32 {
844 4
845 }
846
847 pub fn compact_task_table_size_partition_threshold_low() -> u64 {
848 128 * 1024 * 1024 }
850
851 pub fn compact_task_table_size_partition_threshold_high() -> u64 {
852 512 * 1024 * 1024 }
854
855 pub fn event_log_enabled() -> bool {
856 true
857 }
858
859 pub fn event_log_channel_max_size() -> u32 {
860 10
861 }
862
863 pub fn parallelism_control_batch_size() -> usize {
864 10
865 }
866
867 pub fn parallelism_control_trigger_period_sec() -> u64 {
868 10
869 }
870
871 pub fn parallelism_control_trigger_first_delay_sec() -> u64 {
872 30
873 }
874
875 pub fn enable_dropped_column_reclaim() -> bool {
876 false
877 }
878
879 pub fn split_group_size_ratio() -> f64 {
880 0.9
881 }
882
883 pub fn table_stat_high_write_throughput_ratio_for_split() -> f64 {
884 0.5
885 }
886
887 pub fn table_stat_low_write_throughput_ratio_for_merge() -> f64 {
888 0.7
889 }
890
891 pub fn table_stat_throuput_window_seconds_for_split() -> usize {
892 60
893 }
894
895 pub fn table_stat_throuput_window_seconds_for_merge() -> usize {
896 240
897 }
898
899 pub fn periodic_scheduling_compaction_group_merge_interval_sec() -> u64 {
900 60 * 10 }
902
903 pub fn enable_compaction_group_normalize() -> bool {
904 true
905 }
906
907 pub fn max_normalize_splits_per_round() -> u64 {
908 4
909 }
910
911 pub fn compaction_group_merge_dimension_threshold() -> f64 {
912 1.2
913 }
914
915 pub fn cdc_table_split_init_sleep_interval_splits() -> u64 {
916 1000
917 }
918
919 pub fn cdc_table_split_init_sleep_duration_millis() -> u64 {
920 500
921 }
922
923 pub fn cdc_table_split_init_insert_batch_size() -> u64 {
924 100
925 }
926
927 pub fn enable_legacy_table_migration() -> bool {
928 true
929 }
930 }
931
932 pub mod meta_store_config {
933 const DEFAULT_MAX_CONNECTIONS: u32 = 10;
934 const DEFAULT_MIN_CONNECTIONS: u32 = 1;
935 const DEFAULT_CONNECTION_TIMEOUT_SEC: u64 = 10;
936 const DEFAULT_IDLE_TIMEOUT_SEC: u64 = 30;
937 const DEFAULT_ACQUIRE_TIMEOUT_SEC: u64 = 30;
938
939 pub fn max_connections() -> u32 {
940 DEFAULT_MAX_CONNECTIONS
941 }
942
943 pub fn min_connections() -> u32 {
944 DEFAULT_MIN_CONNECTIONS
945 }
946
947 pub fn connection_timeout_sec() -> u64 {
948 DEFAULT_CONNECTION_TIMEOUT_SEC
949 }
950
951 pub fn idle_timeout_sec() -> u64 {
952 DEFAULT_IDLE_TIMEOUT_SEC
953 }
954
955 pub fn acquire_timeout_sec() -> u64 {
956 DEFAULT_ACQUIRE_TIMEOUT_SEC
957 }
958 }
959
960 pub mod compaction_config {
961 const MB: u64 = 1024 * 1024;
962 const GB: u64 = 1024 * 1024 * 1024;
963 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;
969 const DEFAULT_TARGET_FILE_SIZE_BASE: u64 = 32 * MB;
970 const DEFAULT_MAX_SUB_COMPACTION: u32 = 4;
972 const DEFAULT_LEVEL_MULTIPLIER: u64 = 10;
973 const DEFAULT_MAX_SPACE_RECLAIM_BYTES: u64 = 512 * MB; const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER: u64 = 128;
975 const DEFAULT_MAX_COMPACTION_FILE_COUNT: u64 = 100;
976 const DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 3;
977 const DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT: u32 = 12;
978 const DEFAULT_TOMBSTONE_RATIO_PERCENT: u32 = 40;
979 const DEFAULT_EMERGENCY_PICKER: bool = true;
980 const DEFAULT_MAX_LEVEL: u32 = 6;
981 const DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT: u32 = 42;
982 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE: u64 = 4 * MB;
983 const DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT: u32 = 256;
984 const DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT: u32 = 2000; const DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION: u32 = 256;
986 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT: u32 = 5000;
987 const DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE: u64 = 300 * 1024 * MB; const DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION: bool = true;
989 pub const DEFAULT_BLOCKED_XOR_FILTER_KV_COUNT_THRESHOLD: u64 = 256 * 1024;
990 const DEFAULT_MAX_VNODE_KEY_RANGE_BYTES: Option<u64> = None;
991
992 use crate::catalog::hummock::CompactionFilterFlag;
993
994 pub fn max_bytes_for_level_base() -> u64 {
995 DEFAULT_MAX_BYTES_FOR_LEVEL_BASE
996 }
997
998 pub fn max_bytes_for_level_multiplier() -> u64 {
999 DEFAULT_LEVEL_MULTIPLIER
1000 }
1001
1002 pub fn max_compaction_bytes() -> u64 {
1003 DEFAULT_MAX_COMPACTION_BYTES
1004 }
1005
1006 pub fn sub_level_max_compaction_bytes() -> u64 {
1007 DEFAULT_MIN_COMPACTION_BYTES
1008 }
1009
1010 pub fn level0_tier_compact_file_number() -> u64 {
1011 DEFAULT_TIER_COMPACT_TRIGGER_NUMBER
1012 }
1013
1014 pub fn target_file_size_base() -> u64 {
1015 DEFAULT_TARGET_FILE_SIZE_BASE
1016 }
1017
1018 pub fn compaction_filter_mask() -> u32 {
1019 (CompactionFilterFlag::STATE_CLEAN | CompactionFilterFlag::TTL).into()
1020 }
1021
1022 pub fn max_sub_compaction() -> u32 {
1023 DEFAULT_MAX_SUB_COMPACTION
1024 }
1025
1026 pub fn level0_stop_write_threshold_sub_level_number() -> u64 {
1027 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_SUB_LEVEL_NUMBER
1028 }
1029
1030 pub fn level0_sub_level_compact_level_count() -> u32 {
1031 DEFAULT_MIN_SUB_LEVEL_COMPACT_LEVEL_COUNT
1032 }
1033
1034 pub fn level0_overlapping_sub_level_compact_level_count() -> u32 {
1035 DEFAULT_MIN_OVERLAPPING_SUB_LEVEL_COMPACT_LEVEL_COUNT
1036 }
1037
1038 pub fn max_space_reclaim_bytes() -> u64 {
1039 DEFAULT_MAX_SPACE_RECLAIM_BYTES
1040 }
1041
1042 pub fn level0_max_compact_file_number() -> u64 {
1043 DEFAULT_MAX_COMPACTION_FILE_COUNT
1044 }
1045
1046 pub fn tombstone_reclaim_ratio() -> u32 {
1047 DEFAULT_TOMBSTONE_RATIO_PERCENT
1048 }
1049
1050 pub fn enable_emergency_picker() -> bool {
1051 DEFAULT_EMERGENCY_PICKER
1052 }
1053
1054 pub fn max_level() -> u32 {
1055 DEFAULT_MAX_LEVEL
1056 }
1057
1058 pub fn max_l0_compact_level_count() -> u32 {
1059 DEFAULT_MAX_L0_COMPACT_LEVEL_COUNT
1060 }
1061
1062 pub fn sst_allowed_trivial_move_min_size() -> u64 {
1063 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MIN_SIZE
1064 }
1065
1066 pub fn disable_auto_group_scheduling() -> bool {
1067 false
1068 }
1069
1070 pub fn max_overlapping_level_size() -> u64 {
1071 256 * MB
1072 }
1073
1074 pub fn sst_allowed_trivial_move_max_count() -> u32 {
1075 DEFAULT_SST_ALLOWED_TRIVIAL_MOVE_MAX_COUNT
1076 }
1077
1078 pub fn emergency_level0_sst_file_count() -> u32 {
1079 DEFAULT_EMERGENCY_LEVEL0_SST_FILE_COUNT
1080 }
1081
1082 pub fn emergency_level0_sub_level_partition() -> u32 {
1083 DEFAULT_EMERGENCY_LEVEL0_SUB_LEVEL_PARTITION
1084 }
1085
1086 pub fn level0_stop_write_threshold_max_sst_count() -> u32 {
1087 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SST_COUNT
1088 }
1089
1090 pub fn level0_stop_write_threshold_max_size() -> u64 {
1091 DEFAULT_LEVEL0_STOP_WRITE_THRESHOLD_MAX_SIZE
1092 }
1093
1094 pub fn enable_optimize_l0_interval_selection() -> bool {
1095 DEFAULT_ENABLE_OPTIMIZE_L0_INTERVAL_SELECTION
1096 }
1097
1098 pub fn blocked_xor_filter_kv_count_threshold() -> Option<u64> {
1099 Some(DEFAULT_BLOCKED_XOR_FILTER_KV_COUNT_THRESHOLD)
1100 }
1101
1102 pub fn compression_algorithm_for_level(level: u32) -> &'static str {
1107 match level {
1110 0..=2 => "None",
1111 3 | 4 => "Lz4",
1112 _ => "Zstd",
1113 }
1114 }
1115
1116 pub fn compression_algorithm_vec(max_level: u32) -> Vec<String> {
1118 (0..=max_level)
1119 .map(|level| compression_algorithm_for_level(level).to_owned())
1120 .collect()
1121 }
1122
1123 pub fn max_vnode_key_range_bytes() -> Option<u64> {
1124 DEFAULT_MAX_VNODE_KEY_RANGE_BYTES
1125 }
1126
1127 pub fn sstable_filter_kind() -> Vec<String> {
1128 vec![
1129 "xor16".to_owned(),
1130 "xor16".to_owned(),
1131 "xor16".to_owned(),
1132 "xor16".to_owned(),
1133 "xor16".to_owned(),
1134 "xor8".to_owned(),
1135 "xor8".to_owned(),
1136 ]
1137 }
1138
1139 pub fn sstable_filter_layout() -> Vec<String> {
1140 vec![
1141 "auto".to_owned(),
1142 "blocked".to_owned(),
1143 "blocked".to_owned(),
1144 "blocked".to_owned(),
1145 "blocked".to_owned(),
1146 "blocked".to_owned(),
1147 "blocked".to_owned(),
1148 ]
1149 }
1150 }
1151}