Skip to main content

IoError

Enum IoError 

Source
pub enum IoError {
    BufferTooBig {
        size: u64,
        backtrace: BackTrace,
    },
    OutOfMemory {
        size: u64,
        backtrace: BackTrace,
    },
    PoolCapacityExceeded {
        size: u64,
        capacity: u64,
        in_use: u64,
        backtrace: BackTrace,
    },
    UnsupportedStrides {
        backtrace: BackTrace,
    },
    NotFound {
        backtrace: BackTrace,
        reason: Reason,
    },
    StorageHandleNotFound {
        reason: Reason,
        backtrace: BackTrace,
    },
    StorageMappingFailed {
        size: u64,
        source: Box<IoError>,
        backtrace: BackTrace,
    },
    Unknown {
        description: String,
        backtrace: BackTrace,
    },
    UnsupportedIoOperation {
        backtrace: BackTrace,
    },
}
Expand description

Error returned from create/read/write functions. Due to async execution not all errors are able to be caught, so some IO errors will still panic.

Variants§

§

BufferTooBig

Buffer size exceeds the max available

Fields

§size: u64

The size of the buffer in bytes.

§backtrace: BackTrace

The captured backtrace.

§

OutOfMemory

The device had no memory left for this allocation.

Unlike IoError::BufferTooBig (the allocation can never fit), this describes the device at one moment: pool pages whose slices have all been dropped are still resident, and the frees that would release them may not have reached the driver yet. Reclaiming and retrying is a reasonable response, which is why a storage backend must not report a driver out-of-memory as BufferTooBig: that tells every caller the allocation is hopeless when it is merely untimely.

Fields

§size: u64

The size of the failed allocation in bytes.

§backtrace: BackTrace

The captured backtrace.

§

PoolCapacityExceeded

A memory pool with a fixed capacity cap is exhausted.

Unlike IoError::BufferTooBig (the allocation can never fit), this means the working set exceeded the configured budget. Server execution paths treat it as fatal — the budget is a hard contract, so failing early beats silently growing — but callers that manage their own working set may free pool memory and retry.

Fields

§size: u64

The size of the failed reservation in bytes.

§capacity: u64

The configured pool capacity in bytes (whole pages).

§in_use: u64

Bytes currently in use in the pool.

§backtrace: BackTrace

The captured backtrace.

§

UnsupportedStrides

Strides aren’t supported for this copy operation on this runtime

Fields

§backtrace: BackTrace

The backtrace.

§

NotFound

Memory wasn’t found in the memory pool

Fields

§backtrace: BackTrace

The backtrace.

§reason: Reason

The reason the handle is invalid.

§

StorageHandleNotFound

The storage backend holds no allocation for a handle’s storage id.

One layer below IoError::NotFound: there the memory manager could not route a binding to a slice, here the routing succeeded and the allocation the slice names is gone. A handle outliving its page, or a storage id a deallocation retired, reaches the storage this way.

Fields

§reason: Reason

Which id was looked up, and in which storage.

§backtrace: BackTrace

The backtrace.

§

StorageMappingFailed

An allocation carved lazily under a DryRun could not be given real device backing when it was finally resolved.

Distinct from the same failure at reservation time, and the distinction is what a caller acts on: the memory was promised earlier, by a pass that measured a plan without paying for it, and is only now being charged for. A plan whose replay hits this was measured against more device memory than the replay has — warm the tune caches first, or measure a smaller one.

Fields

§size: u64

The size of the allocation that could not be backed, in bytes.

§source: Box<IoError>

Why the device allocation failed.

§backtrace: BackTrace

The backtrace.

§

Unknown

Unknown error happened during execution

Fields

§description: String

Details of the error

§backtrace: BackTrace

The backtrace.

§

UnsupportedIoOperation

The current IO operation is not supported

Fields

§backtrace: BackTrace

The backtrace.

Implementations§

Source§

impl IoError

Source

pub fn may_succeed_after_reclaim(&self) -> bool

Whether reclaiming memory could still make this allocation succeed.

Out of memory right now is not out of memory for good: pool pages whose slices have all been dropped are still resident, and the frees that would release them may sit in a deferred drop queue. A transient peak — a model build holding float weights while their quantized copies allocate, an autotune sample on a full device — is rescued by a reclaim and a second attempt.

A buffer larger than any page the device can hold is the exception. It never fits, so reclaiming would only spend the time.

Trait Implementations§

Source§

impl Clone for IoError

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for IoError

Source§

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

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

impl<'de> Deserialize<'de> for IoError

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for IoError

Source§

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

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

impl Error for IoError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<IoError> for ServerError

Source§

fn from(source: IoError) -> Self

Converts to this type from the input type.
Source§

impl Serialize for IoError

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

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> AnyError for T
where T: Error + Send + Sync + 'static,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<T> TuneInputs for T
where T: Clone + Send + Sync + 'static,

Source§

type At<'a> = T

The concrete input type at lifetime 'a.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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