When we wait on oplog visibility with waitForAllEarlierOplogWritesToBeVisible, and when we set oplog visibility with oplogDiskLocRegister, we acquire a global lock, which automatically takes a storage read ticket. Together, doing both can result in a deadlock. Just having waitForAllEarlierOplogWritesToBeVisible take a ticket can result on local reads blocking behind reads with a read concern that's waiting for oplog writes. Since neither operation affects the resources protected by read tickets, we should use skipAcquireTicket() when acquiring these locks.
(We may need an RAII type to set/restore that flag)
- is related to
-
SERVER-59219 Investigate whether the RecordStore oplogDiskLocRegister() and waitForAllEarlierOplogWritesToBeVisible() functions can deadlock due to ticket exhaustion
- Closed