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 data_file_cache_dir: String,
87 pub data_file_cache_capacity_mb: usize,
88 pub data_file_cache_file_capacity_mb: usize,
89 pub data_file_cache_flushers: usize,
90 pub data_file_cache_reclaimers: usize,
91 pub data_file_cache_recover_mode: foyer::RecoverMode,
92 pub data_file_cache_recover_concurrency: usize,
93 pub data_file_cache_indexer_shards: usize,
94 pub data_file_cache_compression: foyer::Compression,
95 pub data_file_cache_flush_buffer_threshold_mb: usize,
96 pub data_file_cache_fifo_probation_ratio: f64,
97 pub data_file_cache_runtime_config: foyer::RuntimeOptions,
98 pub data_file_cache_throttle: foyer::Throttle,
99
100 pub cache_refill_data_refill_levels: Vec<u32>,
101 pub cache_refill_timeout_ms: u64,
102 pub cache_refill_concurrency: usize,
103 pub cache_refill_recent_filter_layers: usize,
104 pub cache_refill_recent_filter_rotate_interval_ms: usize,
105 pub cache_refill_unit: usize,
106 pub cache_refill_threshold: f64,
107
108 pub meta_file_cache_dir: String,
109 pub meta_file_cache_capacity_mb: usize,
110 pub meta_file_cache_file_capacity_mb: usize,
111 pub meta_file_cache_flushers: usize,
112 pub meta_file_cache_reclaimers: usize,
113 pub meta_file_cache_recover_mode: foyer::RecoverMode,
114 pub meta_file_cache_recover_concurrency: usize,
115 pub meta_file_cache_indexer_shards: usize,
116 pub meta_file_cache_compression: foyer::Compression,
117 pub meta_file_cache_flush_buffer_threshold_mb: usize,
118 pub meta_file_cache_fifo_probation_ratio: f64,
119 pub meta_file_cache_runtime_config: foyer::RuntimeOptions,
120 pub meta_file_cache_throttle: foyer::Throttle,
121
122 pub backup_storage_url: String,
124 pub backup_storage_directory: String,
126 pub max_preload_wait_time_mill: u64,
128
129 pub compactor_max_sst_key_count: u64,
130 pub compactor_max_task_multiplier: f32,
131 pub compactor_max_sst_size: u64,
132 pub enable_fast_compaction: bool,
134 pub check_compaction_result: bool,
135 pub max_preload_io_retry_times: usize,
136 pub compactor_fast_max_compact_delete_ratio: u32,
137 pub compactor_fast_max_compact_task_size: u64,
138
139 pub mem_table_spill_threshold: usize,
140
141 pub compactor_concurrent_uploading_sst_count: Option<usize>,
142
143 pub compactor_max_overlap_sst_count: usize,
144
145 pub compactor_max_preload_meta_file_count: usize,
147
148 pub object_store_config: ObjectStoreConfig,
149 pub time_travel_version_cache_capacity: u64,
150}
151
152impl Default for StorageOpts {
153 fn default() -> Self {
154 let c = RwConfig::default();
155 let p = system_params_for_test();
156 let s = extract_storage_memory_config(&c);
157 Self::from((&c, &p.into(), &s))
158 }
159}
160
161impl From<(&RwConfig, &SystemParamsReader, &StorageMemoryConfig)> for StorageOpts {
162 fn from((c, p, s): (&RwConfig, &SystemParamsReader, &StorageMemoryConfig)) -> Self {
163 let mut data_file_cache_throttle = c.storage.data_file_cache.throttle.clone();
164 if data_file_cache_throttle.write_throughput.is_none() {
165 data_file_cache_throttle = data_file_cache_throttle.with_write_throughput(
166 c.storage.data_file_cache.insert_rate_limit_mb * 1024 * 1024,
167 );
168 }
169 let mut meta_file_cache_throttle = c.storage.meta_file_cache.throttle.clone();
170 if meta_file_cache_throttle.write_throughput.is_none() {
171 meta_file_cache_throttle = meta_file_cache_throttle.with_write_throughput(
172 c.storage.meta_file_cache.insert_rate_limit_mb * 1024 * 1024,
173 );
174 }
175
176 Self {
177 parallel_compact_size_mb: p.parallel_compact_size_mb(),
178 sstable_size_mb: p.sstable_size_mb(),
179 min_sstable_size_mb: c.storage.min_sstable_size_mb,
180 block_size_kb: p.block_size_kb(),
181 bloom_false_positive: p.bloom_false_positive(),
182 share_buffers_sync_parallelism: c.storage.share_buffers_sync_parallelism,
183 share_buffer_compaction_worker_threads_number: c
184 .storage
185 .share_buffer_compaction_worker_threads_number,
186 shared_buffer_capacity_mb: s.shared_buffer_capacity_mb,
187 shared_buffer_flush_ratio: c.storage.shared_buffer_flush_ratio,
188 shared_buffer_min_batch_flush_size_mb: c.storage.shared_buffer_min_batch_flush_size_mb,
189 data_directory: p.data_directory().to_owned(),
190 write_conflict_detection_enabled: c.storage.write_conflict_detection_enabled,
191 block_cache_capacity_mb: s.block_cache_capacity_mb,
192 block_cache_shard_num: s.block_cache_shard_num,
193 block_cache_eviction_config: s.block_cache_eviction_config.clone(),
194 meta_cache_capacity_mb: s.meta_cache_capacity_mb,
195 meta_cache_shard_num: s.meta_cache_shard_num,
196 meta_cache_eviction_config: s.meta_cache_eviction_config.clone(),
197 prefetch_buffer_capacity_mb: s.prefetch_buffer_capacity_mb,
198 max_cached_recent_versions_number: c.storage.max_cached_recent_versions_number,
199 max_prefetch_block_number: c.storage.max_prefetch_block_number,
200 disable_remote_compactor: c.storage.disable_remote_compactor,
201 share_buffer_upload_concurrency: c.storage.share_buffer_upload_concurrency,
202 compactor_memory_limit_mb: s.compactor_memory_limit_mb,
203 sstable_id_remote_fetch_number: c.storage.sstable_id_remote_fetch_number,
204 min_sst_size_for_streaming_upload: c.storage.min_sst_size_for_streaming_upload,
205 max_concurrent_compaction_task_number: c.storage.max_concurrent_compaction_task_number,
206 max_version_pinning_duration_sec: c.storage.max_version_pinning_duration_sec,
207 data_file_cache_dir: c.storage.data_file_cache.dir.clone(),
208 data_file_cache_capacity_mb: c.storage.data_file_cache.capacity_mb,
209 data_file_cache_file_capacity_mb: c.storage.data_file_cache.file_capacity_mb,
210 data_file_cache_flushers: c.storage.data_file_cache.flushers,
211 data_file_cache_reclaimers: c.storage.data_file_cache.reclaimers,
212 data_file_cache_recover_mode: c.storage.data_file_cache.recover_mode,
213 data_file_cache_recover_concurrency: c.storage.data_file_cache.recover_concurrency,
214 data_file_cache_indexer_shards: c.storage.data_file_cache.indexer_shards,
215 data_file_cache_compression: c.storage.data_file_cache.compression,
216 data_file_cache_flush_buffer_threshold_mb: s.block_file_cache_flush_buffer_threshold_mb,
217 data_file_cache_fifo_probation_ratio: c.storage.data_file_cache.fifo_probation_ratio,
218 data_file_cache_runtime_config: c.storage.data_file_cache.runtime_config.clone(),
219 data_file_cache_throttle,
220 meta_file_cache_dir: c.storage.meta_file_cache.dir.clone(),
221 meta_file_cache_capacity_mb: c.storage.meta_file_cache.capacity_mb,
222 meta_file_cache_file_capacity_mb: c.storage.meta_file_cache.file_capacity_mb,
223 meta_file_cache_flushers: c.storage.meta_file_cache.flushers,
224 meta_file_cache_reclaimers: c.storage.meta_file_cache.reclaimers,
225 meta_file_cache_recover_mode: c.storage.meta_file_cache.recover_mode,
226 meta_file_cache_recover_concurrency: c.storage.meta_file_cache.recover_concurrency,
227 meta_file_cache_indexer_shards: c.storage.meta_file_cache.indexer_shards,
228 meta_file_cache_compression: c.storage.meta_file_cache.compression,
229 meta_file_cache_flush_buffer_threshold_mb: s.meta_file_cache_flush_buffer_threshold_mb,
230 meta_file_cache_fifo_probation_ratio: c.storage.meta_file_cache.fifo_probation_ratio,
231 meta_file_cache_runtime_config: c.storage.meta_file_cache.runtime_config.clone(),
232 meta_file_cache_throttle,
233 cache_refill_data_refill_levels: c.storage.cache_refill.data_refill_levels.clone(),
234 cache_refill_timeout_ms: c.storage.cache_refill.timeout_ms,
235 cache_refill_concurrency: c.storage.cache_refill.concurrency,
236 cache_refill_recent_filter_layers: c.storage.cache_refill.recent_filter_layers,
237 cache_refill_recent_filter_rotate_interval_ms: c
238 .storage
239 .cache_refill
240 .recent_filter_rotate_interval_ms,
241 cache_refill_unit: c.storage.cache_refill.unit,
242 cache_refill_threshold: c.storage.cache_refill.threshold,
243 max_preload_wait_time_mill: c.storage.max_preload_wait_time_mill,
244 compact_iter_recreate_timeout_ms: c.storage.compact_iter_recreate_timeout_ms,
245
246 max_preload_io_retry_times: c.storage.max_preload_io_retry_times,
247 backup_storage_url: p.backup_storage_url().to_owned(),
248 backup_storage_directory: p.backup_storage_directory().to_owned(),
249 compactor_max_sst_key_count: c.storage.compactor_max_sst_key_count,
250 compactor_max_task_multiplier: c.storage.compactor_max_task_multiplier,
251 compactor_max_sst_size: c.storage.compactor_max_sst_size,
252 enable_fast_compaction: c.storage.enable_fast_compaction,
253 check_compaction_result: c.storage.check_compaction_result,
254 mem_table_spill_threshold: c.storage.mem_table_spill_threshold,
255 object_store_config: c.storage.object_store.clone(),
256 compactor_fast_max_compact_delete_ratio: c
257 .storage
258 .compactor_fast_max_compact_delete_ratio,
259 compactor_fast_max_compact_task_size: c.storage.compactor_fast_max_compact_task_size,
260 compactor_iter_max_io_retry_times: c.storage.compactor_iter_max_io_retry_times,
261 compactor_concurrent_uploading_sst_count: c
262 .storage
263 .compactor_concurrent_uploading_sst_count,
264 time_travel_version_cache_capacity: c.storage.time_travel_version_cache_capacity,
265 compactor_max_overlap_sst_count: c.storage.compactor_max_overlap_sst_count,
266 compactor_max_preload_meta_file_count: c.storage.compactor_max_preload_meta_file_count,
267 }
268 }
269}