azoth_core/config/
canonical.rs1use serde::{Deserialize, Serialize};
2use std::path::PathBuf;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ReadPoolConfig {
10 #[serde(default)]
12 pub enabled: bool,
13
14 #[serde(default = "default_pool_size")]
19 pub pool_size: usize,
20
21 #[serde(default = "default_acquire_timeout")]
25 pub acquire_timeout_ms: u64,
26}
27
28impl Default for ReadPoolConfig {
29 fn default() -> Self {
30 Self {
31 enabled: false,
32 pool_size: default_pool_size(),
33 acquire_timeout_ms: default_acquire_timeout(),
34 }
35 }
36}
37
38impl ReadPoolConfig {
39 pub fn enabled(pool_size: usize) -> Self {
41 Self {
42 enabled: true,
43 pool_size,
44 acquire_timeout_ms: default_acquire_timeout(),
45 }
46 }
47
48 pub fn with_timeout(mut self, timeout_ms: u64) -> Self {
50 self.acquire_timeout_ms = timeout_ms;
51 self
52 }
53}
54
55fn default_pool_size() -> usize {
56 4
57}
58
59fn default_acquire_timeout() -> u64 {
60 5000
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct CanonicalConfig {
66 pub path: PathBuf,
68
69 #[serde(default = "default_map_size")]
72 pub map_size: usize,
73
74 #[serde(default)]
76 pub sync_mode: SyncMode,
77
78 #[serde(default = "default_stripe_count")]
81 pub stripe_count: usize,
82
83 #[serde(default = "default_max_readers")]
86 pub max_readers: u32,
87
88 #[serde(default = "default_true")]
93 pub preflight_read_only: bool,
94
95 #[serde(default = "default_chunk_size")]
100 pub state_iter_chunk_size: usize,
101
102 #[serde(default = "default_true")]
107 pub preflight_cache_enabled: bool,
108
109 #[serde(default = "default_preflight_cache_size")]
114 pub preflight_cache_size: usize,
115
116 #[serde(default = "default_preflight_cache_ttl")]
120 pub preflight_cache_ttl_secs: u64,
121
122 #[serde(default)]
127 pub read_pool: ReadPoolConfig,
128
129 #[serde(default = "default_lock_timeout")]
135 pub lock_timeout_ms: u64,
136}
137
138#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
139pub enum SyncMode {
140 Full,
142 #[default]
144 NoMetaSync,
145 NoSync,
147}
148
149fn default_map_size() -> usize {
150 10 * 1024 * 1024 * 1024 }
152
153fn default_stripe_count() -> usize {
154 256
155}
156
157fn default_max_readers() -> u32 {
158 126
159}
160
161fn default_true() -> bool {
162 true
163}
164
165fn default_chunk_size() -> usize {
166 1000
167}
168
169fn default_preflight_cache_size() -> usize {
170 10_000
171}
172
173fn default_preflight_cache_ttl() -> u64 {
174 60
175}
176
177fn default_lock_timeout() -> u64 {
178 5000
179}
180
181impl CanonicalConfig {
182 pub fn new(path: PathBuf) -> Self {
183 Self {
184 path,
185 map_size: default_map_size(),
186 sync_mode: SyncMode::default(),
187 stripe_count: default_stripe_count(),
188 max_readers: default_max_readers(),
189 preflight_read_only: default_true(),
190 state_iter_chunk_size: default_chunk_size(),
191 preflight_cache_enabled: default_true(),
192 preflight_cache_size: default_preflight_cache_size(),
193 preflight_cache_ttl_secs: default_preflight_cache_ttl(),
194 read_pool: ReadPoolConfig::default(),
195 lock_timeout_ms: default_lock_timeout(),
196 }
197 }
198
199 pub fn with_map_size(mut self, map_size: usize) -> Self {
200 self.map_size = map_size;
201 self
202 }
203
204 pub fn with_sync_mode(mut self, sync_mode: SyncMode) -> Self {
205 self.sync_mode = sync_mode;
206 self
207 }
208
209 pub fn with_stripe_count(mut self, stripe_count: usize) -> Self {
210 self.stripe_count = stripe_count;
211 self
212 }
213
214 pub fn with_preflight_cache(mut self, enabled: bool) -> Self {
215 self.preflight_cache_enabled = enabled;
216 self
217 }
218
219 pub fn with_preflight_cache_size(mut self, size: usize) -> Self {
220 self.preflight_cache_size = size;
221 self
222 }
223
224 pub fn with_preflight_cache_ttl(mut self, ttl_secs: u64) -> Self {
225 self.preflight_cache_ttl_secs = ttl_secs;
226 self
227 }
228
229 pub fn with_read_pool(mut self, config: ReadPoolConfig) -> Self {
231 self.read_pool = config;
232 self
233 }
234
235 pub fn with_read_pool_size(mut self, pool_size: usize) -> Self {
237 self.read_pool = ReadPoolConfig::enabled(pool_size);
238 self
239 }
240
241 pub fn with_lock_timeout(mut self, timeout_ms: u64) -> Self {
246 self.lock_timeout_ms = timeout_ms;
247 self
248 }
249}