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_sync_last_known_own_block_timeout")]
53 pub sync_last_known_own_block_timeout: Duration,
54
55 #[serde(default = "Parameters::default_round_prober_interval_ms")]
57 pub round_prober_interval_ms: u64,
58
59 #[serde(default = "Parameters::default_round_prober_request_timeout_ms")]
61 pub round_prober_request_timeout_ms: u64,
62
63 #[serde(default = "Parameters::default_propagation_delay_stop_proposal_threshold")]
68 pub propagation_delay_stop_proposal_threshold: u32,
69
70 #[serde(default = "Parameters::default_dag_state_cached_rounds")]
76 pub dag_state_cached_rounds: u32,
77
78 #[serde(default = "Parameters::default_commit_sync_parallel_fetches")]
81 pub commit_sync_parallel_fetches: usize,
82
83 #[serde(default = "Parameters::default_commit_sync_batch_size")]
87 pub commit_sync_batch_size: u32,
88
89 #[serde(default = "Parameters::default_commit_sync_batches_ahead")]
92 pub commit_sync_batches_ahead: usize,
93
94 #[serde(default = "TonicParameters::default")]
96 pub tonic: TonicParameters,
97}
98
99impl Parameters {
100 pub(crate) fn default_leader_timeout() -> Duration {
101 Duration::from_millis(250)
102 }
103
104 pub(crate) fn default_min_round_delay() -> Duration {
105 if cfg!(msim) || std::env::var("__TEST_ONLY_CONSENSUS_USE_LONG_MIN_ROUND_DELAY").is_ok() {
106 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_fetch() -> usize {
124 if cfg!(msim) {
125 10
127 } else {
128 1000
129 }
130 }
131
132 pub(crate) fn default_sync_last_known_own_block_timeout() -> Duration {
133 if cfg!(msim) {
134 Duration::from_millis(500)
135 } else {
136 Duration::from_secs(5)
140 }
141 }
142
143 pub(crate) fn default_round_prober_interval_ms() -> u64 {
144 if cfg!(msim) { 1000 } else { 5000 }
145 }
146
147 pub(crate) fn default_round_prober_request_timeout_ms() -> u64 {
148 if cfg!(msim) { 800 } else { 4000 }
149 }
150
151 pub(crate) fn default_propagation_delay_stop_proposal_threshold() -> u32 {
152 if cfg!(msim) { 2 } else { 5 }
154 }
155
156 pub(crate) fn default_dag_state_cached_rounds() -> u32 {
157 if cfg!(msim) {
158 5
160 } else {
161 500
162 }
163 }
164
165 pub(crate) fn default_commit_sync_parallel_fetches() -> usize {
166 8
167 }
168
169 pub(crate) fn default_commit_sync_batch_size() -> u32 {
170 if cfg!(msim) {
171 5
173 } else {
174 100
175 }
176 }
177
178 pub(crate) fn default_commit_sync_batches_ahead() -> usize {
179 32
183 }
184}
185
186impl Default for Parameters {
187 fn default() -> Self {
188 Self {
189 db_path: PathBuf::default(),
190 leader_timeout: Parameters::default_leader_timeout(),
191 min_round_delay: Parameters::default_min_round_delay(),
192 max_forward_time_drift: Parameters::default_max_forward_time_drift(),
193 max_blocks_per_fetch: Parameters::default_max_blocks_per_fetch(),
194 sync_last_known_own_block_timeout:
195 Parameters::default_sync_last_known_own_block_timeout(),
196 round_prober_interval_ms: Parameters::default_round_prober_interval_ms(),
197 round_prober_request_timeout_ms: Parameters::default_round_prober_request_timeout_ms(),
198 propagation_delay_stop_proposal_threshold:
199 Parameters::default_propagation_delay_stop_proposal_threshold(),
200 dag_state_cached_rounds: Parameters::default_dag_state_cached_rounds(),
201 commit_sync_parallel_fetches: Parameters::default_commit_sync_parallel_fetches(),
202 commit_sync_batch_size: Parameters::default_commit_sync_batch_size(),
203 commit_sync_batches_ahead: Parameters::default_commit_sync_batches_ahead(),
204 tonic: TonicParameters::default(),
205 }
206 }
207}
208
209#[derive(Clone, Debug, Deserialize, Serialize)]
210pub struct TonicParameters {
211 #[serde(default = "TonicParameters::default_keepalive_interval")]
215 pub keepalive_interval: Duration,
216
217 #[serde(default = "TonicParameters::default_connection_buffer_size")]
221 pub connection_buffer_size: usize,
222
223 #[serde(default = "TonicParameters::default_excessive_message_size")]
227 pub excessive_message_size: usize,
228
229 #[serde(default = "TonicParameters::default_message_size_limit")]
235 pub message_size_limit: usize,
236}
237
238impl TonicParameters {
239 fn default_keepalive_interval() -> Duration {
240 Duration::from_secs(5)
241 }
242
243 fn default_connection_buffer_size() -> usize {
244 32 << 20
245 }
246
247 fn default_excessive_message_size() -> usize {
248 16 << 20
249 }
250
251 fn default_message_size_limit() -> usize {
252 64 << 20
253 }
254}
255
256impl Default for TonicParameters {
257 fn default() -> Self {
258 Self {
259 keepalive_interval: TonicParameters::default_keepalive_interval(),
260 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
261 excessive_message_size: TonicParameters::default_excessive_message_size(),
262 message_size_limit: TonicParameters::default_message_size_limit(),
263 }
264 }
265}