MMAP's implementation had an invariant, but the other storage engine implementations appear not to have any.
Locks should not be held while waitUntilDurable is called for two reasons: 1) it can take a long time to make data durable, so a lock should not be held that long for I/O; 2) we could run out of tickets and the lock that the caller has could stop the rest of the system from freeing up enough for he durability task to get a ticket, thus a ticketing deadlock.
This requires fixing the failpoint in index builds that calls waitUntilDurable() with locks, curtesy of SERVER-39585 to unblock other work
- depends on
-
SERVER-41463 repairDatabasesAndCheckVersion should not hold a lock while calling on StorageRepairObserver::onRepairDone
- Closed
-
SERVER-41464 setInitialSyncFlag and clearInitialSyncFlag dbtests should not call waitUntilDurable() with lock held
- Closed
-
SERVER-41613 FSyncLockThread::run() should not hold a lock while calling waitUntilDurable()
- Closed