pub struct MaintenanceReport {
pub time_spent: Duration,
pub completed_merges: Vec<PathBuf>,
pub rows_merged: u64,
pub bytes_written: u64,
pub pending_compaction: bool,
pub dropped_whole: Vec<PathBuf>,
pub direct_stream_partitions: u64,
pub pre_pass_time: Duration,
pub pre_pass_short_circuited: bool,
}Expand description
Maintenance report from a maintenance_step() call (M5.2, Issue #384)
Fields§
§time_spent: DurationTime spent in this maintenance step
completed_merges: Vec<PathBuf>Completed merge output files (if any merge completed)
rows_merged: u64Number of rows merged in this step
bytes_written: u64Number of bytes written in this step
pending_compaction: boolWhether there is pending compaction work
dropped_whole: Vec<PathBuf>SSTables DROPPED WHOLE by the fully-expired fast path in the merge that
completed this step (issue #1388), distinct from the merged inputs: each was
proven fully expired by authoritative Statistics.db metadata and
overlap-safe, so it was excluded from the K-way merger (never read/decoded)
and its components were reclaimed after the merged output published. Empty
when nothing was dropped. Paths are input Data.db paths.
direct_stream_partitions: u64Number of partitions written via the issue #2299 direct-stream path (rows
fed straight into the writer session with no whole-partition buffer). Taken
only when authoritative Statistics.db proves no input carries a deletion.
Exposed so tests can positively assert the memory-bounding path actually
executed (byte-identity alone holds on both the direct and buffered paths,
so it cannot distinguish them) — roborev job 1723. 0 when every partition
used the buffered path.
pre_pass_time: DurationWall-clock time spent in the dropped-column survivor pre-pass during THIS
step (issue #1667, budget honesty). Non-zero only on the step that STARTS
a merge for a table with dropped columns — the pre-pass
(compute_surviving_dropped_columns) is a FULL, one-shot merge scan over
every input that runs before any partition is emitted and is NOT bounded
by budget (making it incremental is deferred to Q5). It is nonetheless
counted inside time_spent (the budget Instant starts before
start_merge), and when the pre-pass alone exhausts the budget the
partition loop is short-circuited for this step so the pre-pass cannot
silently precede an unbudgeted partition loop. Duration::ZERO on every
step that does not run the pre-pass (no dropped columns, or a step that
resumes an already-started merge). Always <= time_spent.
pre_pass_short_circuited: booltrue when this step OPENED a fresh merge whose dropped-column survivor
pre-pass (pre_pass_time) ALONE met or exceeded the budget, so the
partition loop was SKIPPED for this step and the merge left pending
(issue #1667). This makes the budget-honesty guarantee observable: an
over-budget pre-pass can never silently precede a partition pass in the
same step. false on every step that ran (or resumed) the partition
loop, on a table with no dropped columns (no pre-pass runs, so #1668’s
mid-partition pause still governs a tiny-budget first step), and on a
freshly-started merge whose pre-pass fit inside the budget.
Trait Implementations§
Source§impl Clone for MaintenanceReport
impl Clone for MaintenanceReport
Source§fn clone(&self) -> MaintenanceReport
fn clone(&self) -> MaintenanceReport
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more