1use risingwave_common::config::{
16 EvictionConfig, ObjectStoreConfig, RwConfig, StorageMemoryConfig, extract_storage_memory_config,
17};
18use risingwave_common::system_param::reader::{SystemParamsRead, SystemParamsReader};
19use risingwave_common::system_param::system_params_for_test;
20
21#[derive(Clone, Debug)]
22pub struct StorageOpts {
23 pub parallel_compact_size_mb: u32,
25 pub sstable_size_mb: u32,
27 pub min_sstable_size_mb: u32,
29 pub block_size_kb: u32,
31 pub bloom_false_positive: f64,
33 pub share_buffers_sync_parallelism: u32,
35 pub share_buffer_compaction_worker_threads_number: u32,
38 pub shared_buffer_capacity_mb: usize,
41 pub shared_buffer_flush_ratio: f32,
44 pub shared_buffer_min_batch_flush_size_mb: usize,
47 pub data_directory: String,
49 pub write_conflict_detection_enabled: bool,
51 pub block_cache_capacity_mb: usize,
53 pub block_cache_shard_num: usize,
55 pub block_cache_eviction_config: EvictionConfig,
57 pub meta_cache_capacity_mb: usize,
59 pub meta_cache_shard_num: usize,
61 pub meta_cache_eviction_config: EvictionConfig,
63 pub prefetch_buffer_capacity_mb: usize,
65
66 pub max_cached_recent_versions_number: usize,
67
68 pub max_prefetch_block_number: usize,
69
70 pub disable_remote_compactor: bool,
71 pub share_buffer_upload_concurrency: usize,
73 pub compactor_memory_limit_mb: usize,
75 pub compact_iter_recreate_timeout_ms: u64,
78 pub sstable_id_remote_fetch_number: u32,
80 pub min_sst_size_for_streaming_upload: u64,
82 pub max_concurrent_compaction_task_number: u64,
83 pub max_version_pinning_duration_sec: u64,
84 pub compactor_iter_max_io_retry_times: usize,
85
86 pub shorten_block_meta_key_threshold: Option<usize>,
88
89 pub data_file_cache_dir: String,
90 pub data_file_cache_capacity_mb: usize,
91 pub data_file_cache_file_capacity_mb: usize,
92 pub data_file_cache_flushers: usize,
93 pub data_file_cache_reclaimers: usize,
94 pub data_file_cache_recover_mode: foyer::RecoverMode,
95 pub data_file_cache_recover_concurrency: usize,
96 pub data_file_cache_indexer_shards: usize,
97 pub data_file_cache_compression: foyer::Compression,
98 pub data_file_cache_flush_buffer_threshold_mb: usize,
99 pub data_file_cache_fifo_probation_ratio: f64,
100 pub data_file_cache_blob_index_size_kb: usize,
101 pub data_file_cache_runtime_config: foyer::RuntimeOptions,
102 pub data_file_cache_throttle: foyer::Throttle,
103
104 pub cache_refill_data_refill_levels: Vec<u32>,
105 pub cache_refill_timeout_ms: u64,
106 pub cache_refill_concurrency: usize,
107 pub cache_refill_recent_filter_shards: usize,
108 pub cache_refill_recent_filter_layers: usize,
109 pub cache_refill_recent_filter_rotate_interval_ms: usize,
110 pub cache_refill_unit: usize,
111 pub cache_refill_threshold: f64,
112 pub cache_refill_skip_recent_filter: bool,
113
114 pub meta_file_cache_dir: String,
115 pub meta_file_cache_capacity_mb: usize,
116 pub meta_file_cache_file_capacity_mb: usize,
117 pub meta_file_cache_flushers: usize,
118 pub meta_file_cache_reclaimers: usize,
119 pub meta_file_cache_recover_mode: foyer::RecoverMode,
120 pub meta_file_cache_recover_concurrency: usize,
121 pub meta_file_cache_indexer_shards: usize,
122 pub meta_file_cache_compression: foyer::Compression,
123 pub meta_file_cache_flush_buffer_threshold_mb: usize,
124 pub meta_file_cache_fifo_probation_ratio: f64,
125 pub meta_file_cache_blob_index_size_kb: usize,
126 pub meta_file_cache_runtime_config: foyer::RuntimeOptions,
127 pub meta_file_cache_throttle: foyer::Throttle,
128 pub sst_skip_bloom_filter_in_serde: bool,
129
130 pub vector_file_block_size_kb: usize,
131 pub vector_block_cache_capacity_mb: usize,
132 pub vector_block_cache_shard_num: usize,
133 pub vector_block_cache_eviction_config: EvictionConfig,
134 pub vector_meta_cache_capacity_mb: usize,
135 pub vector_meta_cache_shard_num: usize,
136 pub vector_meta_cache_eviction_config: EvictionConfig,
137
138 pub backup_storage_url: String,
140 pub backup_storage_directory: String,
142 pub max_preload_wait_time_mill: u64,
144
145 pub compactor_max_sst_key_count: u64,
146 pub compactor_max_task_multiplier: f32,
147 pub compactor_max_sst_size: u64,
148 pub enable_fast_compaction: bool,
150 pub check_compaction_result: bool,
151 pub max_preload_io_retry_times: usize,
152 pub compactor_fast_max_compact_delete_ratio: u32,
153 pub compactor_fast_max_compact_task_size: u64,
154
155 pub mem_table_spill_threshold: usize,
156
157 pub compactor_concurrent_uploading_sst_count: Option<usize>,
158
159 pub compactor_max_overlap_sst_count: usize,
160
161 pub compactor_max_preload_meta_file_count: usize,
163
164 pub object_store_config: ObjectStoreConfig,
165 pub time_travel_version_cache_capacity: u64,
166
167 pub iceberg_compaction_enable_validate: bool,
168 pub iceberg_compaction_max_record_batch_rows: usize,
169 pub iceberg_compaction_write_parquet_max_row_group_rows: usize,
170 pub iceberg_compaction_min_size_per_partition_mb: u32,
171 pub iceberg_compaction_max_file_count_per_partition: u32,
172 pub iceberg_compaction_target_binpack_group_size_mb: Option<u64>,
173 pub iceberg_compaction_min_group_size_mb: Option<u64>,
174 pub iceberg_compaction_min_group_file_count: Option<usize>,
175
176 pub iceberg_compaction_task_parallelism_ratio: f32,
178 pub iceberg_compaction_enable_heuristic_output_parallelism: bool,
180 pub iceberg_compaction_max_concurrent_closes: usize,
182 pub iceberg_compaction_enable_dynamic_size_estimation: bool,
184 pub iceberg_compaction_size_estimation_smoothing_factor: f64,
186 pub iceberg_compaction_pending_parallelism_budget_multiplier: f32,
188}
189
190impl Default for StorageOpts {
191 fn default() -> Self {
192 let c = RwConfig::default();
193 let p = system_params_for_test();
194 let s = extract_storage_memory_config(&c);
195 Self::from((&c, &p.into(), &s))
196 }
197}
198
199impl From<(&RwConfig, &SystemParamsReader, &StorageMemoryConfig)> for StorageOpts {
200 fn from((c, p, s): (&RwConfig, &SystemParamsReader, &StorageMemoryConfig)) -> Self {
201 let mut data_file_cache_throttle = c.storage.data_file_cache.throttle.clone();
202 if data_file_cache_throttle.write_throughput.is_none() {
203 data_file_cache_throttle = data_file_cache_throttle.with_write_throughput(
204 c.storage.data_file_cache.insert_rate_limit_mb * 1024 * 1024,
205 );
206 }
207 let mut meta_file_cache_throttle = c.storage.meta_file_cache.throttle.clone();
208 if meta_file_cache_throttle.write_throughput.is_none() {
209 meta_file_cache_throttle = meta_file_cache_throttle.with_write_throughput(
210 c.storage.meta_file_cache.insert_rate_limit_mb * 1024 * 1024,
211 );
212 }
213
214 Self {
215 parallel_compact_size_mb: p.parallel_compact_size_mb(),
216 sstable_size_mb: p.sstable_size_mb(),
217 min_sstable_size_mb: c.storage.min_sstable_size_mb,
218 block_size_kb: p.block_size_kb(),
219 bloom_false_positive: p.bloom_false_positive(),
220 share_buffers_sync_parallelism: c.storage.share_buffers_sync_parallelism,
221 share_buffer_compaction_worker_threads_number: c
222 .storage
223 .share_buffer_compaction_worker_threads_number,
224 shared_buffer_capacity_mb: s.shared_buffer_capacity_mb,
225 shared_buffer_flush_ratio: c.storage.shared_buffer_flush_ratio,
226 shared_buffer_min_batch_flush_size_mb: c.storage.shared_buffer_min_batch_flush_size_mb,
227 data_directory: p.data_directory().to_owned(),
228 write_conflict_detection_enabled: c.storage.write_conflict_detection_enabled,
229 block_cache_capacity_mb: s.block_cache_capacity_mb,
230 block_cache_shard_num: s.block_cache_shard_num,
231 block_cache_eviction_config: s.block_cache_eviction_config.clone(),
232 meta_cache_capacity_mb: s.meta_cache_capacity_mb,
233 meta_cache_shard_num: s.meta_cache_shard_num,
234 meta_cache_eviction_config: s.meta_cache_eviction_config.clone(),
235 prefetch_buffer_capacity_mb: s.prefetch_buffer_capacity_mb,
236 max_cached_recent_versions_number: c.storage.max_cached_recent_versions_number,
237 max_prefetch_block_number: c.storage.max_prefetch_block_number,
238 disable_remote_compactor: c.storage.disable_remote_compactor,
239 share_buffer_upload_concurrency: c.storage.share_buffer_upload_concurrency,
240 compactor_memory_limit_mb: s.compactor_memory_limit_mb,
241 sstable_id_remote_fetch_number: c.storage.sstable_id_remote_fetch_number,
242 min_sst_size_for_streaming_upload: c.storage.min_sst_size_for_streaming_upload,
243 max_concurrent_compaction_task_number: c.storage.max_concurrent_compaction_task_number,
244 max_version_pinning_duration_sec: c.storage.max_version_pinning_duration_sec,
245 data_file_cache_dir: c.storage.data_file_cache.dir.clone(),
246 data_file_cache_capacity_mb: c.storage.data_file_cache.capacity_mb,
247 data_file_cache_file_capacity_mb: c.storage.data_file_cache.file_capacity_mb,
248 data_file_cache_flushers: c.storage.data_file_cache.flushers,
249 data_file_cache_reclaimers: c.storage.data_file_cache.reclaimers,
250 data_file_cache_recover_mode: c.storage.data_file_cache.recover_mode,
251 data_file_cache_recover_concurrency: c.storage.data_file_cache.recover_concurrency,
252 data_file_cache_indexer_shards: c.storage.data_file_cache.indexer_shards,
253 data_file_cache_compression: c.storage.data_file_cache.compression,
254 data_file_cache_flush_buffer_threshold_mb: s.block_file_cache_flush_buffer_threshold_mb,
255 data_file_cache_fifo_probation_ratio: c.storage.data_file_cache.fifo_probation_ratio,
256 data_file_cache_blob_index_size_kb: c.storage.data_file_cache.blob_index_size_kb,
257 data_file_cache_runtime_config: c.storage.data_file_cache.runtime_config.clone(),
258 data_file_cache_throttle,
259 meta_file_cache_dir: c.storage.meta_file_cache.dir.clone(),
260 meta_file_cache_capacity_mb: c.storage.meta_file_cache.capacity_mb,
261 meta_file_cache_file_capacity_mb: c.storage.meta_file_cache.file_capacity_mb,
262 meta_file_cache_flushers: c.storage.meta_file_cache.flushers,
263 meta_file_cache_reclaimers: c.storage.meta_file_cache.reclaimers,
264 meta_file_cache_recover_mode: c.storage.meta_file_cache.recover_mode,
265 meta_file_cache_recover_concurrency: c.storage.meta_file_cache.recover_concurrency,
266 meta_file_cache_indexer_shards: c.storage.meta_file_cache.indexer_shards,
267 meta_file_cache_compression: c.storage.meta_file_cache.compression,
268 meta_file_cache_flush_buffer_threshold_mb: s.meta_file_cache_flush_buffer_threshold_mb,
269 meta_file_cache_fifo_probation_ratio: c.storage.meta_file_cache.fifo_probation_ratio,
270 meta_file_cache_blob_index_size_kb: c.storage.meta_file_cache.blob_index_size_kb,
271 meta_file_cache_runtime_config: c.storage.meta_file_cache.runtime_config.clone(),
272 meta_file_cache_throttle,
273 sst_skip_bloom_filter_in_serde: c.storage.sst_skip_bloom_filter_in_serde,
274 cache_refill_data_refill_levels: c.storage.cache_refill.data_refill_levels.clone(),
275 cache_refill_timeout_ms: c.storage.cache_refill.timeout_ms,
276 cache_refill_concurrency: c.storage.cache_refill.concurrency,
277 cache_refill_recent_filter_shards: c.storage.cache_refill.recent_filter_shards,
278 cache_refill_recent_filter_layers: c.storage.cache_refill.recent_filter_layers,
279 cache_refill_recent_filter_rotate_interval_ms: c
280 .storage
281 .cache_refill
282 .recent_filter_rotate_interval_ms,
283 cache_refill_unit: c.storage.cache_refill.unit,
284 cache_refill_threshold: c.storage.cache_refill.threshold,
285 cache_refill_skip_recent_filter: c.storage.cache_refill.skip_recent_filter,
286 max_preload_wait_time_mill: c.storage.max_preload_wait_time_mill,
287 compact_iter_recreate_timeout_ms: c.storage.compact_iter_recreate_timeout_ms,
288
289 max_preload_io_retry_times: c.storage.max_preload_io_retry_times,
290 backup_storage_url: p.backup_storage_url().to_owned(),
291 backup_storage_directory: p.backup_storage_directory().to_owned(),
292 compactor_max_sst_key_count: c.storage.compactor_max_sst_key_count,
293 compactor_max_task_multiplier: c.storage.compactor_max_task_multiplier,
294 compactor_max_sst_size: c.storage.compactor_max_sst_size,
295 enable_fast_compaction: c.storage.enable_fast_compaction,
296 check_compaction_result: c.storage.check_compaction_result,
297 mem_table_spill_threshold: c.storage.mem_table_spill_threshold,
298 object_store_config: c.storage.object_store.clone(),
299 compactor_fast_max_compact_delete_ratio: c
300 .storage
301 .compactor_fast_max_compact_delete_ratio,
302 compactor_fast_max_compact_task_size: c.storage.compactor_fast_max_compact_task_size,
303 compactor_iter_max_io_retry_times: c.storage.compactor_iter_max_io_retry_times,
304 shorten_block_meta_key_threshold: c.storage.shorten_block_meta_key_threshold,
305 compactor_concurrent_uploading_sst_count: c
306 .storage
307 .compactor_concurrent_uploading_sst_count,
308 time_travel_version_cache_capacity: c.storage.time_travel_version_cache_capacity,
309 compactor_max_overlap_sst_count: c.storage.compactor_max_overlap_sst_count,
310 compactor_max_preload_meta_file_count: c.storage.compactor_max_preload_meta_file_count,
311
312 iceberg_compaction_enable_validate: c.storage.iceberg_compaction_enable_validate,
313 iceberg_compaction_max_record_batch_rows: c
314 .storage
315 .iceberg_compaction_max_record_batch_rows,
316 iceberg_compaction_write_parquet_max_row_group_rows: c
317 .storage
318 .iceberg_compaction_write_parquet_max_row_group_rows,
319 iceberg_compaction_min_size_per_partition_mb: c
320 .storage
321 .iceberg_compaction_min_size_per_partition_mb,
322 iceberg_compaction_max_file_count_per_partition: c
323 .storage
324 .iceberg_compaction_max_file_count_per_partition,
325 iceberg_compaction_task_parallelism_ratio: c
326 .storage
327 .iceberg_compaction_task_parallelism_ratio,
328 iceberg_compaction_enable_heuristic_output_parallelism: c
329 .storage
330 .iceberg_compaction_enable_heuristic_output_parallelism,
331 iceberg_compaction_max_concurrent_closes: c
332 .storage
333 .iceberg_compaction_max_concurrent_closes,
334 iceberg_compaction_enable_dynamic_size_estimation: c
335 .storage
336 .iceberg_compaction_enable_dynamic_size_estimation,
337 iceberg_compaction_size_estimation_smoothing_factor: c
338 .storage
339 .iceberg_compaction_size_estimation_smoothing_factor,
340 iceberg_compaction_pending_parallelism_budget_multiplier: c
341 .storage
342 .iceberg_compaction_pending_parallelism_budget_multiplier,
343 iceberg_compaction_target_binpack_group_size_mb: c
344 .storage
345 .iceberg_compaction_target_binpack_group_size_mb,
346 iceberg_compaction_min_group_size_mb: c.storage.iceberg_compaction_min_group_size_mb,
347 iceberg_compaction_min_group_file_count: c
348 .storage
349 .iceberg_compaction_min_group_file_count,
350 vector_file_block_size_kb: c.storage.vector_file_block_size_kb,
351 vector_block_cache_capacity_mb: s.vector_block_cache_capacity_mb,
352 vector_block_cache_shard_num: s.vector_block_cache_shard_num,
353 vector_block_cache_eviction_config: s.vector_block_cache_eviction_config.clone(),
354 vector_meta_cache_capacity_mb: s.vector_meta_cache_capacity_mb,
355 vector_meta_cache_shard_num: s.vector_meta_cache_shard_num,
356 vector_meta_cache_eviction_config: s.vector_meta_cache_eviction_config.clone(),
357 }
358 }
359}