Skip to main content

StorageTransactionLog

Struct StorageTransactionLog 

Source
pub struct StorageTransactionLog { /* private fields */ }
Expand description

ACID-like transaction log with commit, rollback, and replay support.

Committed transactions are stored in a bounded VecDeque. When the deque exceeds max_committed, the oldest committed entry is evicted to bound memory usage. Active transactions live in a separate HashMap so lookup is O(1).

All timestamps are caller-supplied logical clocks (e.g. milliseconds since epoch), so the struct itself is Send + Sync and has no hidden I/O.

Implementations§

Source§

impl StorageTransactionLog

Source

pub fn new(max_committed: usize) -> Self

Create a new transaction log.

max_committed controls how many committed Transaction records are retained for replay. A value of 0 means no committed records are retained (replay will always return an empty list).

Source

pub fn begin(&mut self, now: u64) -> TransactionId

Begin a new transaction and return its TransactionId.

now is the caller-supplied logical timestamp for started_at.

Source

pub fn append( &mut self, tx_id: TransactionId, op: TxOperation, ) -> Result<(), TxError>

Append an operation to an active transaction.

§Errors
Source

pub fn commit(&mut self, tx_id: TransactionId, now: u64) -> Result<(), TxError>

Commit a transaction, moving it to the committed deque.

If the deque has reached max_committed, the oldest entry is evicted before the new one is pushed.

§Errors
Source

pub fn rollback( &mut self, tx_id: TransactionId, now: u64, ) -> Result<Vec<TxOperation>, TxError>

Roll back a transaction, returning its operations in reverse order.

The caller is expected to use the returned operations to undo changes (e.g. restore prev_value for Put/Delete entries).

§Errors
Source

pub fn abort(&mut self, tx_id: TransactionId, now: u64) -> Result<(), TxError>

Abort a transaction without providing rollback data to the caller.

Unlike rollback, this method discards the operations and does not return them. Use this when the transaction state is already inconsistent or when rollback undo is handled elsewhere.

§Errors
Source

pub fn replay_committed(&self, since_id: TransactionId) -> Vec<&Transaction>

Returns all committed transactions whose id is strictly greater than since_id, in ascending id order.

This is the primary replay API: supply TransactionId(0) to replay from the beginning of the retained window.

Source

pub fn get_transaction(&self, tx_id: TransactionId) -> Option<&Transaction>

Look up a transaction by id.

Searches the active map first, then the committed deque. Returns None if the transaction has been evicted or was never created.

Source

pub fn active_transactions(&self) -> Vec<&Transaction>

Returns references to all currently active (in-flight) transactions, sorted by id for deterministic ordering.

Source

pub fn active_count(&self) -> usize

Number of currently active transactions.

Source

pub fn committed_count_total(&self) -> u64

Cumulative count of all committed transactions since this log was created.

Source

pub fn rolled_back_count_total(&self) -> u64

Cumulative count of all rolled-back transactions since this log was created.

Source

pub fn stats(&self) -> TxStats

Returns a statistics snapshot.

total_operations counts the sum of operations across all committed transactions currently held in the deque (not across all historical transactions).

Source

pub fn committed_retained(&self) -> usize

Returns the number of committed transactions currently in the deque.

Source

pub fn max_committed(&self) -> usize

Returns the configured maximum number of retained committed transactions.

Source

pub fn next_transaction_id(&self) -> TransactionId

Returns the id that will be assigned to the next transaction.

Source

pub fn drain_committed(&mut self) -> Vec<Transaction>

Drain all committed transactions from the deque and return them.

This can be used to persist committed transactions to durable storage.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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