Skip to main content

Breaker

Trait Breaker 

Source
pub trait Breaker: Send + Sync {
    // Required methods
    fn is_available(&self, backend: &str) -> bool;
    fn record_success(&self, backend: &str);
    fn record_failure(&self, backend: &str);
}
Expand description

Object-safe interface implemented by both Mutex<CircuitBreaker> and RedisCircuitBreaker, so a consumer like crate::proxy::ReverseProxy::with_circuit_breaker can accept either breaker kind through one Arc<dyn Breaker> without a generic parameter leaking into its own type.

RedisCircuitBreaker’s Err (Redis unreachable) is treated as available — failing open, not closed. A breaker that can’t be reached is a worse single point of failure than occasionally skipping the check it exists to perform; callers who need fail-closed semantics should call RedisCircuitBreaker::is_available directly and decide for themselves, as its own docs already describe.

Required Methods§

Source

fn is_available(&self, backend: &str) -> bool

Returns true if a request should be forwarded to backend.

Source

fn record_success(&self, backend: &str)

Record a successful response for backend.

Source

fn record_failure(&self, backend: &str)

Record a failed response for backend.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl Breaker for Mutex<CircuitBreaker>

Source§

fn is_available(&self, backend: &str) -> bool

Source§

fn record_success(&self, backend: &str)

Source§

fn record_failure(&self, backend: &str)

Source§

impl<T: Breaker + ?Sized> Breaker for &T

Lets circuit_breaker::global() (which returns &'static Mutex<CircuitBreaker>, not an owned Mutex<CircuitBreaker>) be used directly as a Breaker: Arc::new(circuit_breaker::global()) then coerces to Arc<dyn Breaker>.

Source§

fn is_available(&self, backend: &str) -> bool

Source§

fn record_success(&self, backend: &str)

Source§

fn record_failure(&self, backend: &str)

Implementors§