You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[#290] Report leftover MVV mark bits in IntegrityCheck (#291)
* Report leftover MVV mark bits in IntegrityCheck
A prune interrupted before the issue #286 fix could leave 0x8000 mark
bits behind in on-disk version length fields. Since PR #288 the read
paths strip the mark bit silently, so such versions read normally and
icheck reported affected volumes as clean.
Add MVV.countMarkedVersions and scan every data record during icheck:
marked versions are counted in a new MarkedVersions counter (report,
CSV and getMarkedVersionCount) and reported as a fault so affected
volumes can be identified. The scan runs only after visitAllVersions
has validated the version structure, so a structurally corrupt MVV
cannot produce a bogus marked-version fault.
icheck -p remains the remediation: pruning rewrites the marked
versions (issue #292 makes prune clear stale marks unconditionally).
With icheck -P the marked-version faults are reported but do not
block clearing the TransactionIndex, since the prune pass has already
rewritten the marks. The icheck -c CSV example in Management.rst is
updated for the new MarkedVersions column.
Fixes#290
* Compare fault counts in the icheck -P gate, not the capped fault list
The pruneAndClear gate excluded marked-version faults by comparing
_faults.size() with the marked-fault count, but both stop moving once
the fault list reaches MAX_FAULTS: on a volume with more than
MAX_FAULTS marked-version records a genuine fault found afterwards
(the garbage chain is checked after the trees) is dropped from the
list and the arithmetic still converges, so -P cleared the
TransactionIndex despite real corruption. Count every fault found -
recorded in the list or not - and gate on the counts instead.
0 commit comments