pub struct BarrierReport {Show 23 fields
pub seq: Option<u64>,
pub uploaded: Vec<String>,
pub deleted: Vec<String>,
pub removed: Vec<String>,
pub removals_refused: usize,
pub parked: Vec<String>,
pub consumed: usize,
pub foreign_queued: usize,
pub deferred: Vec<String>,
pub held: Vec<String>,
pub leaked: Vec<String>,
pub surfaced: Vec<String>,
pub collected: usize,
pub swept: usize,
pub no_change: bool,
pub published_bytes: u64,
pub manifest_etag: Option<String>,
pub observed_seq: Option<u64>,
pub observed_etag: Option<String>,
pub first_absence: Vec<String>,
pub absences_confirmed: usize,
pub rescope_replayed: bool,
pub steps: Vec<StepTiming>,
}Fields§
§seq: Option<u64>§uploaded: Vec<String>§deleted: Vec<String>§removed: Vec<String>Paths a DECLARED removal (delete/rename design) cited out this
barrier — a subset of deleted once the GC has run.
removals_refused: usizeDeclared removals this barrier REFUSED (locally dirty, not a file, uncontainable); the cell carries the reason.
parked: Vec<String>§consumed: usize§foreign_queued: usize§deferred: Vec<String>Paths whose transfer drifted or was swept mid-compose: nothing published, nothing advanced; the next scan re-queues them.
held: Vec<String>Paths the syncer may not read (scan::Scan::held): a directory
it may not list (with its trailing /), an entry it may not
lstat, a file it may not open, an absence it may not confirm; and
a file or directory whose name is not UTF-8, which no key names.
Nothing at or under one was published or deleted, and the rest of
the tree was. A boundary that holds anything is not complete: a
sentinel’s ack is partial and names them, and the drain refuses
to attest it.
leaked: Vec<String>Paths whose object the collector LEFT BEHIND because this store
does not enforce If-Match on DELETE (conformance.rs). The
delete still reached the boundary; only the object survives.
NOT added to deleted, and so NOT dropped from the merge base:
the rule step 7 follows is “drop the entry once the key no longer
holds our bytes”, which is why the absent and replaced-absent
arms drop it and the skipped-etag arm does not. A leaked key
still holds them. The model names that rule
BaselineKeepsUncollected and it is what ships, so a leak
follows the arm that already exists rather than inventing a
third; the cost is that the collector re-offers the path (one
HEAD) at every later barrier, exactly as a skipped one is.
surfaced: Vec<String>Paths this barrier published OVER a version it never integrated; each has a conflict record naming the preserved copy (R7).
collected: usizeRetired handles the batch delete took.
swept: usizeOrphan handles the sweep took, when it was due.
no_change: bool§published_bytes: u64Bytes this barrier actually published — the input to the sentinel work meter (boundary-verbs plan D3.1). Metering work rather than calls is what keeps a sentinel storm from un-coalescing a hot large file’s republish: a counted budget charges a 2 GiB checkpoint the same one unit as a 4 KiB file.
manifest_etag: Option<String>The manifest ETag this barrier installed (the ack’s CAS token).
observed_seq: Option<u64>What the manifest HEAD/install told us the bucket is at, for the news ticker (D5) — free, off requests the barrier already made.
observed_etag: Option<String>§first_absence: Vec<String>Paths this barrier saw absent for the FIRST time: their deletes are withheld to the next scan (the rename-vs-walk guard). On a declared boundary a non-empty set means the confirmation lstat found them back on disk — the race the guard exists for.
absences_confirmed: usizeFirst-absence paths a DECLARED boundary confirmed gone by direct
lstat and published as ordinary deletes (confirm_absences).
rescope_replayed: boolThis barrier finished a rescope a crash had left half-applied before it did anything else. Reported so a run that looks like an ordinary barrier can be told from one that had to converge a workspace first.
steps: Vec<StepTiming>Where this barrier’s time went, step by step (StepTiming).