[SERVER-54760] (4.2) Ghost timestamps can cause concurrent causal snapshot reads to not read their own writes Created: 24/Feb/21  Updated: 29/Oct/23  Resolved: 25/Feb/21

Status: Closed
Project: Core Server
Component/s: Storage
Affects Version/s: None
Fix Version/s: 4.2.13

Type: Bug Priority: Major - P3
Reporter: Daniel Gottlieb (Inactive) Assignee: Daniel Gottlieb (Inactive)
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Backwards Compatibility: Fully Compatible
Operating System: ALL
Sprint: Sharding 2021-03-08
Participants:
Linked BF Score: 35

 Description   

We recently fixed an issue in 4.2 where the "all durable" timestamp can go backwards. However 4.2 maintains two variables (1 and 2) that each independently prevent their readers from seeing a value going backwards.

These variables do not communicate with each other and are not synchronized in any way. Thus a read from a method that looks up against one value can see an "all durable" TS. Following that with a read on a different method can see a different "all durable" smaller than the previously observed TS (due to ghost timestamp writes [1]).

A decreasing all_durable can be observed when a startTransaction request has an afterClusterTime and level: "snapshot".

The afterClusterTime first waits for all earlier writes to complete. This logic compares against "variable 1".

Then we open a WT snapshot using the "all durable" read source. This code path compares against "variable 2", breaking the guarantee necessary to read at or after the afterClusterTime.

[1] WT's all_durable only goes backwards on the primary due to "ghost timestamp" writes. On 4.2, this is primarily from a multikey write inside of a multi-statement transaction.



 Comments   
Comment by Githook User [ 25/Feb/21 ]

Author:

{'name': 'Daniel Gottlieb', 'email': 'daniel.gottlieb@mongodb.com', 'username': 'dgottlieb'}

Message: SERVER-54760: Guarantee causal relationship between WTOplogManager::waitForAllEarlierOplogWritesToBeVisible and `kAllDurableSnapshot` read source.
Branch: v4.2
https://github.com/mongodb/mongo/commit/02087dc8d18138e9f9d555da21f6105046573ed1

Generated at Thu Feb 08 05:34:24 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.