Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
None
-
None
Description
It turns out that reading from a history store checkpoint correctly requires doing accurate visible_all checks relative to the checkpoint context; bypassing them doesn't work. This is because it's possible for outdated history store entries with globally visible stop times and nonzero start times to hang around; they are necessarily sorted (and thus seen during reads) before more recently added entries with zero start times and later stop times. They're supposed to be skipped over via a global visibility check; that check can't be shortcut. (Assuming all stop times are globally visible causes items to disappear; assuming none are causes obsolete stop times to be honored and thus also causes items to disappear.) Therefore, visible_all needs to be able to test against the checkpoint's oldest timestamp and the checkpoint's transaction state. Fortunately all the needed information is reasonably readily available...