-
Type: Bug
-
Resolution: Won't Fix
-
Priority: Minor - P4
-
None
-
Affects Version/s: None
-
Component/s: None
Reconciliation uses r->rec_start_oldest_id for visibility checks related to clearing obsolete time windows. It's initialized at the start with the current oldest transaction ID. This is fine in general, but during recovery it leads to comparing the current oldest transaction ID to on-disk transaction IDs from the previous database open. This in turn sometimes produces wrong answers and leads to obsolete values being retained on disk.
To solve the problem, during recovery initialize r->rec_start_oldest_id to WT_TXN_MAX; then all comparisons with prior on-disk transaction IDs treat them as stale.
I found this with an experimental set of changes that checks newly-reconciled pages for out of date timestamps. Unfortunately it doesn't look like that changeset is going to be mergeable.