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 = "AnemoParameters::default")]
97 pub anemo: AnemoParameters,
98
99 #[serde(default = "TonicParameters::default")]
101 pub tonic: TonicParameters,
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 anemo: AnemoParameters::default(),
217 tonic: TonicParameters::default(),
218 }
219 }
220}
221
222#[derive(Clone, Debug, Deserialize, Serialize)]
223pub struct AnemoParameters {
224 #[serde(default = "AnemoParameters::default_excessive_message_size")]
229 pub excessive_message_size: usize,
230}
231
232impl AnemoParameters {
233 fn default_excessive_message_size() -> usize {
234 8 << 20
235 }
236}
237
238impl Default for AnemoParameters {
239 fn default() -> Self {
240 Self {
241 excessive_message_size: AnemoParameters::default_excessive_message_size(),
242 }
243 }
244}
245
246#[derive(Clone, Debug, Deserialize, Serialize)]
247pub struct TonicParameters {
248 #[serde(default = "TonicParameters::default_keepalive_interval")]
252 pub keepalive_interval: Duration,
253
254 #[serde(default = "TonicParameters::default_connection_buffer_size")]
258 pub connection_buffer_size: usize,
259
260 #[serde(default = "TonicParameters::default_excessive_message_size")]
264 pub excessive_message_size: usize,
265
266 #[serde(default = "TonicParameters::default_message_size_limit")]
272 pub message_size_limit: usize,
273}
274
275impl TonicParameters {
276 fn default_keepalive_interval() -> Duration {
277 Duration::from_secs(10)
278 }
279
280 fn default_connection_buffer_size() -> usize {
281 32 << 20
282 }
283
284 fn default_excessive_message_size() -> usize {
285 16 << 20
286 }
287
288 fn default_message_size_limit() -> usize {
289 64 << 20
290 }
291}
292
293impl Default for TonicParameters {
294 fn default() -> Self {
295 Self {
296 keepalive_interval: TonicParameters::default_keepalive_interval(),
297 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
298 excessive_message_size: TonicParameters::default_excessive_message_size(),
299 message_size_limit: TonicParameters::default_message_size_limit(),
300 }
301 }
302}