|
The deadlock analysis:
Test goes through these 3 steps:
1- FsynLock
2- Do an insert and wait for the currentOp to show that the insert is waiting for lock (the flusher). (<< Times out waiting for the curOps when dbcheck is on >> )
3- FsyncUnlock and let the insert to succeed.
when fsyncLock is on, multiple threads takes writeTickets and blocked on the Flusher, and then other threads can’t take any more tickets using either PriorityTicketHolder and SemaphoreTicketHolder ,because there are no more tickets available as our tests sets the limit wiredTigerConcurrentWriteTransactions: 30, so what dbcheck does that it takes writeTickets while trying to write the oplog for the dbcheck and then block on the flusher, so when the insert from the test comes it didn't find any writeTickets and waits for it and it didn't even AquireCollection so the curOp doesn't get logged.
|