pub struct ConnectionLimiter { /* private fields */ }Expand description
Live-connection accounting for one node’s listeners. A clone shares the
same counters, so every accept loop and every ConnectionGuard account
against one set of totals.
Implementations§
Source§impl ConnectionLimiter
impl ConnectionLimiter
Sourcepub fn new(max_connections: usize, max_connections_per_ip: usize) -> Self
pub fn new(max_connections: usize, max_connections_per_ip: usize) -> Self
A limiter for a node started with max_connections and
max_connections_per_ip.
Sourcepub const fn limits(&self) -> ConnectionLimits
pub const fn limits(&self) -> ConnectionLimits
The caps this limiter was started with.
Sourcepub fn quotas(
&self,
image: &MetadataImage,
node_id: NodeId,
listener: &str,
) -> ConnectionQuotas
pub fn quotas( &self, image: &MetadataImage, node_id: NodeId, listener: &str, ) -> ConnectionQuotas
The quotas in force on listener of node_id as of image. A value
Kafka would refuse leaves the listener’s previous value in force. A new
max.connections.per.ip.overrides set that names a host is resolved in
the background, so this never waits on DNS. It must be called within a
Tokio runtime.
Sourcepub fn creation_delay(
&self,
listener: AcceptingListener<'_>,
quotas: &ConnectionQuotas,
now: Instant,
max_delay: Duration,
) -> Duration
pub fn creation_delay( &self, listener: AcceptingListener<'_>, quotas: &ConnectionQuotas, now: Instant, max_delay: Duration, ) -> Duration
Record a new connection on listener at now against the creation
rates of quotas, and return how long the acceptor waits before it
takes the connection, at most max_delay
(quota.window.size.seconds). Kafka’s acceptor waits the throttle out
and then accepts.
Sourcepub fn refund_creation(
&self,
listener: AcceptingListener<'_>,
quotas: &ConnectionQuotas,
)
pub fn refund_creation( &self, listener: AcceptingListener<'_>, quotas: &ConnectionQuotas, )
Take back a connection Self::creation_delay recorded, for one the
peer’s ip quota throttles, as Kafka’s updateListenerMetrics
un-records it from the broker-wide and listener rates.
Sourcepub fn try_acquire_within(
&self,
ip: IpAddr,
listener: AcceptingListener<'_>,
quotas: &ConnectionQuotas,
) -> Result<ConnectionGuard, ConnectionLimit>
pub fn try_acquire_within( &self, ip: IpAddr, listener: AcceptingListener<'_>, quotas: &ConnectionQuotas, ) -> Result<ConnectionGuard, ConnectionLimit>
Try to reserve a slot for a connection from ip on listener under
quotas, which the caller resolves per accept. On success returns a
ConnectionGuard that releases the slot on drop. Lowering a cap
closes no connection that is already counted, as in Kafka’s
ConnectionQuotas.
The checks run in Kafka’s order: the listener’s cap, then, unless the listener is protected, the broker-wide cap, then the cap of the address.
§Errors
Returns the ConnectionLimit that refused the connection, and
reserves nothing.
Trait Implementations§
Source§impl Clone for ConnectionLimiter
impl Clone for ConnectionLimiter
Source§fn clone(&self) -> ConnectionLimiter
fn clone(&self) -> ConnectionLimiter
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ConnectionLimiter
impl RefUnwindSafe for ConnectionLimiter
impl Send for ConnectionLimiter
impl Sync for ConnectionLimiter
impl Unpin for ConnectionLimiter
impl UnsafeUnpin for ConnectionLimiter
impl UnwindSafe for ConnectionLimiter
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<F> FnGhost for F
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);