consensus_config/
parameters.rs1use std::{path::PathBuf, time::Duration};
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Clone, Debug, Deserialize, Serialize)]
16pub struct Parameters {
17 #[serde(skip)]
20 pub db_path: PathBuf,
21
22 #[serde(default = "Parameters::default_leader_timeout")]
25 pub leader_timeout: Duration,
26
27 #[serde(default = "Parameters::default_min_round_delay")]
32 pub min_round_delay: Duration,
33
34 #[serde(default = "Parameters::default_max_forward_time_drift")]
36 pub max_forward_time_drift: Duration,
37
38 #[serde(default = "Parameters::default_max_blocks_per_sync")]
45 pub max_blocks_per_sync: usize,
46
47 #[serde(default = "Parameters::default_max_blocks_per_fetch")]
49 pub max_blocks_per_fetch: usize,
50
51 #[serde(default = "Parameters::default_sync_last_known_own_block_timeout")]
55 pub sync_last_known_own_block_timeout: Duration,
56
57 #[serde(default = "Parameters::default_round_prober_interval_ms")]
59 pub round_prober_interval_ms: u64,
60
61 #[serde(default = "Parameters::default_round_prober_request_timeout_ms")]
63 pub round_prober_request_timeout_ms: u64,
64
65 #[serde(default = "Parameters::default_propagation_delay_stop_proposal_threshold")]
69 pub propagation_delay_stop_proposal_threshold: u32,
70
71 #[serde(default = "Parameters::default_dag_state_cached_rounds")]
77 pub dag_state_cached_rounds: u32,
78
79 #[serde(default = "Parameters::default_commit_sync_parallel_fetches")]
82 pub commit_sync_parallel_fetches: usize,
83
84 #[serde(default = "Parameters::default_commit_sync_batch_size")]
88 pub commit_sync_batch_size: u32,
89
90 #[serde(default = "Parameters::default_commit_sync_batches_ahead")]
93 pub commit_sync_batches_ahead: usize,
94
95 #[serde(default = "TonicParameters::default")]
97 pub tonic: TonicParameters,
98
99 #[serde(default = "InternalParameters::default")]
101 pub internal: InternalParameters,
102}
103
104impl Parameters {
105 pub(crate) fn default_leader_timeout() -> Duration {
106 Duration::from_millis(200)
107 }
108
109 pub(crate) fn default_min_round_delay() -> Duration {
110 if cfg!(msim) || std::env::var("__TEST_ONLY_CONSENSUS_USE_LONG_MIN_ROUND_DELAY").is_ok() {
111 Duration::from_millis(400)
115 } else if cfg!(test) {
116 Duration::from_millis(250)
118 } else {
119 Duration::from_millis(50)
120 }
121 }
122
123 pub(crate) fn default_max_forward_time_drift() -> Duration {
124 Duration::from_millis(500)
125 }
126
127 pub(crate) fn default_max_blocks_per_sync() -> usize {
128 if cfg!(msim) {
129 4
131 } else {
132 32
133 }
134 }
135
136 pub(crate) fn default_max_blocks_per_fetch() -> usize {
137 if cfg!(msim) {
138 10
140 } else {
141 1000
142 }
143 }
144
145 pub(crate) fn default_sync_last_known_own_block_timeout() -> Duration {
146 if cfg!(msim) {
147 Duration::from_millis(500)
148 } else {
149 Duration::from_secs(5)
152 }
153 }
154
155 pub(crate) fn default_round_prober_interval_ms() -> u64 {
156 if cfg!(msim) { 1000 } else { 5000 }
157 }
158
159 pub(crate) fn default_round_prober_request_timeout_ms() -> u64 {
160 if cfg!(msim) { 800 } else { 4000 }
161 }
162
163 pub(crate) fn default_propagation_delay_stop_proposal_threshold() -> u32 {
164 if cfg!(msim) { 2 } else { 5 }
166 }
167
168 pub(crate) fn default_dag_state_cached_rounds() -> u32 {
169 if cfg!(msim) {
170 5
172 } else {
173 500
174 }
175 }
176
177 pub(crate) fn default_commit_sync_parallel_fetches() -> usize {
178 8
179 }
180
181 pub(crate) fn default_commit_sync_batch_size() -> u32 {
182 if cfg!(msim) {
183 5
185 } else {
186 100
187 }
188 }
189
190 pub(crate) fn default_commit_sync_batches_ahead() -> usize {
191 32
194 }
195}
196
197impl Default for Parameters {
198 fn default() -> Self {
199 Self {
200 db_path: PathBuf::default(),
201 leader_timeout: Parameters::default_leader_timeout(),
202 min_round_delay: Parameters::default_min_round_delay(),
203 max_forward_time_drift: Parameters::default_max_forward_time_drift(),
204 max_blocks_per_sync: Parameters::default_max_blocks_per_sync(),
205 max_blocks_per_fetch: Parameters::default_max_blocks_per_fetch(),
206 sync_last_known_own_block_timeout:
207 Parameters::default_sync_last_known_own_block_timeout(),
208 round_prober_interval_ms: Parameters::default_round_prober_interval_ms(),
209 round_prober_request_timeout_ms: Parameters::default_round_prober_request_timeout_ms(),
210 propagation_delay_stop_proposal_threshold:
211 Parameters::default_propagation_delay_stop_proposal_threshold(),
212 dag_state_cached_rounds: Parameters::default_dag_state_cached_rounds(),
213 commit_sync_parallel_fetches: Parameters::default_commit_sync_parallel_fetches(),
214 commit_sync_batch_size: Parameters::default_commit_sync_batch_size(),
215 commit_sync_batches_ahead: Parameters::default_commit_sync_batches_ahead(),
216 tonic: TonicParameters::default(),
217 internal: InternalParameters::default(),
218 }
219 }
220}
221
222#[derive(Clone, Debug, Deserialize, Serialize)]
223pub struct TonicParameters {
224 #[serde(default = "TonicParameters::default_keepalive_interval")]
228 pub keepalive_interval: Duration,
229
230 #[serde(default = "TonicParameters::default_connection_buffer_size")]
234 pub connection_buffer_size: usize,
235
236 #[serde(default = "TonicParameters::default_excessive_message_size")]
240 pub excessive_message_size: usize,
241
242 #[serde(default = "TonicParameters::default_message_size_limit")]
248 pub message_size_limit: usize,
249}
250
251impl TonicParameters {
252 fn default_keepalive_interval() -> Duration {
253 Duration::from_secs(10)
254 }
255
256 fn default_connection_buffer_size() -> usize {
257 32 << 20
258 }
259
260 fn default_excessive_message_size() -> usize {
261 16 << 20
262 }
263
264 fn default_message_size_limit() -> usize {
265 64 << 20
266 }
267}
268
269impl Default for TonicParameters {
270 fn default() -> Self {
271 Self {
272 keepalive_interval: TonicParameters::default_keepalive_interval(),
273 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
274 excessive_message_size: TonicParameters::default_excessive_message_size(),
275 message_size_limit: TonicParameters::default_message_size_limit(),
276 }
277 }
278}
279
280#[derive(Clone, Debug, Deserialize, Serialize)]
282pub struct InternalParameters {
283 #[serde(default = "InternalParameters::default_skip_equivocation_validation")]
285 pub skip_equivocation_validation: bool,
286}
287
288impl InternalParameters {
289 fn default_skip_equivocation_validation() -> bool {
290 false
291 }
292}
293
294impl Default for InternalParameters {
295 fn default() -> Self {
296 Self {
297 skip_equivocation_validation: InternalParameters::default_skip_equivocation_validation(
298 ),
299 }
300 }
301}