Skip to main content

EmbeddedTransactor

Struct EmbeddedTransactor 

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

A serialized, in-process transactor. The log append is the commit point.

Implementations§

Source§

impl EmbeddedTransactor

Source

pub fn recover( schema: Schema, log: Arc<dyn TransactionLog>, ) -> Result<Self, TransactError>

Recovers a transactor by replaying the durable log exactly once.

§Errors

Returns an error when the durable log cannot be replayed.

Source

pub fn recover_from( base: Db, log: Arc<dyn TransactionLog>, ) -> Result<Self, TransactError>

Recovers from an empty base database value (schema plus naming) by replaying the durable log exactly once.

§Errors

Returns an error when the durable log cannot be replayed.

Source

pub async fn recover_from_async( base: Db, log: Arc<dyn TransactionLog>, ) -> Result<Self, TransactError>

Recovers a transactor through the log’s asynchronous storage path.

§Errors

Returns an error when the durable log cannot be replayed.

Source

pub fn recover_from_snapshot( snapshot: Db, next_entity_id: u64, last_tx_instant: i64, log: Arc<dyn TransactionLog>, ) -> Result<Self, TransactError>

Recovers from a published current-state snapshot plus the log tail, replaying only transactions after the snapshot’s basis instead of the whole history — so open and restart cost scale with the tail, not the database’s age.

snapshot is the current value at snapshot.basis_t() (typically Db::from_current_snapshot materialized from the published EAVT index). next_entity_id and last_tx_instant are the allocator and transaction-time high-water marks recorded in the DbRoot at publication (DbRoot::next_entity_id / DbRoot::last_tx_instant); they carry the state a current-facts snapshot cannot: entities fully retracted before the snapshot (whose ids must not be reused) and the last commit’s instant (for :db/txInstant monotonicity when the tail is empty). Both are combined by max with whatever the replayed tail reveals, so an over-estimate is safe and a stale hint can only make allocation more conservative.

The caller is responsible for opening log at the same lease version it recovered the snapshot under, exactly as recover_from requires.

§Errors

Returns an error when the log tail cannot be replayed.

Source

pub async fn recover_from_snapshot_async( snapshot: Db, next_entity_id: u64, last_tx_instant: i64, log: Arc<dyn TransactionLog>, ) -> Result<Self, TransactError>

Recovers from a published snapshot plus an asynchronously read log tail.

§Errors

Returns an error when the log tail cannot be replayed.

Source

pub fn db(&self) -> Db

Returns the current immutable database value.

Source

pub fn subscribe(&self) -> Receiver<TxReport>

Subscribes to reports for transactions committed after this call.

Source

pub fn transact( &self, items: impl IntoIterator<Item = TxItem>, ) -> Result<TxReport, TransactError>

Validates, durably appends, applies, and reports a transaction.

§Errors

Returns an error for rejected transaction data, clock failure, or when the durable append fails. No report is sent on error.

Source

pub async fn transact_async( &self, items: impl IntoIterator<Item = TxItem>, ) -> Result<TxReport, TransactError>

Validates under a short state lock, awaits durability without holding that lock, then atomically publishes the durable transaction in memory. Async calls are serialized here so standalone callers have the same single-writer guarantee as node-hosted callers.

§Errors

Returns an error for rejected transaction data, clock failure, or when the durable append fails. No report is sent on error.

Source

pub fn update_naming(&self, idents: Idents, interner: KeywordInterner)

Replaces the ident/keyword naming attached to the current database value (used when the boundary interns new keywords).

Source

pub async fn publish_indexes( &self, store: &(impl BlobStore + RootStore), root_name: &str, lease_version: u64, ) -> Result<DbRoot, TransactError>

Builds a consistent snapshot of all four indexes and publishes their blob ids.

Each index is chunked into content-defined leaf blobs under a manifest blob (corium_store::chunk_segment_keys), and only chunks absent from the store are uploaded — consecutive publications share every unchanged chunk, so a small change re-uploads a few chunks instead of the whole index.

Blobs are uploaded before the root CAS. Transactions may continue while the immutable snapshot is encoded; a later run indexes any remaining log tail.

Publication is fenced by lease_version and monotone in index_basis_t: a root already published under a newer lease version deposes this writer (TransactError::Deposed); a root at an equal or newer basis (or one that wins a concurrent CAS race) leaves this snapshot’s blobs for garbage collection. The freshly built root is returned when it, or a newer basis, is installed.

§Errors

Returns an error if a blob upload, root read, or fenced publication fails.

Auto Trait Implementations§

Blanket Implementations§

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<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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
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<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