Replication coordinator stops the bgsync, which stops the running oplog fetcher, if there's a running oplog fetcher. Oplog fetcher needs the current term and the last committed optime to make new requests. As a result, they create an deadlock.
- Replication coordinator, while holding replCoord's mutex, waits on oplog fetcher's mutex to stop it.
- Oplog fetcher, while holding its mutex, waits on replCoord's mutex to get the current term and the last committed optime.
To fix this, we need move the current term and last committed optime out of oplog fetcher's mutex.