Skip to main content

MemoryGuard

Struct MemoryGuard 

Source
pub struct MemoryGuard<M: MemoryMetrics> {
    pub(crate) state: GuardState<M>,
}
Expand description

Guard representing a slice of reserved memory.

Fields§

§state: GuardState<M>

Implementations§

Source§

impl<M: MemoryMetrics> MemoryGuard<M>

Source

pub(crate) fn unlimited(quota: UnlimitedMemoryQuota<M>, bytes: u64) -> Self

Source

pub(crate) fn limited( quota: MemoryQuota<M>, permit: OwnedSemaphorePermit, ) -> Self

Source

pub fn granted_bytes(&self) -> u64

Returns granted quota in bytes.

Source

pub async fn acquire_additional(&mut self, bytes: u64) -> Result<()>

Acquires additional memory, waiting if necessary until enough is available.

On success, merges the new memory into this guard.

§Errors
  • Returns error if requested bytes would exceed the manager’s total limit
  • Returns error if the semaphore is unexpectedly closed
Source

pub fn try_acquire_additional(&mut self, bytes: u64) -> bool

Tries to acquire additional memory without waiting.

On success, merges the new memory into this guard and returns true. On failure, returns false and leaves this guard unchanged.

Source

pub async fn acquire_additional_with_policy( &mut self, bytes: u64, policy: OnExhaustedPolicy, ) -> Result<()>

Acquires additional memory based on the given policy.

  • For OnExhaustedPolicy::Wait: Waits up to the timeout duration for memory to become available
  • For OnExhaustedPolicy::Fail: Returns immediately if memory is not available
§Errors
  • MemoryLimitExceeded: Requested bytes would exceed the total limit (both policies), or memory is currently exhausted (Fail policy only)
  • MemoryAcquireTimeout: Timeout elapsed while waiting for memory (Wait policy only)
  • MemorySemaphoreClosed: The internal semaphore is unexpectedly closed (rare, indicates system issue)
Source

pub fn release_partial(&mut self, bytes: u64) -> bool

Releases a portion of granted memory back to the pool before the guard is dropped.

Returns true if the release succeeds or is a no-op; false if the request exceeds granted.

Trait Implementations§

Source§

impl<M: MemoryMetrics> Debug for MemoryGuard<M>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<M: MemoryMetrics> Drop for MemoryGuard<M>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<M> Freeze for MemoryGuard<M>
where M: Freeze,

§

impl<M> !RefUnwindSafe for MemoryGuard<M>

§

impl<M> Send for MemoryGuard<M>

§

impl<M> Sync for MemoryGuard<M>

§

impl<M> Unpin for MemoryGuard<M>
where M: Unpin,

§

impl<M> UnsafeUnpin for MemoryGuard<M>
where M: UnsafeUnpin,

§

impl<M> !UnwindSafe for MemoryGuard<M>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more