Struct cnidarium::Storage

source ·
pub struct Storage(/* private fields */);
Expand description

A handle for a storage instance, backed by RocksDB.

The handle is cheaply clonable; all clones share the same backing data store.

Implementations§

source§

impl Storage

source

pub async fn load(path: PathBuf, default_prefixes: Vec<String>) -> Result<Self>

Loads a storage instance from the given path, initializing it if necessary.

source

pub async fn init(path: PathBuf, prefixes: Vec<String>) -> Result<Self>

Initializes a new storage instance at the given path. Takes a list of default prefixes to initialize the storage configuration with. Here is a high-level overview of the initialization process:

  1. Create a new RocksDB instance at the given path.
  2. Read the prefix list and create a [SubstoreConfig] for each prefix.
  3. Create a new [MultistoreConfig] from supplied prefixes.
  4. Initialize the substore cache with the latest version of each substore.
  5. Spawn a dispatcher task that forwards new snapshots to subscribers.
source

pub fn latest_version(&self) -> Version

Returns the latest version (block height) of the tree recorded by the Storage.

If the tree is empty and has not been initialized, returns u64::MAX.

source

pub fn subscribe(&self) -> Receiver<Snapshot>

Returns a [watch::Receiver] that can be used to subscribe to new state versions.

source

pub fn subscribe_changes(&self) -> Receiver<(Version, Arc<Cache>)>

Returns a [watch::Receiver] that can be used to subscribe to state changes.

source

pub fn latest_snapshot(&self) -> Snapshot

Returns a new Snapshot on top of the latest version of the tree.

source

pub fn snapshot(&self, version: Version) -> Option<Snapshot>

Fetches the Snapshot corresponding to the supplied jmt::Version from the [SnapshotCache]. Returns None if no match was found.

source

pub async fn prepare_commit( &self, delta: StateDelta<Snapshot> ) -> Result<StagedWriteBatch>

Prepares a commit for the provided StateDelta, returning a StagedWriteBatch. The batch can be committed to the database using the Storage::commit_batch method.

source

pub async fn commit(&self, delta: StateDelta<Snapshot>) -> Result<RootHash>

Commits the provided StateDelta to persistent storage as the latest version of the chain state.

source

pub fn commit_batch(&self, batch: StagedWriteBatch) -> Result<RootHash>

Commits the supplied StagedWriteBatch to persistent storage.

§Migrations

In the case of chain state migrations we need to commit the new state without incrementing the version. If perform_migration is true the snapshot will not be written to the snapshot cache, and no subscribers will be notified. Substore versions will not be updated.

source

pub async fn commit_in_place( &self, delta: StateDelta<Snapshot> ) -> Result<RootHash>

Available on crate feature migration only.

Commit the provided StateDelta to persistent storage without increasing the version of the chain state, and skips the snapshot cache update.

source

pub async fn release(self)

Shuts down the database and the dispatcher task, and waits for all resources to be reclaimed. Panics if there are still outstanding references to the Inner storage.

Trait Implementations§

source§

impl AsRef<Storage> for TempStorage

source§

fn as_ref(&self) -> &Storage

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Clone for Storage

source§

fn clone(&self) -> Storage

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Storage

source§

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

Formats the value using the given formatter. 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> 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> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

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.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

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

impl<T> Same for T

§

type Output = T

Should always be Self
source§

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

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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