[SERVER-67402] Linearizable reads can occasionally read with wrong read source Created: 21/Jun/22  Updated: 29/Oct/23  Resolved: 08/Aug/22

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: 5.0.9, 6.0.0-rc10, 6.1.0-rc0
Fix Version/s: 5.0.13, 6.0.2, 6.1.0-rc0

Type: Bug Priority: Major - P3
Reporter: Matthew Russotto Assignee: Henrik Edin
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Backports
Duplicate
is duplicated by SERVER-67403 Linearizable reads can occasionally r... Closed
Gantt Dependency
has to be done after SERVER-67305 Lock-free reads setup should validate... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Backport Requested:
v6.0, v5.0
Sprint: Execution Team 2022-08-08, Execution Team 2022-08-22
Participants:

 Description   

Linearizable reads are supposed to happen only on a writable primary with a read source of kNoTimestamp. Because of a race, these reads may enter AutoGetCollectionForRead on a secondary or primary in catch-up mode. Before SERVER-55443, this would result in an fassert as they attempted to read at kNoTimestamp on the non-writable node. After SERVER-55443, there is no invariant, but they may read at kNoTimestamp on a node which is in the middle of applying oplog. Most of the time this will fail when the node attempts to do the no-op write when the read is finished, but if the node completes step-up before that happens, it may succeed. Because linearizable reads are supposed to be for single documents only, this should usually be OK (no inconsistency will be observable) but it is bad practice anyway.

Instead of either reading at kNoTimestamp on a secondary, or hitting an fassert, a linearizable read should uassert with NotWritablePrimary when it would otherwise open a snapshot on a non-writable node.



 Comments   
Comment by Githook User [ 15/Sep/22 ]

Author:

{'name': 'Henrik Edin', 'email': 'henrik.edin@mongodb.com', 'username': 'henrikedin'}

Message: SERVER-67402 Fix race where linearizable read concern may read during primary catchup

(cherry picked from commit f62d857f440e1340c7338d81c128d0682305f777)
Branch: v6.0
https://github.com/mongodb/mongo/commit/fc0a572b03ef5c589f6e2f89380a83d0142bcba7

Comment by Githook User [ 08/Sep/22 ]

Author:

{'name': 'Henrik Edin', 'email': 'henrik.edin@mongodb.com', 'username': 'henrikedin'}

Message: SERVER-67402 Fix race where linearizable read concern may read during primary catchup

(cherry picked from commit f62d857f440e1340c7338d81c128d0682305f777)
Branch: v5.0
https://github.com/mongodb/mongo/commit/0f496dfbfb76cf797833058c5b81d6910557896a

Generated at Thu Feb 08 06:08:03 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.