-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Critical - P2
-
Affects Version/s: None
-
Component/s: Btree, Reconciliation, Transactions
-
Storage Engines - Transactions
-
123.56
-
SE Transactions - 2026-07-17, SE Transactions - 2026-07-31
-
8
Rebuilding a full page image from a base image and internal page deltas unpacks the delta cells with the base image's page header (WT_CELL_DELTA_INT_UNPACK passes base_dsk), because delta timestamps are resolved relative to the base page. However, the unpack path also makes the transaction-id clearing decision from that header's write generation: whether a delta cell's transaction ids are treated as belonging to an earlier run is decided by the base image's age rather than the delta's own.
When an internal page consists of an older base image (write generation at or below the reading handle's base write generation) plus deltas written by the current run, the merge wrongly clears the transaction ids from the current-run delta cells while preserving their address cookies. The reconstructed page then holds address cells whose aggregates no longer cover the (raw, current-run) transaction ids in the pages they reference. Verification reports:
__time_aggregate_validate_parent: aggregate time window has a newest transaction after its parent's
seen intermittently in format stress disagg-switch data-validation tasks. The characteristic signature is a full-image child page (delta_count=0) whose cell carries a raw current-run transaction id, under a delta-reconstructed parent whose recorded aggregate has newest_txn=0, with parent base LSN < child LSN < parent LSN.
The leaf delta path is unaffected: it unpacks delta cells with the delta's own header, which is why the failure only ever fires at the internal level.
Fix: keep using the base image's header for timestamp resolution, but make the clearing decision with the delta's own write generation. Deterministic reproducer: a two-node role switch where the new leader updates a dense key range under an open transaction (so its ids are persisted) and then verifies – the internal pages above the rewritten subtree are deltas on the previous leader's base images, and the walk reconstructs them with the current-run ids cleared.