Skip to main content

DbRoot

Struct DbRoot 

Source
pub struct DbRoot {
    pub format_version: u32,
    pub lease_version: u64,
    pub owner: String,
    pub lease_expires_unix_ms: i64,
    pub owner_endpoint: String,
    pub index_basis_t: u64,
    pub roots: Option<[BlobId; 4]>,
    pub next_entity_id: u64,
    pub last_tx_instant: i64,
}
Expand description

Published durable index-root metadata carrying the write lease (see docs/design/log-and-transactor.md).

The lease fields and the index fields live in one record on purpose: every mutation — lease acquisition, renewal, release, index publication — is a CAS on these bytes, so a writer whose ownership has changed hands always fails its next CAS and can never install a root. No cross-record atomicity is required of the store.

Fields§

§format_version: u32

On-disk format version. Readers reject roots from newer formats.

§lease_version: u64

Fencing version; increments on every change of lease ownership.

§owner: String

Owning transactor id; empty when the lease has never been acquired under format 2.

§lease_expires_unix_ms: i64

Lease expiry as Unix milliseconds; 0 when released/never held.

§owner_endpoint: String

Client endpoint advertised by the owner (for peer lease-holder rediscovery); empty when the owner does not advertise one.

§index_basis_t: u64

Highest indexed transaction.

§roots: Option<[BlobId; 4]>

EAVT, AEVT, AVET, and VAET blob ids; None before the first index publication (a bare fence bump).

§next_entity_id: u64

Next unallocated user-partition entity id as of index_basis_t.

A transactor recovering from the index root replays only the log tail, so entities created and fully retracted before the snapshot carry no live datom and are invisible to it. Persisting the writer’s allocation high-water lets recovery resume past those ids instead of reusing them. 0 in roots written before this field existed (and in a bare fence bump with no published snapshot); such roots force full-log replay, which reconstructs the allocator exactly.

§last_tx_instant: i64

Largest :db/txInstant (Unix ms) committed through index_basis_t.

Preserves :db/txInstant monotonicity across a recovery whose log tail is empty (the snapshot alone does not carry the last commit’s instant). i64::MIN when absent, which is dominated by any real instant and so is a safe floor.

Implementations§

Source§

impl DbRoot

Source

pub fn encode(&self) -> Vec<u8>

Encodes the root for the root store.

Source

pub fn decode(bytes: &[u8]) -> Option<DbRoot>

Decodes stored root bytes (any format up to FORMAT_VERSION; newer formats still yield their fence fields so old binaries fence correctly, and callers reject them via format_version).

Trait Implementations§

Source§

impl Clone for DbRoot

Source§

fn clone(&self) -> DbRoot

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DbRoot

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Eq for DbRoot

Source§

impl PartialEq for DbRoot

Source§

fn eq(&self, other: &DbRoot) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for DbRoot

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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