pub struct WalReader { /* private fields */ }Expand description
Sequential WAL reader.
Implementations§
Source§impl WalReader
impl WalReader
Sourcepub fn open(path: &Path, keys: Option<&KeyRing>) -> Result<Self>
pub fn open(path: &Path, keys: Option<&KeyRing>) -> Result<Self>
Open a WAL file for replay.
Every record is decrypted on the way out: what the caller receives never
has ENCRYPTED_FLAG set, and its checksum verifies against the
plaintext. keys must be the key ring the segment was written under, or
None for a segment that was never encrypted — an encrypted record met
with no key is WalError::EncryptedRecordWithoutKey, never ciphertext
handed to the caller.
Sourcepub fn open_raw(path: &Path) -> Result<Self>
pub fn open_raw(path: &Path) -> Result<Self>
Open a WAL file for structural scanning only.
Payloads may be ciphertext. Records come out exactly as they are on
disk, ENCRYPTED_FLAG and all. This exists for code that reads nothing
but record framing — LSNs, lengths, offsets — and specifically for
crate::recovery::recover, which runs from WalWriter::open where no
key ring exists and resuming an encrypted segment for appending must
still work. Never use it for replay.
If the file begins with a valid WALP preamble (16 bytes), it is
consumed and stored for use as AAD during decryption. Files without a
preamble (unencrypted segments) start reading from offset 0 directly.
Automatically opens the companion double-write buffer file
(*.dwb) if it exists alongside the WAL file.
Sourcepub fn committed_end(&self) -> u64
pub fn committed_end(&self) -> u64
Byte offset just past the last fully consumed record.
This is where a writer resumes appending. It is not the same as
Self::offset: it includes any alignment padding that followed the
final record, and it excludes a partially-read damaged record whose
header the reader had to consume before rejecting it.
Sourcepub fn stop_reason(&self) -> Option<StopReason>
pub fn stop_reason(&self) -> Option<StopReason>
Why iteration stopped, or None while records are still being read.
StopReason::Corruption does not by itself mean data was lost — it
is the input to crate::torn_tail::verify_committed_prefix, which
decides whether the damage is an unfsynced tail or a hole with
committed records behind it.
Sourcepub fn segment_preamble(&self) -> Option<&SegmentPreamble>
pub fn segment_preamble(&self) -> Option<&SegmentPreamble>
The preamble read from this segment file, if present.
Returns None for unencrypted segments (no preamble written).
Sourcepub fn next_record(&mut self) -> Result<Option<WalRecord>>
pub fn next_record(&mut self) -> Result<Option<WalRecord>>
Read the next record from the WAL.
Returns None at EOF (clean end) or at the first corruption point.
Returns Err for I/O errors, unknown required record types, an
oversized payload declaration, and a format version this build cannot
read at the segment’s first record. A reader that returns Err for a
header has consumed that header, so a caller must stop at the Err.
Sourcepub fn records(self) -> WalRecordIter ⓘ
pub fn records(self) -> WalRecordIter ⓘ
Iterator over all valid records in the WAL.
Auto Trait Implementations§
impl !Sync for WalReader
impl Freeze for WalReader
impl RefUnwindSafe for WalReader
impl Send for WalReader
impl Unpin for WalReader
impl UnsafeUnpin for WalReader
impl UnwindSafe for WalReader
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> 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,
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.