pub struct RecordHeader {
pub magic: u32,
pub format_version: u16,
pub record_type: u32,
pub lsn: u64,
pub tenant_id: u64,
pub vshard_id: u32,
pub payload_len: u32,
pub database_id: u64,
pub apply_key: u64,
pub event_source: u8,
pub commit_hlc: u64,
pub crc32c: u32,
}Expand description
WAL record header (fixed 63 bytes).
Fields§
§magic: u32§format_version: u16§record_type: u32§lsn: u64§tenant_id: u64§vshard_id: u32§payload_len: u32§database_id: u64Database scope for this record, as the raw u64 of a DatabaseId.
Decoded exactly as written. Covered by CRC32C. Occupies bytes 34–41.
apply_key: u64The idempotency key of the replicated proposal whose apply appended
this record, 0 for a record no proposal apply appended. The record
and the key are durable together, so a node recovers which proposals
it applied from the records themselves. Covered by CRC32C. Occupies
bytes 42–49.
event_source: u8The event source of the row write this record carries, as the writer’s
code. NO_EVENT_SOURCE for a record that carries no row write.
Covered by CRC32C. Occupies byte 50.
commit_hlc: u64HLC wall time, in nanoseconds, at which the write this record belongs
to committed, or the proposer’s stamp of the metadata entry whose
apply appended it. 0 for a record that belongs to neither: a cluster
restore judges such a record by its WAL position, never by a clock. A
restore keeps a record with a nonzero value only when it is below the
restore point’s watermark. Covered by CRC32C. Occupies bytes 51–58.
crc32c: u32Implementations§
Source§impl RecordHeader
impl RecordHeader
pub fn to_bytes(&self) -> [u8; 63]
pub fn from_bytes(buf: &[u8; 63]) -> Self
Sourcepub fn compute_checksum(&self, payload: &[u8]) -> u32
pub fn compute_checksum(&self, payload: &[u8]) -> u32
CRC32C over header (excluding the crc32c field) + payload.
The apply key is included in the CRC so it cannot be silently modified without detection.
Sourcepub fn logical_record_type(&self) -> u32
pub fn logical_record_type(&self) -> u32
Logical record type with the encryption flag stripped.
pub fn validate(&self, offset: u64) -> Result<()>
Trait Implementations§
Source§impl Clone for RecordHeader
impl Clone for RecordHeader
impl Copy for RecordHeader
Source§impl Debug for RecordHeader
impl Debug for RecordHeader
impl Eq for RecordHeader
Source§impl PartialEq for RecordHeader
impl PartialEq for RecordHeader
impl StructuralPartialEq for RecordHeader
Auto Trait Implementations§
impl Freeze for RecordHeader
impl RefUnwindSafe for RecordHeader
impl Send for RecordHeader
impl Sync for RecordHeader
impl Unpin for RecordHeader
impl UnsafeUnpin for RecordHeader
impl UnwindSafe for RecordHeader
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.