Fix WT_CELL_ADDR_DEL time aggregate verification to not compare against stale child aggregate

XMLWordPrintableJSON

    • 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).

            Assignee:
            Shoufu Du
            Reporter:
            Shoufu Du
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: