pub struct TransactionManager { /* private fields */ }Expand description
Manages transactions and MVCC versioning.
Implementations§
Source§impl TransactionManager
impl TransactionManager
Sourcepub fn begin(&self) -> TransactionId
pub fn begin(&self) -> TransactionId
Begins a new transaction with the default isolation level (Snapshot Isolation).
Sourcepub fn begin_with_isolation(
&self,
isolation_level: IsolationLevel,
) -> TransactionId
pub fn begin_with_isolation( &self, isolation_level: IsolationLevel, ) -> TransactionId
Begins a new transaction with the specified isolation level.
Sourcepub fn isolation_level(
&self,
transaction_id: TransactionId,
) -> Option<IsolationLevel>
pub fn isolation_level( &self, transaction_id: TransactionId, ) -> Option<IsolationLevel>
Returns the isolation level of a transaction.
Sourcepub fn record_write(
&self,
transaction_id: TransactionId,
entity: impl Into<EntityId>,
) -> Result<()>
pub fn record_write( &self, transaction_id: TransactionId, 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,
transaction_id: TransactionId,
entity: impl Into<EntityId>,
) -> Result<()>
pub fn record_read( &self, transaction_id: TransactionId, 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, transaction_id: TransactionId) -> Result<EpochId>
pub fn commit(&self, transaction_id: TransactionId) -> Result<EpochId>
Commits a transaction with conflict detection.
§Conflict Detection
-
All isolation levels: Write-write conflicts (two transactions writing to the same entity) are always detected and cause the second committer to abort.
-
Serializable only: Read-write conflicts (SSI validation) are additionally checked. If transaction T1 read an entity that another transaction T2 wrote, and T2 committed after T1 started, T1 will abort. This prevents write skew.
§Errors
Returns an error if:
- The transaction is not active
- There’s a write-write conflict with another committed transaction
- (Serializable only) There’s a read-write conflict (SSI violation)
Sourcepub fn abort(&self, transaction_id: TransactionId) -> Result<()>
pub fn abort(&self, transaction_id: TransactionId) -> Result<()>
Sourcepub fn get_write_set(
&self,
transaction_id: TransactionId,
) -> Result<HashSet<EntityId>>
pub fn get_write_set( &self, transaction_id: TransactionId, ) -> 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 reset_write_set(
&self,
transaction_id: TransactionId,
write_set: HashSet<EntityId>,
) -> Result<()>
pub fn reset_write_set( &self, transaction_id: TransactionId, write_set: HashSet<EntityId>, ) -> Result<()>
Replaces the write set of a transaction (used for savepoint rollback).
§Errors
Returns an error if the transaction is not found.
Sourcepub fn abort_all_active(&self)
pub fn abort_all_active(&self)
Aborts all active transactions.
Used during database shutdown.
Sourcepub fn state(&self, transaction_id: TransactionId) -> Option<TransactionState>
pub fn state(&self, transaction_id: TransactionId) -> Option<TransactionState>
Returns the state of a transaction.
Sourcepub fn start_epoch(&self, transaction_id: TransactionId) -> Option<EpochId>
pub fn start_epoch(&self, transaction_id: TransactionId) -> 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, transaction_id: TransactionId, epoch: EpochId)
pub fn mark_committed(&self, transaction_id: TransactionId, epoch: EpochId)
Marks a transaction as committed at a specific epoch.
Used during recovery to restore transaction state.
Sourcepub fn last_assigned_transaction_id(&self) -> Option<TransactionId>
pub fn last_assigned_transaction_id(&self) -> Option<TransactionId>
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 UnsafeUnpin 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