-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: Verify
-
Storage Engines, Storage Engines - Transactions
-
0.158
-
SE Transactions - 2026-08-28, SE Transactions - 2026-09-11
-
3
-
v9.0
When a page is fast-truncated, the child is replaced on disk by a WT_CELL_ADDR_DEL proxy cell that carries both the original (pre-truncate) child address/aggregate and a page_del structure describing the truncation's stop point. The original child aggregate's newest_stop_ts (typically WT_TS_MAX) is retained only so that readers unaware of the deletion can still see the pre-truncate content; it is stale with respect to the deletion and must not be used to validate parent/child aggregate containment.
Today __wt_verify (src/btree/bt_vrfy.c) and the disk-page verifier (src/btree/bt_vrfy_dsk.c) validate a WT_CELL_ADDR_DEL child by comparing its raw (pre-truncate) time aggregate directly against the parent aggregate. Because the parent aggregate can legitimately reflect the truncation's stop point while the raw child aggregate still shows WT_TS_MAX, this produces false verification failures (e.g. "newest stop timestamp is greater than the parent's newest stop timestamp").
Fix the verifier to validate a WT_CELL_ADDR_DEL child using the page_del stop information itself (and the child aggregate's start information), not the stale raw child stop fields. This corrects an existing semantic gap in fast-truncate aggregate validation and is a prerequisite for any change that persists a parent aggregate reflecting the truncation stop point.
This is prerequisite 1 of a 3-ticket rollout (verifier fix → reconciliation aggregate fix → internal-page skip optimization).
- depends on
-
WT-18496 Reconciliation should merge the effective (page_del-applied) aggregate for WT_CELL_ADDR_DEL children into the parent, not the stale raw child aggregate
-
- Closed
-