Skip to main content

SqliteShardStore

Struct SqliteShardStore 

Source
pub struct SqliteShardStore<C, H, const SHARD_HEIGHT: u8> { /* private fields */ }
Expand description

An implementation of ShardStore backed by an SQLite database.

Trait Implementations§

Source§

impl<'conn, 'a: 'conn, H: HashSer, const SHARD_HEIGHT: u8> ShardStore for SqliteShardStore<&'a Transaction<'conn>, H, SHARD_HEIGHT>

Source§

type H = H

The type used for leaves and nodes in the tree.
Source§

type CheckpointId = BlockHeight

The type used to identify checkpointed positions in the tree.
Source§

type Error = Error

The error type for operations on this store.
Source§

fn get_shard( &self, shard_root: Address, ) -> Result<Option<LocatedPrunableTree<Self::H>>, Self::Error>

Returns the subtree at the given root address, if any such subtree exists.
Source§

fn last_shard( &self, ) -> Result<Option<LocatedPrunableTree<Self::H>>, Self::Error>

Returns the subtree containing the maximum inserted leaf position.
Source§

fn put_shard( &mut self, subtree: LocatedPrunableTree<Self::H>, ) -> Result<(), Self::Error>

Inserts or replaces the subtree having the same root address as the provided tree. Read more
Source§

fn get_shard_roots(&self) -> Result<Vec<Address>, Self::Error>

Returns the vector of addresses corresponding to the roots of subtrees stored in this store.
Source§

fn truncate_shards(&mut self, shard_index: u64) -> Result<(), Self::Error>

Removes subtrees from the underlying store having root addresses at indices greater than or equal to that of the specified index.
Source§

fn get_cap(&self) -> Result<PrunableTree<Self::H>, Self::Error>

A tree that is used to cache the known roots of subtrees in the “cap” - the top part of the tree, which contains parent nodes produced by hashing the roots of the individual shards. Nodes in the cap have levels in the range SHARD_HEIGHT..DEPTH. Note that the cap may be sparse, in the same way that individual shards may be sparse.
Source§

fn put_cap(&mut self, cap: PrunableTree<Self::H>) -> Result<(), Self::Error>

Persists the provided cap to the data store.
Source§

fn min_checkpoint_id(&self) -> Result<Option<Self::CheckpointId>, Self::Error>

Returns the identifier for the checkpoint with the lowest associated position value.
Source§

fn max_checkpoint_id(&self) -> Result<Option<Self::CheckpointId>, Self::Error>

Returns the identifier for the checkpoint with the highest associated position value.
Source§

fn add_checkpoint( &mut self, checkpoint_id: Self::CheckpointId, checkpoint: Checkpoint, ) -> Result<(), Self::Error>

Adds a checkpoint to the data store.
Source§

fn checkpoint_count(&self) -> Result<usize, Self::Error>

Returns the number of checkpoints maintained by the data store
Source§

fn get_checkpoint_at_depth( &self, checkpoint_depth: usize, ) -> Result<Option<(Self::CheckpointId, Checkpoint)>, Self::Error>

Returns the id and position of the checkpoint at the specified depth, if it exists. Read more
Source§

fn get_checkpoint( &self, checkpoint_id: &Self::CheckpointId, ) -> Result<Option<Checkpoint>, Self::Error>

Returns the checkpoint corresponding to the specified checkpoint identifier.
Source§

fn with_checkpoints<F>( &mut self, limit: usize, callback: F, ) -> Result<(), Self::Error>
where F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,

Iterates in checkpoint ID order over the first limit checkpoints, applying the given callback to each.
Source§

fn for_each_checkpoint<F>( &self, limit: usize, callback: F, ) -> Result<(), Self::Error>
where F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,

Calls the given callback for each checkpoint in CheckpointId order. This is essentially the immutable version of with_checkpoints.
Source§

fn update_checkpoint_with<F>( &mut self, checkpoint_id: &Self::CheckpointId, update: F, ) -> Result<bool, Self::Error>
where F: Fn(&mut Checkpoint) -> Result<(), Self::Error>,

Update the checkpoint having the given identifier by mutating it with the provided function, and persist the updated checkpoint to the data store. Read more
Source§

fn remove_checkpoint( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes a checkpoint from the data store. Read more
Source§

fn add_retained_checkpoint( &mut self, checkpoint_id: Self::CheckpointId, ) -> Result<(), Self::Error>

Adds the given checkpoint identifier to the set of checkpoints that must be retained when pruning excess checkpoints. Read more
Source§

fn remove_retained_checkpoint( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes the given checkpoint identifier from the set of retained checkpoints, allowing it to be pruned normally. Has no effect if the identifier is not in the retention set.
Source§

fn retained_checkpoints( &self, ) -> Result<BTreeSet<Self::CheckpointId>, Self::Error>

Returns the set of checkpoint identifiers that have been marked for retention via ShardStore::add_retained_checkpoint.
Source§

fn truncate_checkpoints_retaining( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes checkpoints with identifiers greater than to the given identifier, and removes mark removal metadata from the specified checkpoint.
Source§

impl<H: HashSer, const SHARD_HEIGHT: u8> ShardStore for SqliteShardStore<Connection, H, SHARD_HEIGHT>

Source§

type H = H

The type used for leaves and nodes in the tree.
Source§

type CheckpointId = BlockHeight

The type used to identify checkpointed positions in the tree.
Source§

type Error = Error

The error type for operations on this store.
Source§

fn get_shard( &self, shard_root: Address, ) -> Result<Option<LocatedPrunableTree<Self::H>>, Self::Error>

Returns the subtree at the given root address, if any such subtree exists.
Source§

fn last_shard( &self, ) -> Result<Option<LocatedPrunableTree<Self::H>>, Self::Error>

Returns the subtree containing the maximum inserted leaf position.
Source§

fn put_shard( &mut self, subtree: LocatedPrunableTree<Self::H>, ) -> Result<(), Self::Error>

Inserts or replaces the subtree having the same root address as the provided tree. Read more
Source§

fn get_shard_roots(&self) -> Result<Vec<Address>, Self::Error>

Returns the vector of addresses corresponding to the roots of subtrees stored in this store.
Source§

fn truncate_shards(&mut self, shard_index: u64) -> Result<(), Self::Error>

Removes subtrees from the underlying store having root addresses at indices greater than or equal to that of the specified index.
Source§

fn get_cap(&self) -> Result<PrunableTree<Self::H>, Self::Error>

A tree that is used to cache the known roots of subtrees in the “cap” - the top part of the tree, which contains parent nodes produced by hashing the roots of the individual shards. Nodes in the cap have levels in the range SHARD_HEIGHT..DEPTH. Note that the cap may be sparse, in the same way that individual shards may be sparse.
Source§

fn put_cap(&mut self, cap: PrunableTree<Self::H>) -> Result<(), Self::Error>

Persists the provided cap to the data store.
Source§

fn min_checkpoint_id(&self) -> Result<Option<Self::CheckpointId>, Self::Error>

Returns the identifier for the checkpoint with the lowest associated position value.
Source§

fn max_checkpoint_id(&self) -> Result<Option<Self::CheckpointId>, Self::Error>

Returns the identifier for the checkpoint with the highest associated position value.
Source§

fn add_checkpoint( &mut self, checkpoint_id: Self::CheckpointId, checkpoint: Checkpoint, ) -> Result<(), Self::Error>

Adds a checkpoint to the data store.
Source§

fn checkpoint_count(&self) -> Result<usize, Self::Error>

Returns the number of checkpoints maintained by the data store
Source§

fn get_checkpoint_at_depth( &self, checkpoint_depth: usize, ) -> Result<Option<(Self::CheckpointId, Checkpoint)>, Self::Error>

Returns the id and position of the checkpoint at the specified depth, if it exists. Read more
Source§

fn get_checkpoint( &self, checkpoint_id: &Self::CheckpointId, ) -> Result<Option<Checkpoint>, Self::Error>

Returns the checkpoint corresponding to the specified checkpoint identifier.
Source§

fn with_checkpoints<F>( &mut self, limit: usize, callback: F, ) -> Result<(), Self::Error>
where F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,

Iterates in checkpoint ID order over the first limit checkpoints, applying the given callback to each.
Source§

fn for_each_checkpoint<F>( &self, limit: usize, callback: F, ) -> Result<(), Self::Error>
where F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,

Calls the given callback for each checkpoint in CheckpointId order. This is essentially the immutable version of with_checkpoints.
Source§

fn update_checkpoint_with<F>( &mut self, checkpoint_id: &Self::CheckpointId, update: F, ) -> Result<bool, Self::Error>
where F: Fn(&mut Checkpoint) -> Result<(), Self::Error>,

Update the checkpoint having the given identifier by mutating it with the provided function, and persist the updated checkpoint to the data store. Read more
Source§

fn remove_checkpoint( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes a checkpoint from the data store. Read more
Source§

fn add_retained_checkpoint( &mut self, checkpoint_id: Self::CheckpointId, ) -> Result<(), Self::Error>

Adds the given checkpoint identifier to the set of checkpoints that must be retained when pruning excess checkpoints. Read more
Source§

fn remove_retained_checkpoint( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes the given checkpoint identifier from the set of retained checkpoints, allowing it to be pruned normally. Has no effect if the identifier is not in the retention set.
Source§

fn retained_checkpoints( &self, ) -> Result<BTreeSet<Self::CheckpointId>, Self::Error>

Returns the set of checkpoint identifiers that have been marked for retention via ShardStore::add_retained_checkpoint.
Source§

fn truncate_checkpoints_retaining( &mut self, checkpoint_id: &Self::CheckpointId, ) -> Result<(), Self::Error>

Removes checkpoints with identifiers greater than to the given identifier, and removes mark removal metadata from the specified checkpoint.

Auto Trait Implementations§

§

impl<C, H, const SHARD_HEIGHT: u8> Freeze for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: Freeze,

§

impl<C, H, const SHARD_HEIGHT: u8> RefUnwindSafe for SqliteShardStore<C, H, SHARD_HEIGHT>

§

impl<C, H, const SHARD_HEIGHT: u8> Send for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: Send, H: Send,

§

impl<C, H, const SHARD_HEIGHT: u8> Sync for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: Sync, H: Sync,

§

impl<C, H, const SHARD_HEIGHT: u8> Unpin for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: Unpin, H: Unpin,

§

impl<C, H, const SHARD_HEIGHT: u8> UnsafeUnpin for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: UnsafeUnpin,

§

impl<C, H, const SHARD_HEIGHT: u8> UnwindSafe for SqliteShardStore<C, H, SHARD_HEIGHT>
where C: UnwindSafe, H: UnwindSafe,

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> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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.
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