pub struct TransactionManager { /* private fields */ }Expand description
Manages transactions and MVCC versioning.
Implementations§
Source§impl TransactionManager
impl TransactionManager
Sourcepub fn record_write(
&self,
tx_id: TxId,
entity: impl Into<EntityId>,
) -> Result<()>
pub fn record_write( &self, tx_id: TxId, entity: impl Into<EntityId>, ) -> Result<()>
Records a write operation for the transaction.
§Errors
Returns an error if the transaction is not active.
Sourcepub fn record_read(
&self,
tx_id: TxId,
entity: impl Into<EntityId>,
) -> Result<()>
pub fn record_read( &self, tx_id: TxId, entity: impl Into<EntityId>, ) -> Result<()>
Records a read operation for the transaction (for serializable isolation).
§Errors
Returns an error if the transaction is not active.
Sourcepub fn commit(&self, tx_id: TxId) -> Result<EpochId>
pub fn commit(&self, tx_id: TxId) -> Result<EpochId>
Commits a transaction with conflict detection.
§Errors
Returns an error if:
- The transaction is not active
- There’s a write-write conflict with another committed transaction
Sourcepub fn get_write_set(&self, tx_id: TxId) -> Result<HashSet<EntityId>>
pub fn get_write_set(&self, tx_id: TxId) -> Result<HashSet<EntityId>>
Returns the write set of a transaction.
This returns a copy of the entities written by this transaction, used for rollback to discard uncommitted versions.
Sourcepub fn abort_all_active(&self)
pub fn abort_all_active(&self)
Aborts all active transactions.
Used during database shutdown.
Sourcepub fn start_epoch(&self, tx_id: TxId) -> Option<EpochId>
pub fn start_epoch(&self, tx_id: TxId) -> Option<EpochId>
Returns the start epoch of a transaction.
Sourcepub fn current_epoch(&self) -> EpochId
pub fn current_epoch(&self) -> EpochId
Returns the current epoch.
Sourcepub fn min_active_epoch(&self) -> EpochId
pub fn min_active_epoch(&self) -> EpochId
Returns the minimum epoch that must be preserved for active transactions.
This is used for garbage collection - versions visible at this epoch must be preserved.
Sourcepub fn active_count(&self) -> usize
pub fn active_count(&self) -> usize
Returns the number of active transactions.
Sourcepub fn gc(&self) -> usize
pub fn gc(&self) -> usize
Cleans up completed transactions that are no longer needed for conflict detection.
A committed transaction’s write set must be preserved until all transactions that started before its commit have completed. This ensures write-write conflict detection works correctly.
Returns the number of transactions cleaned up.
Sourcepub fn mark_committed(&self, tx_id: TxId, epoch: EpochId)
pub fn mark_committed(&self, tx_id: TxId, epoch: EpochId)
Marks a transaction as committed at a specific epoch.
Used during recovery to restore transaction state.
Sourcepub fn last_assigned_tx_id(&self) -> Option<TxId>
pub fn last_assigned_tx_id(&self) -> Option<TxId>
Returns the last assigned transaction ID.
Returns None if no transactions have been started yet.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for TransactionManager
impl !RefUnwindSafe for TransactionManager
impl Send for TransactionManager
impl Sync for TransactionManager
impl Unpin for TransactionManager
impl UnwindSafe for TransactionManager
Blanket Implementations§
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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