risingwave_common/system_param/
reader.rs1use std::borrow::Borrow;
16
17use risingwave_license::LicenseKeyRef;
18use risingwave_pb::meta::PbSystemParams;
19
20use super::{ParamValue, default};
21use crate::for_all_params;
22
23pub struct ParameterInfo {
27 pub name: &'static str,
28 pub mutable: bool,
29 pub value: String,
34 pub description: &'static str,
35}
36
37macro_rules! define_system_params_read_trait {
38 ($({ $field:ident, $type:ty, $default:expr, $is_mutable:expr, $doc:literal, $($rest:tt)* },)*) => {
39 pub trait SystemParamsRead {
47 $(
48 #[doc = $doc]
49 fn $field(&self) -> <$type as ParamValue>::Borrowed<'_>;
50 )*
51
52 fn get_all(&self) -> Vec<ParameterInfo> {
54 vec![
55 $(
56 ParameterInfo {
57 name: stringify!($field),
58 mutable: $is_mutable,
59 value: self.$field().to_string(), description: $doc,
61 },
62 )*
63 ]
64 }
65 }
66 };
67}
68
69for_all_params!(define_system_params_read_trait);
70
71#[derive(Clone, PartialEq)]
76pub struct SystemParamsReader<I = PbSystemParams> {
77 inner: I,
78}
79
80macro_rules! impl_system_params_reader_debug {
83 ($({ $field:ident, $($rest:tt)* },)*) => {
84 impl<I> std::fmt::Debug for SystemParamsReader<I>
85 where
86 I: Borrow<PbSystemParams>,
87 {
88 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89 f.debug_struct("SystemParamsReader")
90 $(
91 .field(stringify!($field), &self.$field())
92 )*
93 .finish()
94 }
95 }
96 };
97}
98
99for_all_params!(impl_system_params_reader_debug);
100
101impl<I> From<I> for SystemParamsReader<I>
102where
103 I: Borrow<PbSystemParams>,
104{
105 fn from(inner: I) -> Self {
106 Self { inner }
107 }
108}
109
110impl<I> SystemParamsReader<I>
111where
112 I: Borrow<PbSystemParams>,
113{
114 pub fn new(inner: I) -> Self {
115 Self { inner }
116 }
117
118 pub fn as_ref(&self) -> SystemParamsReader<&PbSystemParams> {
120 SystemParamsReader {
121 inner: self.inner(),
122 }
123 }
124
125 fn inner(&self) -> &PbSystemParams {
126 self.inner.borrow()
127 }
128}
129
130impl<I> SystemParamsRead for SystemParamsReader<I>
135where
136 I: Borrow<PbSystemParams>,
137{
138 fn barrier_interval_ms(&self) -> u32 {
139 self.inner().barrier_interval_ms.unwrap()
140 }
141
142 fn enforce_secret(&self) -> bool {
143 self.inner()
144 .enforce_secret
145 .unwrap_or_else(default::enforce_secret)
146 }
147
148 fn checkpoint_frequency(&self) -> u64 {
149 self.inner().checkpoint_frequency.unwrap()
150 }
151
152 fn parallel_compact_size_mb(&self) -> u32 {
153 self.inner().parallel_compact_size_mb.unwrap()
154 }
155
156 fn sstable_size_mb(&self) -> u32 {
157 self.inner().sstable_size_mb.unwrap()
158 }
159
160 fn block_size_kb(&self) -> u32 {
161 self.inner().block_size_kb.unwrap()
162 }
163
164 #[expect(deprecated)]
165 fn bloom_false_positive(&self) -> f64 {
166 self.inner().bloom_false_positive.unwrap()
167 }
168
169 fn state_store(&self) -> &str {
170 self.inner().state_store.as_ref().unwrap()
171 }
172
173 fn data_directory(&self) -> &str {
174 self.inner().data_directory.as_ref().unwrap()
175 }
176
177 fn use_new_object_prefix_strategy(&self) -> bool {
178 *self
179 .inner()
180 .use_new_object_prefix_strategy
181 .as_ref()
182 .unwrap()
183 }
184
185 fn backup_storage_url(&self) -> &str {
186 self.inner().backup_storage_url.as_ref().unwrap()
187 }
188
189 fn backup_storage_directory(&self) -> &str {
190 self.inner().backup_storage_directory.as_ref().unwrap()
191 }
192
193 fn max_concurrent_creating_streaming_jobs(&self) -> u32 {
194 self.inner().max_concurrent_creating_streaming_jobs.unwrap()
195 }
196
197 fn pause_on_next_bootstrap(&self) -> bool {
198 self.inner()
199 .pause_on_next_bootstrap
200 .unwrap_or_else(default::pause_on_next_bootstrap)
201 }
202
203 fn enable_tracing(&self) -> bool {
204 self.inner()
205 .enable_tracing
206 .unwrap_or_else(default::enable_tracing)
207 }
208
209 fn license_key(&self) -> LicenseKeyRef<'_> {
210 self.inner()
211 .license_key
212 .as_deref()
213 .unwrap_or_default()
214 .into()
215 }
216
217 fn time_travel_retention_ms(&self) -> u64 {
218 self.inner()
219 .time_travel_retention_ms
220 .unwrap_or_else(default::time_travel_retention_ms)
221 }
222
223 fn per_database_isolation(&self) -> <bool as ParamValue>::Borrowed<'_> {
224 self.inner()
225 .per_database_isolation
226 .unwrap_or_else(default::per_database_isolation)
227 }
228}