When change streams are in a getMore loop against an open cursor, they do not respect the read preference defined in the connection if there is a promotion event that invalidates the primary / secondary status of the server it is streaming from. This feature is to leverage SDAM and monitor the server's status, and if the read preference is invalidated, close the cursor noting the resume token, re-open against a read preference compatible node, and resume streaming from the resume token. This feature is key in order to keep load off the primary node.
What is missing:
- When secondary which is being used to stream changes is promoted to primary the event stream is not recreated