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 memory_allocations( &self, ) -> Result<MemoryAllocations, RuntimeDiagnosticError>

Measure all IDs with a fixed metadata read and bounded current bindings.

Reads at most 34,848 backing bytes. Never initializes stores, decodes the ledger, writes, grows memory, or advances a generation. Available before bootstrap; current declaration/range bindings are then unavailable.

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<P>( &self, declarations: &SealedDeclarationSnapshot, policy: &P, ) -> 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 pass bounded validation of the current manager header, bucket table, and extents; otherwise construction returns a typed error before the manager 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. Invalid metadata returns RuntimeConstructionError::Layout. Reopening honors the actual persisted bucket size; only fresh memory uses 128 pages.

Source

pub fn new_with_config( memory: M, config: MemoryManagerConfig, ) -> Result<Self, RuntimeConstructionError>

Construct with an explicit immutable bucket policy. Existing memory must match exactly; mismatches fail before manager initialization or writes.

Source

pub const fn memory_manager_config(&self) -> MemoryManagerConfig

Return the actual policy bound to this runtime’s sole manager.

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<RuntimeMemory<M>, RuntimeOpenError>

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

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> 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 = !

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.