pub struct SnapshotContext {
pub snapshot: Snapshot,
pub manager: Arc<SnapshotManager>,
pub own_xids: HashSet<u64>,
pub requires_index_fallback: bool,
}Expand description
Snapshot + manager pair used for read-path visibility checks.
The manager is needed in addition to the snapshot because aborted
state mutates after the snapshot is captured — a ROLLBACK by a
committed-at-capture-time writer must still hide its tuples. Keeping
the Arc around is O(pointer) and the RwLock reads on is_aborted
are cheap (HashSet lookup under a parking_lot read guard).
own_xids (Phase 2.3.2e) lists the xids belonging to the current
connection’s transaction — the parent xid plus open and released
savepoint sub-xids. The visibility rule promotes rows stamped with
these xids to “always visible (unless aborted)” so the writer sees
its own nested-savepoint writes even though their xids exceed
snapshot.xid.
Fields§
§snapshot: Snapshot§manager: Arc<SnapshotManager>§own_xids: HashSet<u64>§requires_index_fallback: boolTrait Implementations§
Source§impl Clone for SnapshotContext
impl Clone for SnapshotContext
Source§fn clone(&self) -> SnapshotContext
fn clone(&self) -> SnapshotContext
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SnapshotContext
impl !RefUnwindSafe for SnapshotContext
impl Send for SnapshotContext
impl Sync for SnapshotContext
impl Unpin for SnapshotContext
impl UnsafeUnpin for SnapshotContext
impl !UnwindSafe for SnapshotContext
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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 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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request