struct MetricsStoreOverlay {
overlay: SledDbOverlayPtr,
db: Db,
}
Expand description
The MetricsStoreOverlay
provides write operations for managing metrics in conjunction with the
underlying sled database. It supports inserting new [GasData
] into the stored accumulated metrics,
adding transaction gas data, and reverting metric changes after a specified height.
Fields§
§overlay: SledDbOverlayPtr
Pointer to the overlay used for accessing and performing database write operations to the store.
db: Db
Pointer managed by the MetricsStore
that references the sled instance on which the overlay operates.
Implementations§
Source§impl MetricsStoreOverlay
impl MetricsStoreOverlay
Sourcepub fn new(db: Db) -> Result<Self>
pub fn new(db: Db) -> Result<Self>
Instantiate a MetricsStoreOverlay
over the provided [SledDbPtr
] instance.
Sourcepub fn insert_gas_metrics(
&self,
block_height: u32,
block_timestamp: &Timestamp,
tx_hashes: &[TransactionHash],
tx_gas_data: &[GasData],
) -> Result<GasMetricsKey>
pub fn insert_gas_metrics( &self, block_height: u32, block_timestamp: &Timestamp, tx_hashes: &[TransactionHash], tx_gas_data: &[GasData], ) -> Result<GasMetricsKey>
Adds the provided [TransactionHash
] and [GasData
] pairs to the accumulated GasMetrics
in the store’s SLED_GAS_METRICS_BY_HEIGHT_TREE
and SLED_GAS_METRICS_TREE
trees, while
also storing transaction gas data in the SLED_TX_GAS_DATA_TREE
, committing all changes upon success.
This function retrieves the latest recorded metrics, updates them with the new gas data, and
stores the accumulated result. It uses the provided block_timestamp
to create a normalied time-sequenced
GasMetricsKey
for metrics storage. The block_height
is used as a key to store metrics by height
which are used to handle chain reorganizations. After updating the aggregate metrics, it stores
the transaction gas data for each transaction in the block.
Returns the created GasMetricsKey
that can be used to retrieve the metric upon success.
Sourcefn insert_tx_gas_data(
&self,
tx_hashes: &[TransactionHash],
gas_data: &[GasData],
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<()>
fn insert_tx_gas_data( &self, tx_hashes: &[TransactionHash], gas_data: &[GasData], lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<()>
Inserts [TransactionHash
] and [GasData
] pairs into the store’s SLED_TX_GAS_DATA_TREE
,
committing the changes upon success.
This function locks the overlay, verifies that the tx_hashes and gas_data arrays have matching lengths, then inserts them into the store while handling serialization and potential errors. Returns a successful result upon success.
Sourcepub fn reset_gas_metrics(&self, height: u32) -> Result<()>
pub fn reset_gas_metrics(&self, height: u32) -> Result<()>
Resets gas metrics in the SLED_GAS_METRICS_TREE
and SLED_GAS_METRICS_BY_HEIGHT_TREE
to a specified block height, undoing all entries after provided height and committing the
changes upon success.
This function first obtains a lock on the overlay, then reverts changes by calling
Self::revert_by_height_metrics
and Self::revert_metrics
. Upon successful revert,
all modifications made after the specified height are permanently reverted.
Sourcefn insert(
&self,
keys: &[GasMetricsKey],
metrics: &[GasMetrics],
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<()>
fn insert( &self, keys: &[GasMetricsKey], metrics: &[GasMetrics], lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<()>
Inserts GasMetricsKey
and GasMetrics
pairs into the store’s SLED_GAS_METRICS_TREE
.
This function verifies that the provided keys and metrics arrays have matching lengths, then inserts each pair while handling serialization. Returns a successful result if all insertions are completed without errors.
Sourcefn insert_by_height(
&self,
heights: &[u32],
metrics: &[GasMetrics],
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<()>
fn insert_by_height( &self, heights: &[u32], metrics: &[GasMetrics], lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<()>
Inserts provided u32
height and GasMetrics
pairs into the store’s SLED_GAS_METRICS_BY_HEIGHT_TREE
.
This function verifies matching lengths of provided heights and metrics arrays, and inserts each pair while handling serialization and errors. Returns a successful result if all insertions are completed without errors.
Sourcefn revert_metrics(&self, lock: &mut MutexGuard<'_, SledDbOverlay>) -> Result<()>
fn revert_metrics(&self, lock: &mut MutexGuard<'_, SledDbOverlay>) -> Result<()>
This function reverts gas metric entries in the SLED_GAS_METRICS_TREE
to align
with the latest metrics state in the SLED_GAS_METRICS_BY_HEIGHT_TREE
.
It first determines the target timestamp to revert to based on the latest entry in the by_height tree timestamp. Then, it iteratively removes entries from the main metrics tree that are newer than the target timestamp. Once all that is complete, it adds the latest metrics by height to the main metrics tree, returning a successful result if revert processes without error.
Sourcefn revert_by_height_metrics(
&self,
height: u32,
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<()>
fn revert_by_height_metrics( &self, height: u32, lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<()>
Reverts gas metric entries from SLED_GAS_METRICS_BY_HEIGHT_TREE
to provided height
.
This function iterates through the entries in gas metrics by height tree and removes all entries
with heights greater than the specified height
, effectively reverting all gas metrics beyond that point.
Sourcefn get_last(
&self,
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<Option<(GasMetricsKey, GasMetrics)>>
fn get_last( &self, lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<Option<(GasMetricsKey, GasMetrics)>>
Fetches the most recent gas metrics from SLED_GAS_METRICS_TREE
, returning an option
containing a metrics key GasMetricsKey
and GasMetrics
pair, or None
if no metrics exist.
Sourcefn get_last_by_height(
&self,
lock: &mut MutexGuard<'_, SledDbOverlay>,
) -> Result<Option<(u32, GasMetrics)>>
fn get_last_by_height( &self, lock: &mut MutexGuard<'_, SledDbOverlay>, ) -> Result<Option<(u32, GasMetrics)>>
Fetches the most recent gas metrics from SLED_GAS_METRICS_BY_HEIGHT_TREE
, returning an option
containing a height u32
and GasMetrics
pair, or None
if no metrics exist.
Auto Trait Implementations§
impl Freeze for MetricsStoreOverlay
impl !RefUnwindSafe for MetricsStoreOverlay
impl Send for MetricsStoreOverlay
impl Sync for MetricsStoreOverlay
impl Unpin for MetricsStoreOverlay
impl !UnwindSafe for MetricsStoreOverlay
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.