pub struct InstallSnapshotBackoffPolicy {
pub max_retries: usize,
pub timeout_ms: u64,
pub base_delay_ms: u64,
pub max_delay_ms: u64,
pub per_chunk_timeout_ms: u64,
pub min_timeout_ms: u64,
pub max_timeout_ms: u64,
pub between_chunk_timeout_ms: u64,
pub push_failure_alert_threshold: u32,
pub push_backoff_max_delay_ms: u64,
}Expand description
Configuration for exponential backoff retry strategy
Fields§
§max_retries: usizeMaximum number of retries (0 means unlimited retries)
timeout_ms: u64Single operation timeout (unit: milliseconds)
base_delay_ms: u64Backoff base (unit: milliseconds)
max_delay_ms: u64Maximum backoff time (unit: milliseconds)
per_chunk_timeout_ms: u64Timeout per chunk during transfer (milliseconds)
min_timeout_ms: u64Minimum overall timeout for snapshot RPC (milliseconds)
max_timeout_ms: u64Maximum overall timeout for snapshot RPC (milliseconds)
between_chunk_timeout_ms: u64Timeout between chunks on receiver side (milliseconds)
push_failure_alert_threshold: u32Number of consecutive leader-initiated snapshot push failures before emitting an error-level alert (tracing::error! + metrics counter).
Protecting the leader’s replication throughput is the highest priority. A value of 5 avoids alert storms from brief network partitions while still surfacing persistent peer failures (disk full, crashed node) within seconds.
push_backoff_max_delay_ms: u64Maximum backoff interval between consecutive leader-initiated snapshot push attempts for the same peer (milliseconds).
Intentionally higher than max_delay_ms (chunk-level RPC retry cap):
once the chunk-level retries are exhausted, the leader should wait a full
30 s before re-attempting the entire transfer. This prevents a permanently
unreachable peer from consuming I/O bandwidth on every heartbeat cycle and
starving healthy followers’ AppendEntries. Leader protection is the
highest priority.
Implementations§
Source§impl InstallSnapshotBackoffPolicy
impl InstallSnapshotBackoffPolicy
Sourcepub fn validate(&self, policy_name: &str) -> Result<()>
pub fn validate(&self, policy_name: &str) -> Result<()>
Validates snapshot backoff policy parameters
§Errors
Returns Error::InvalidConfig when:
- Inherited backoff parameters fail validation (see BackoffPolicy)
- Timeouts for snapshot chunks/transfers are invalid
- Snapshot RPC timeout constraints are violated
Trait Implementations§
Source§impl Clone for InstallSnapshotBackoffPolicy
impl Clone for InstallSnapshotBackoffPolicy
Source§fn clone(&self) -> InstallSnapshotBackoffPolicy
fn clone(&self) -> InstallSnapshotBackoffPolicy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for InstallSnapshotBackoffPolicy
impl Debug for InstallSnapshotBackoffPolicy
Source§impl Default for InstallSnapshotBackoffPolicy
impl Default for InstallSnapshotBackoffPolicy
Source§fn default() -> InstallSnapshotBackoffPolicy
fn default() -> InstallSnapshotBackoffPolicy
Source§impl<'de> Deserialize<'de> for InstallSnapshotBackoffPolicy
impl<'de> Deserialize<'de> for InstallSnapshotBackoffPolicy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Copy for InstallSnapshotBackoffPolicy
Auto Trait Implementations§
impl Freeze for InstallSnapshotBackoffPolicy
impl RefUnwindSafe for InstallSnapshotBackoffPolicy
impl Send for InstallSnapshotBackoffPolicy
impl Sync for InstallSnapshotBackoffPolicy
impl Unpin for InstallSnapshotBackoffPolicy
impl UnsafeUnpin for InstallSnapshotBackoffPolicy
impl UnwindSafe for InstallSnapshotBackoffPolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request