Skip to main content

VerifyErrorClass

Enum VerifyErrorClass 

Source
pub enum VerifyErrorClass {
Show 17 variants MissingComponent, DigestMismatch, CompressionInfoCorrupt, ChunkOffsetOutOfBounds, ChunkDecompressionError, UnsupportedCompressionFeature, UncompressedChunkCrcMismatch, UnexpectedEof, IndexEntryCorrupt, StatisticsHeaderCorrupt, SummaryCorrupt, BtiRootPointerCorrupt, BtiTrieCorrupt, RowScanFailed, OutOfOrderKeyOrRow, InvalidLocalDeletionTime, FilterFalseNegative,
}
Expand description

Stable classification of a verification failure.

The variant is the machine-checkable “error code”; the VerifyFinding carries the human-readable context. These names are part of the verifier contract — callers (and CI) may match on them, so they must remain stable.

Variants§

§

MissingComponent

A TOC.txt-listed component (or a structurally-required component) is absent from disk.

§

DigestMismatch

Digest.crc32 does not match the computed CRC32 of Data.db.

§

CompressionInfoCorrupt

CompressionInfo.db failed to parse, named an unsupported algorithm, or otherwise malformed (#1001).

§

ChunkOffsetOutOfBounds

A CompressionInfo.db chunk offset points outside Data.db.

§

ChunkDecompressionError

An inline Data.db chunk CRC32 did not match, or a chunk could not be read / decompressed (truncation, bit flip).

§

UnsupportedCompressionFeature

A chunk is compressed with a valid but UNSUPPORTED compression feature — distinct from truncation/bit-flip (ChunkDecompressionError) and from a checksum mismatch (DigestMismatch) (issue #1414). The canonical case is a zstd dictionary-compressed chunk: the frame is well-formed and its inline chunk CRC is valid, but CQLite ships no-dictionary zstd only, so the frame cannot be decoded. The reader fails closed with Error::UnsupportedFormat naming the feature (e.g. the Dictionary_ID); this class makes the verify report say “unsupported feature”, never “corruption”.

§

UncompressedChunkCrcMismatch

An uncompressed BIG Data.db chunk did not match its stored CRC.db per-chunk CRC32 (issue #1396) — the uncompressed analogue of the compressed path’s inline chunk-CRC finding (ChunkDecompressionError). Cassandra writes a CRC.db for every uncompressed BIG SSTable and verifies reads against it; a bit flip inside an uncompressed chunk is detected here (and, default-on, on every read). Also covers a truncated / short CRC.db (fewer per-chunk CRC entries than the Data.db has chunks). Reported via a VerifyFinding naming the failing chunk and the CRC.db/Data.db component.

§

UnexpectedEof

A component was truncated and a required read hit end-of-file.

§

IndexEntryCorrupt

Index.db (BIG) is structurally corrupt.

§

StatisticsHeaderCorrupt

Statistics.db header / body is corrupt.

§

SummaryCorrupt

Summary.db is truncated / unreadable.

§

BtiRootPointerCorrupt

BTI Partitions.db root pointer / node is corrupt.

§

BtiTrieCorrupt

BTI Rows.db trie is truncated / corrupt.

§

RowScanFailed

A full row scan failed for a reason not otherwise classified above.

§

OutOfOrderKeyOrRow

Partition keys are not in ascending on-disk (Murmur3 token) order, or clustering rows within a partition are not in ascending clustering order (issue #1282). Cassandra requires strictly ordered keys/rows; its sstableverify (SSTableIdentityIterator / Verifier) rejects an out-of-order key or row as corrupt.

§

InvalidLocalDeletionTime

A partition-level localDeletionTime is negative (invalid) on the legacy signed (nb) DeletionTime form (issue #1282). localDeletionTime is seconds since the Unix epoch; the only non-negative “special” value is the live sentinel i32::MAX (0x7FFFFFFF). A negative value cannot be a valid deletion time — Cassandra’s DeletionTime/Verifier treats it as corrupt. (The unsigned oa/da form legitimately represents far-future times in [2^31, 2^32), so those are NOT flagged — the on-disk format, not a heuristic, decides.)

§

FilterFalseNegative

A parseable BIG Filter.db reports “not present” (might_contain == false) for a partition key that IS present in the SSTable (its raw key bytes are enumerated from the authoritative Index.db) — a Bloom-filter FALSE NEGATIVE (issue #1398). Cassandra’s Filter.db carries no checksum, so a bit flipped from 1→0 inside the bit array is not detected on load and makes a live partition silently invisible on the BIG point-lookup path (partition_lookup.rs returns Ok(None) when the bloom says “miss”). Full scans and BTI (da) lookups are UNAFFECTED (they never gate on this bloom), so this is a detection tool Cassandra’s sstableverify lacks — Cassandra does not verify Filter.db contents and would report the same fixture clean.

Implementations§

Source§

impl VerifyErrorClass

Source

pub fn code(self) -> &'static str

Stable string code for the error class (used in reports / CI artifacts).

Trait Implementations§

Source§

impl Clone for VerifyErrorClass

Source§

fn clone(&self) -> VerifyErrorClass

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 Copy for VerifyErrorClass

Source§

impl Debug for VerifyErrorClass

Source§

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

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

impl Display for VerifyErrorClass

Source§

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

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

impl Eq for VerifyErrorClass

Source§

impl Hash for VerifyErrorClass

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for VerifyErrorClass

Source§

fn eq(&self, other: &VerifyErrorClass) -> 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 VerifyErrorClass

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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

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<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<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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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