consensus_config/
parameters.rs1use std::{path::PathBuf, time::Duration};
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Deserialize, Serialize)]
19pub struct Parameters {
20 #[serde(skip)]
24 pub db_path: PathBuf,
25
26 #[serde(default = "Parameters::default_leader_timeout")]
29 pub leader_timeout: Duration,
30
31 #[serde(default = "Parameters::default_min_round_delay")]
37 pub min_round_delay: Duration,
38
39 #[serde(default = "Parameters::default_max_forward_time_drift")]
42 pub max_forward_time_drift: Duration,
43
44 #[serde(default = "Parameters::default_max_blocks_per_fetch")]
46 pub max_blocks_per_fetch: usize,
47
48 #[serde(default = "Parameters::default_max_blocks_per_sync")]
51 pub max_blocks_per_sync: usize,
52
53 #[serde(default = "Parameters::default_sync_last_known_own_block_timeout")]
58 pub sync_last_known_own_block_timeout: Duration,
59
60 #[serde(default = "Parameters::default_round_prober_interval_ms")]
62 pub round_prober_interval_ms: u64,
63
64 #[serde(default = "Parameters::default_round_prober_request_timeout_ms")]
66 pub round_prober_request_timeout_ms: u64,
67
68 #[serde(default = "Parameters::default_propagation_delay_stop_proposal_threshold")]
73 pub propagation_delay_stop_proposal_threshold: u32,
74
75 #[serde(default = "Parameters::default_dag_state_cached_rounds")]
81 pub dag_state_cached_rounds: u32,
82
83 #[serde(default = "Parameters::default_commit_sync_parallel_fetches")]
86 pub commit_sync_parallel_fetches: usize,
87
88 #[serde(default = "Parameters::default_commit_sync_batch_size")]
92 pub commit_sync_batch_size: u32,
93
94 #[serde(default = "Parameters::default_commit_sync_batches_ahead")]
97 pub commit_sync_batches_ahead: usize,
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(250)
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)
116 } else if cfg!(test) {
117 Duration::from_millis(250)
119 } else {
120 Duration::from_millis(50)
121 }
122 }
123
124 pub(crate) fn default_max_forward_time_drift() -> Duration {
125 Duration::from_millis(500)
126 }
127
128 pub(crate) fn default_max_blocks_per_fetch() -> usize {
129 if cfg!(msim) {
130 10
132 } else {
133 1000
134 }
135 }
136
137 pub(crate) fn default_max_blocks_per_sync() -> usize {
138 if cfg!(msim) { 4 } else { 32 }
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)
149 }
150 }
151
152 pub(crate) fn default_round_prober_interval_ms() -> u64 {
153 if cfg!(msim) { 1000 } else { 5000 }
154 }
155
156 pub(crate) fn default_round_prober_request_timeout_ms() -> u64 {
157 if cfg!(msim) { 800 } else { 4000 }
158 }
159
160 pub(crate) fn default_propagation_delay_stop_proposal_threshold() -> u32 {
161 if cfg!(msim) { 2 } else { 5 }
163 }
164
165 pub(crate) fn default_dag_state_cached_rounds() -> u32 {
166 if cfg!(msim) {
167 5
169 } else {
170 500
171 }
172 }
173
174 pub(crate) fn default_commit_sync_parallel_fetches() -> usize {
175 8
176 }
177
178 pub(crate) fn default_commit_sync_batch_size() -> u32 {
179 if cfg!(msim) {
180 5
182 } else {
183 100
184 }
185 }
186
187 pub(crate) fn default_commit_sync_batches_ahead() -> usize {
188 32
192 }
193}
194
195impl Default for Parameters {
196 fn default() -> Self {
197 Self {
198 db_path: PathBuf::default(),
199 leader_timeout: Parameters::default_leader_timeout(),
200 min_round_delay: Parameters::default_min_round_delay(),
201 max_forward_time_drift: Parameters::default_max_forward_time_drift(),
202 max_blocks_per_fetch: Parameters::default_max_blocks_per_fetch(),
203 max_blocks_per_sync: Parameters::default_max_blocks_per_sync(),
204 sync_last_known_own_block_timeout:
205 Parameters::default_sync_last_known_own_block_timeout(),
206 round_prober_interval_ms: Parameters::default_round_prober_interval_ms(),
207 round_prober_request_timeout_ms: Parameters::default_round_prober_request_timeout_ms(),
208 propagation_delay_stop_proposal_threshold:
209 Parameters::default_propagation_delay_stop_proposal_threshold(),
210 dag_state_cached_rounds: Parameters::default_dag_state_cached_rounds(),
211 commit_sync_parallel_fetches: Parameters::default_commit_sync_parallel_fetches(),
212 commit_sync_batch_size: Parameters::default_commit_sync_batch_size(),
213 commit_sync_batches_ahead: Parameters::default_commit_sync_batches_ahead(),
214 tonic: TonicParameters::default(),
215 }
216 }
217}
218
219#[derive(Clone, Debug, Deserialize, Serialize)]
220pub struct TonicParameters {
221 #[serde(default = "TonicParameters::default_keepalive_interval")]
225 pub keepalive_interval: Duration,
226
227 #[serde(default = "TonicParameters::default_connection_buffer_size")]
231 pub connection_buffer_size: usize,
232
233 #[serde(default = "TonicParameters::default_excessive_message_size")]
237 pub excessive_message_size: usize,
238
239 #[serde(default = "TonicParameters::default_message_size_limit")]
245 pub message_size_limit: usize,
246}
247
248impl TonicParameters {
249 fn default_keepalive_interval() -> Duration {
250 Duration::from_secs(5)
251 }
252
253 fn default_connection_buffer_size() -> usize {
254 32 << 20
255 }
256
257 fn default_excessive_message_size() -> usize {
258 16 << 20
259 }
260
261 fn default_message_size_limit() -> usize {
262 64 << 20
263 }
264}
265
266impl Default for TonicParameters {
267 fn default() -> Self {
268 Self {
269 keepalive_interval: TonicParameters::default_keepalive_interval(),
270 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
271 excessive_message_size: TonicParameters::default_excessive_message_size(),
272 message_size_limit: TonicParameters::default_message_size_limit(),
273 }
274 }
275}