Skip to main content

EntryMetadata

Struct EntryMetadata 

Source
#[repr(C)]
pub struct EntryMetadata { pub key_hash: u64, pub prev_offset: u64, pub checksum: [u8; 4], }
Expand description

Metadata structure for an append-only storage entry.

This structure stores metadata associated with each entry in the append-only storage. It includes a hash of the key for quick lookups, an offset pointing to the previous entry in the chain, and a checksum for integrity verification.

§Entry Storage Layout

Aligned entry (non-tombstone):

Offset RangeFieldSize (Bytes)Description
P .. P+padPre-Pad (optional)padZero bytes to align payload start
P+pad .. NPayloadN-(P+pad)Variable-length data
N .. N+8Key Hash864-bit XXH3 key hash
N+8 .. N+16Prev Offset8Absolute offset of previous tail
N+16 .. N+20Checksum4CRC32C of payload

Where:

  • pad = (A - (prev_tail % A)) & (A - 1), A = PAYLOAD_ALIGNMENT.
  • The next entry starts at N + 20.

Tombstone (deletion marker):

Offset RangeFieldSize (Bytes)Description
T .. T+1Payload1Single byte 0x00
T+1 .. T+21Metadata20Key hash, prev, crc32c

Notes:

  • Using the previous tail in Prev Offset lets us insert pre-pad while keeping chain traversal unambiguous.
  • Readers compute payload_start = prev_offset + prepad_len(prev_offset) and use the current metadata position as payload_end.
Storage Layout

§Notes

  • The prev_offset forms a backward-linked chain for each key.
  • The checksum is not cryptographically secure but serves as a quick integrity check.
  • The first entry for a key has prev_offset = 0, indicating no previous version.

Fields§

§key_hash: u64§prev_offset: u64§checksum: [u8; 4]

Implementations§

Source§

impl EntryMetadata

Source

pub fn new(key_hash: u64, prev_offset: u64, checksum: [u8; 4]) -> EntryMetadata

Source

pub fn serialize(&self) -> [u8; 20]

Serializes the metadata into a byte array.

Converts the EntryMetadata structure into a fixed-size array for efficient storage. The serialized format ensures compatibility with disk storage and memory-mapped access.

§Format:
  • Encodes the key hash, previous offset, and checksum into their respective byte ranges.
  • Uses little-endian encoding for numeric values.
§Returns:
  • A byte array containing the serialized metadata.
Source

pub fn deserialize(data: &[u8]) -> EntryMetadata

Deserializes a byte slice into an EntryMetadata instance.

Reconstructs an EntryMetadata structure from a byte slice, following the predefined binary format. Extracts the key hash, previous offset, and checksum while ensuring correctness through explicit range-based indexing.

§Parameters:
  • data: A byte slice containing the serialized metadata.
§Returns:
  • A reconstructed EntryMetadata instance.
§Panics:
  • If the provided data slice is too small.

Trait Implementations§

Source§

impl Clone for EntryMetadata

Source§

fn clone(&self) -> EntryMetadata

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for EntryMetadata

Source§

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

Formats the value using the given formatter. Read more

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<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> 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