Skip to main content

BlockVerifyWarning

Enum BlockVerifyWarning 

Source
#[non_exhaustive]
pub enum BlockVerifyWarning { UnrecognizedEcc { table_id: TableId, path: PathBuf, }, ParityUnverifiable { table_id: TableId, path: PathBuf, }, EccCodecSuspect { table_id: TableId, path: PathBuf, }, EccDescriptorsUnreadable { table_id: TableId, path: PathBuf, }, }
Expand description

A non-fatal finding from a scrub run: the data is intact, but something about a table could not be fully checked.

Warnings do not fail BlockVerifyReport::is_ok, so any consumer that renders a verdict (a CLI, an operator report) MUST surface them alongside it: a bare “OK” over a non-empty warning list misreads “nothing broken among what was checkable” as “everything verified”. The skipped surface each variant names (an unverifiable parity trailer, an unwalkable ECC section) is exactly where silent rot would otherwise hide.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

UnrecognizedEcc

The table’s descriptor#page_ecc decodes to an ECC scheme this build cannot apply (an unimplemented scheme, page granularity, an unknown kind, or a non-canonical descriptor). Block payloads still verify by their own checksums, but the parity trailer length is not derivable from a scheme, so the sequential block walk cannot size it and ECC verification was skipped for this table. Recompaction re-stamps the table with a supported scheme.

Fields

§table_id: TableId

Table the warning applies to.

§path: PathBuf

On-disk path of the SST.

§

ParityUnverifiable

The table carries a RECOGNIZED Page-ECC scheme, but this build was compiled without the ECC codecs (the page_ecc feature), so its parity trailers were consumed for walk alignment but could NOT be verified. Block payloads still verify by their own checksums — parity-only rot is what stays invisible on this build. Verify on a page_ecc-enabled build, or recompact (on this build the rewrite is parity-less) to leave only verifiable bytes.

Fields

§table_id: TableId

Table the warning applies to.

§path: PathBuf

On-disk path of the SST.

§

EccCodecSuspect

The parity mismatches reported for this table look like a MIS-IDENTIFIED ECC scheme rather than rot: the descriptor sizes every block correctly, yet reproduces the parity of none of them. Rot is scattered — it does not disagree with every trailer in every section at once.

The payloads still verified against their own checksums, so the data is readable either way and the table is graded on the mismatches alone. This only says which explanation to investigate first: recompact the table to re-stamp it under a scheme both meta mirrors agree on, rather than hunting failing hardware.

Raised only ALONGSIDE those mismatches, never on its own, so it cannot turn an otherwise-clean report into a degraded one.

Fields

§table_id: TableId

Table the warning applies to.

§path: PathBuf

On-disk path of the SST.

§

EccDescriptorsUnreadable

NEITHER meta mirror holds a readable ECC descriptor, and the blocks were walked under a parity-less layout READ OFF THE FILE: they frame end to end with no trailer, which a parity-bearing table cannot do.

So this table verified completely — unlike Self::UnrecognizedEcc, nothing was skipped — but what is on disk is still malformed, and only a rewrite re-stamps a canonical descriptor. Until then the table has no recorded scheme to recover under, and the next reader must infer the layout again.

Fields

§table_id: TableId

Table the warning applies to.

§path: PathBuf

On-disk path of the SST.

Trait Implementations§

Source§

impl Debug for BlockVerifyWarning

Source§

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

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V