|
The following deadlock can occur:
1) A transaction goes in prepare in oplog application
2) A user operation acquires a lock in mode S and then blocks on a prepare conflict with the prepared transaction.
3) The commit of the prepared transaction attempts to reacquire (since the lock was yielded) an IX lock that conflicts with the mode S lock and blocks.
Possible solutions:
1) Do not yield locks for prepared transactions on secondaries.
2) Say such a user operation is illegal. We do not think they can occur today.
3) Yield locks in prepare conflicts
|