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
100impl Parameters {
101 pub(crate) fn default_leader_timeout() -> Duration {
102 Duration::from_millis(200)
103 }
104
105 pub(crate) fn default_min_round_delay() -> Duration {
106 if cfg!(msim) || std::env::var("__TEST_ONLY_CONSENSUS_USE_LONG_MIN_ROUND_DELAY").is_ok() {
107 Duration::from_millis(400)
111 } else if cfg!(test) {
112 Duration::from_millis(250)
114 } else {
115 Duration::from_millis(50)
116 }
117 }
118
119 pub(crate) fn default_max_forward_time_drift() -> Duration {
120 Duration::from_millis(500)
121 }
122
123 pub(crate) fn default_max_blocks_per_sync() -> usize {
124 if cfg!(msim) {
125 4
127 } else {
128 32
129 }
130 }
131
132 pub(crate) fn default_max_blocks_per_fetch() -> usize {
133 if cfg!(msim) {
134 10
136 } else {
137 1000
138 }
139 }
140
141 pub(crate) fn default_sync_last_known_own_block_timeout() -> Duration {
142 if cfg!(msim) {
143 Duration::from_millis(500)
144 } else {
145 Duration::from_secs(5)
148 }
149 }
150
151 pub(crate) fn default_round_prober_interval_ms() -> u64 {
152 if cfg!(msim) { 1000 } else { 5000 }
153 }
154
155 pub(crate) fn default_round_prober_request_timeout_ms() -> u64 {
156 if cfg!(msim) { 800 } else { 4000 }
157 }
158
159 pub(crate) fn default_propagation_delay_stop_proposal_threshold() -> u32 {
160 if cfg!(msim) { 2 } else { 5 }
162 }
163
164 pub(crate) fn default_dag_state_cached_rounds() -> u32 {
165 if cfg!(msim) {
166 5
168 } else {
169 500
170 }
171 }
172
173 pub(crate) fn default_commit_sync_parallel_fetches() -> usize {
174 8
175 }
176
177 pub(crate) fn default_commit_sync_batch_size() -> u32 {
178 if cfg!(msim) {
179 5
181 } else {
182 100
183 }
184 }
185
186 pub(crate) fn default_commit_sync_batches_ahead() -> usize {
187 32
190 }
191}
192
193impl Default for Parameters {
194 fn default() -> Self {
195 Self {
196 db_path: PathBuf::default(),
197 leader_timeout: Parameters::default_leader_timeout(),
198 min_round_delay: Parameters::default_min_round_delay(),
199 max_forward_time_drift: Parameters::default_max_forward_time_drift(),
200 max_blocks_per_sync: Parameters::default_max_blocks_per_sync(),
201 max_blocks_per_fetch: Parameters::default_max_blocks_per_fetch(),
202 sync_last_known_own_block_timeout:
203 Parameters::default_sync_last_known_own_block_timeout(),
204 round_prober_interval_ms: Parameters::default_round_prober_interval_ms(),
205 round_prober_request_timeout_ms: Parameters::default_round_prober_request_timeout_ms(),
206 propagation_delay_stop_proposal_threshold:
207 Parameters::default_propagation_delay_stop_proposal_threshold(),
208 dag_state_cached_rounds: Parameters::default_dag_state_cached_rounds(),
209 commit_sync_parallel_fetches: Parameters::default_commit_sync_parallel_fetches(),
210 commit_sync_batch_size: Parameters::default_commit_sync_batch_size(),
211 commit_sync_batches_ahead: Parameters::default_commit_sync_batches_ahead(),
212 tonic: TonicParameters::default(),
213 }
214 }
215}
216
217#[derive(Clone, Debug, Deserialize, Serialize)]
218pub struct TonicParameters {
219 #[serde(default = "TonicParameters::default_keepalive_interval")]
223 pub keepalive_interval: Duration,
224
225 #[serde(default = "TonicParameters::default_connection_buffer_size")]
229 pub connection_buffer_size: usize,
230
231 #[serde(default = "TonicParameters::default_excessive_message_size")]
235 pub excessive_message_size: usize,
236
237 #[serde(default = "TonicParameters::default_message_size_limit")]
243 pub message_size_limit: usize,
244}
245
246impl TonicParameters {
247 fn default_keepalive_interval() -> Duration {
248 Duration::from_secs(10)
249 }
250
251 fn default_connection_buffer_size() -> usize {
252 32 << 20
253 }
254
255 fn default_excessive_message_size() -> usize {
256 16 << 20
257 }
258
259 fn default_message_size_limit() -> usize {
260 64 << 20
261 }
262}
263
264impl Default for TonicParameters {
265 fn default() -> Self {
266 Self {
267 keepalive_interval: TonicParameters::default_keepalive_interval(),
268 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
269 excessive_message_size: TonicParameters::default_excessive_message_size(),
270 message_size_limit: TonicParameters::default_message_size_limit(),
271 }
272 }
273}