1#![allow(clippy::disallowed_types)] use std::collections::HashMap;
5use std::path::PathBuf;
6
7use laminar_connectors::connector::DeliveryGuarantee;
8use laminar_core::streaming::{BackpressureStrategy, StreamCheckpointConfig};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
12pub enum BackpressurePolicy {
13 #[default]
15 Backpressure,
16 ShedOldest,
18 Fail,
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
27pub enum IdentifierCaseSensitivity {
28 #[default]
30 CaseSensitive,
31 Lowercase,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq)]
37pub struct TieringConfig {
38 pub hot_class: String,
40 pub warm_class: String,
42 pub cold_class: String,
44 pub hot_retention_secs: u64,
46 pub warm_retention_secs: u64,
48}
49
50impl Default for TieringConfig {
51 fn default() -> Self {
52 Self {
53 hot_class: "STANDARD".to_string(),
54 warm_class: "STANDARD".to_string(),
55 cold_class: String::new(),
56 hot_retention_secs: 86400, warm_retention_secs: 604_800, }
59 }
60}
61
62#[derive(Debug, Clone)]
64pub struct LaminarConfig {
65 pub default_buffer_size: usize,
67 pub default_backpressure: BackpressureStrategy,
69 pub storage_dir: Option<PathBuf>,
71 pub checkpoint: Option<StreamCheckpointConfig>,
73 pub identifier_case: IdentifierCaseSensitivity,
75 pub object_store_url: Option<String>,
77 pub object_store_options: HashMap<String, String>,
79 pub tiering: Option<TieringConfig>,
81 pub delivery_guarantee: DeliveryGuarantee,
83 pub max_state_bytes_per_operator: Option<usize>,
85
86 pub pipeline_channel_capacity: Option<usize>,
88 pub pipeline_batch_window: Option<std::time::Duration>,
90 pub pipeline_drain_budget_ns: Option<u64>,
92 pub pipeline_query_budget_ns: Option<u64>,
94 pub pipeline_max_input_buf_batches: Option<usize>,
96 pub pipeline_max_input_buf_bytes: Option<usize>,
98 pub pipeline_backpressure_policy: BackpressurePolicy,
100}
101
102impl Default for LaminarConfig {
103 fn default() -> Self {
104 Self {
105 default_buffer_size: 65536,
106 default_backpressure: BackpressureStrategy::Block,
107 storage_dir: None,
108 checkpoint: None,
109 identifier_case: IdentifierCaseSensitivity::default(),
110 object_store_url: None,
111 object_store_options: HashMap::new(),
112 tiering: None,
113 delivery_guarantee: DeliveryGuarantee::default(),
114 max_state_bytes_per_operator: None,
115 pipeline_channel_capacity: None,
116 pipeline_batch_window: None,
117 pipeline_drain_budget_ns: None,
118 pipeline_query_budget_ns: None,
119 pipeline_max_input_buf_batches: None,
120 pipeline_max_input_buf_bytes: None,
121 pipeline_backpressure_policy: BackpressurePolicy::default(),
122 }
123 }
124}