Skip to main content

MemoryRuntime

Struct MemoryRuntime 

Source
pub struct MemoryRuntime<M: Memory> { /* private fields */ }
Expand description

MemoryRuntime

Canonical owner of allocation bootstrap state for one backing memory.

The runtime owns its MemoryManager, allocation-ledger cell, bootstrap lifecycle, committed allocation capability, opens, and diagnostics. Static linked-program declarations are supplied separately as one immutable SealedDeclarationSnapshot.

M needs only Memory. The runtime does not require the backing memory to be Send, Sync, Clone, or 'static.

Implementations§

Source§

impl<M: Memory> MemoryRuntime<M>

Source

pub fn diagnostic_export( &self, ) -> Result<DiagnosticExport, RuntimeDiagnosticError>

Export this runtime’s recovered ledger and live virtual-memory sizes.

Source

pub fn commit_recovery_diagnostic( &self, ) -> Result<CommitStoreDiagnostic, RuntimeDiagnosticError>

Diagnose protected commit recovery from this runtime’s ledger memory.

This operation is available before bootstrap when the stable-cell envelope is readable or the ledger memory is empty.

Source

pub fn doctor_report( &self, declarations: &SealedDeclarationSnapshot, ) -> MemoryRuntimeDoctorReport

Build preflight and lifecycle diagnostics for this runtime.

Source§

impl<M: Memory> MemoryRuntime<M>

Source

pub fn new(memory: M) -> Result<Self, RuntimeConstructionError>

Construct an unbootstrapped runtime without overwriting foreign memory.

Empty backing memory is initialized as an ic_stable_structures::MemoryManager. Nonempty memory must already contain the current MemoryManager magic and layout version; otherwise construction returns a typed error before MemoryManager::init can write its header or allocation table. A pre-grown blank memory is nonempty and is therefore rejected rather than assumed disposable.

§Errors

Returns RuntimeConstructionError::ForeignMemory for nonempty memory without MemoryManager magic, or RuntimeConstructionError::UnsupportedMemoryManagerVersion when the magic is recognized but the layout version is not current.

Source

pub const fn is_bootstrapped(&self) -> bool

Return whether this runtime has published committed allocation authority.

Source

pub fn bootstrap<P: RuntimeBootstrapPolicy>( &mut self, declarations: &SealedDeclarationSnapshot, policy: &P, ) -> Result<&CommittedAllocations, RuntimeBootstrapError<P::Error>>

Bootstrap this backing memory from one immutable declaration snapshot.

Recovery, policy evaluation, staging, persistence, and capability publication are local to this runtime. A repeated call is idempotent only when the sealed declaration snapshot and RuntimeBootstrapPolicy::runtime_bootstrap_identity match the successful bootstrap. A mismatch returns a typed error without advancing the durable generation or re-evaluating policy.

Source

pub const fn committed_allocations( &self, ) -> Result<&CommittedAllocations, RuntimeOpenError>

Borrow this runtime’s committed allocation-open capability.

Source

pub fn open_memory( &self, stable_key: &str, expected_id: u8, ) -> Result<VirtualMemory<M>, RuntimeOpenError>

Open this runtime’s committed memory by stable key and expected ID.

Auto Trait Implementations§

§

impl<M> !Freeze for MemoryRuntime<M>

§

impl<M> !RefUnwindSafe for MemoryRuntime<M>

§

impl<M> !Send for MemoryRuntime<M>

§

impl<M> !Sync for MemoryRuntime<M>

§

impl<M> !UnwindSafe for MemoryRuntime<M>

§

impl<M> Unpin for MemoryRuntime<M>

§

impl<M> UnsafeUnpin for MemoryRuntime<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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.