pub enum RetryJitter {
None,
Factor(f64),
}Expand description
Jitter strategy applied after a base crate::RetryDelay has been calculated.
Supports RetryJitter::None and symmetric RetryJitter::Factor jitter.
After randomization, delays are clamped to non-negative values.
Variants§
None
No jitter: RetryJitter::apply returns the base delay unchanged.
Factor(f64)
Symmetric relative jitter around the base delay.
The inner f64 is the relative half-span: jitter is drawn uniformly from
[-base * factor, base * factor] nanoseconds (see RetryJitter::apply).
It must be finite and lie in [0.0, 1.0] for validated configurations.
Implementations§
Source§impl RetryJitter
impl RetryJitter
Sourcepub fn none() -> RetryJitter
pub fn none() -> RetryJitter
Creates a no-jitter strategy.
§Parameters
This function has no parameters.
§Returns
A RetryJitter::None strategy.
§Errors
This function does not return errors.
Sourcepub fn factor(factor: f64) -> RetryJitter
pub fn factor(factor: f64) -> RetryJitter
Creates a symmetric relative jitter strategy.
Validation requires factor to be finite and within [0.0, 1.0].
§Parameters
factor: Relative jitter range. For example,0.2samples frombase +/- 20%.
§Returns
A RetryJitter::Factor strategy.
§Errors
This constructor does not validate factor; use RetryJitter::validate
before applying values that come from configuration or user input.
Sourcepub fn apply(&self, base: Duration) -> Duration
pub fn apply(&self, base: Duration) -> Duration
Applies jitter to a base delay.
For RetryJitter::None, returns base unchanged.
For RetryJitter::Factor, if factor <= 0.0 or base is zero, returns
base unchanged. Otherwise draws a uniform sample from the inclusive range
[-base * factor, base * factor] in nanosecond space, adds it to the base,
then clamps the result to at least zero (truncating the sum to u64
nanoseconds). When base exceeds u64::MAX nanoseconds, this function
returns base unchanged to avoid lossy downcasts.
§Parameters
base: Base delay calculated bycrate::RetryDelay.
§Returns
The jittered delay, never below zero.
§Errors
This function does not return errors.
§Panics
This function does not panic for non-finite factors. Non-finite values
gracefully fall back to returning base.
Sourcepub fn delay_for_attempt(
&self,
delay_strategy: &RetryDelay,
attempt: u32,
) -> Duration
pub fn delay_for_attempt( &self, delay_strategy: &RetryDelay, attempt: u32, ) -> Duration
Calculates and jitters the delay for one retry attempt.
This method combines base-delay strategy selection and jitter application into one step.
§Parameters
delay_strategy: Base delay strategy used to calculate the attempt delay.attempt: Failed-attempt index passed toRetryDelay::base_delay.
§Returns
The delay for the attempt after jitter is applied.
§Errors
This function does not return errors.
§Panics
This function does not panic for non-finite factors. Non-finite values gracefully fall back to returning the base delay.
Sourcepub fn validate(&self) -> Result<(), String>
pub fn validate(&self) -> Result<(), String>
Validates jitter parameters for use with executors and options.
RetryJitter::None is always valid. For RetryJitter::Factor, the factor
must be finite and satisfy 0.0 <= factor <= 1.0 (endpoints included).
§Returns
Ok(()) when the jitter configuration is usable.
§Parameters
This method has no parameters.
§Errors
Returns an error when the factor is negative, greater than 1.0, NaN,
or infinite.
Trait Implementations§
Source§impl Clone for RetryJitter
impl Clone for RetryJitter
Source§fn clone(&self) -> RetryJitter
fn clone(&self) -> RetryJitter
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 RetryJitter
impl Debug for RetryJitter
Source§impl Default for RetryJitter
impl Default for RetryJitter
Source§fn default() -> RetryJitter
fn default() -> RetryJitter
Creates the default jitter strategy.
§Returns
The value obtained by parsing crate::constants::DEFAULT_RETRY_JITTER
using RetryJitter::from_str.
§Parameters
This function has no parameters.
§Errors
This function does not return errors.
§Panics
Panics if crate::constants::DEFAULT_RETRY_JITTER is not a valid
RetryJitter string. That indicates a crate bug, not a caller mistake.
Source§impl<'de> Deserialize<'de> for RetryJitter
impl<'de> Deserialize<'de> for RetryJitter
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<RetryJitter, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<RetryJitter, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Display for RetryJitter
impl Display for RetryJitter
Source§impl FromStr for RetryJitter
impl FromStr for RetryJitter
Source§type Err = ParseError
type Err = ParseError
Source§fn from_str(s: &str) -> Result<RetryJitter, <RetryJitter as FromStr>::Err>
fn from_str(s: &str) -> Result<RetryJitter, <RetryJitter as FromStr>::Err>
s to return a value of this type. Read moreSource§impl PartialEq for RetryJitter
impl PartialEq for RetryJitter
Source§fn eq(&self, other: &RetryJitter) -> bool
fn eq(&self, other: &RetryJitter) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for RetryJitter
impl Serialize for RetryJitter
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Copy for RetryJitter
impl StructuralPartialEq for RetryJitter
Auto Trait Implementations§
impl Freeze for RetryJitter
impl RefUnwindSafe for RetryJitter
impl Send for RetryJitter
impl Sync for RetryJitter
impl Unpin for RetryJitter
impl UnsafeUnpin for RetryJitter
impl UnwindSafe for RetryJitter
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, D> IntoConfigDefault<T> for Dwhere
D: IntoValueDefault<T>,
impl<T, D> IntoConfigDefault<T> for Dwhere
D: IntoValueDefault<T>,
Source§fn into_config_default(self) -> T
fn into_config_default(self) -> T
T.Source§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
Source§impl<T> IntoValueDefault<T> for T
impl<T> IntoValueDefault<T> for T
Source§fn into_value_default(self) -> T
fn into_value_default(self) -> T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.