An optimization to only wake up a tailable + awaitData cursor when the majority commit point advances (when reading only majority committed data) was originally introduced in SERVER-69959. However, in SERVER-74526 we discovered that this change did not work correctly for $changeStream cursors opened against secondary nodes; rather than blocking, the change stream thread would wake up repeatedly and spin with high CPU utilization.
The work for this ticket is to continue investigating the reason for this high CPU utilization on secondaries. Once we understand the problem better, we should reimplement SERVER-69959 in such a way that is not subject to the bug from SERVER-74526.
- has to be done after
-
SERVER-74611 Have WaitForMajorityService provide a method for waiting for reads
- Closed
- is depended on by
-
SERVER-74580 Complete TODO listed in SERVER-69959
- Closed
- is related to
-
SERVER-74526 Change stream opened against a secondary node uses a lot of CPU even when there is no write load
- Closed
-
SERVER-69959 Introduce majority committed point advancement notification mechanism
- Closed