diff options
| author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2023-08-11 02:36:14 +0000 |
|---|---|---|
| committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-08-22 20:09:42 +0000 |
| commit | 425a0454d12f2664f9e31002bbe4a386a25345b5 (patch) | |
| tree | 9436e8346346e00d0e605e7cb2ab76553fb0ce1e /src/mongo/db/repl/oplog_fetcher.cpp | |
| parent | 9db2af46617eedca6bcf1d8c0851cfad04061f5c (diff) | |
SERVER-79885: Oplog fetching getMore should only set null lastKnownCommittedOpTime for exhaust cursorsr7.0.1-rc0r7.0.1release-7.0.1
(cherry picked from commit eeac78cd8de74ca1cffb18eb4b798b8392df6192)
Diffstat (limited to 'src/mongo/db/repl/oplog_fetcher.cpp')
| -rw-r--r-- | src/mongo/db/repl/oplog_fetcher.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mongo/db/repl/oplog_fetcher.cpp b/src/mongo/db/repl/oplog_fetcher.cpp index d4687970b8d..eb6d92abecc 100644 --- a/src/mongo/db/repl/oplog_fetcher.cpp +++ b/src/mongo/db/repl/oplog_fetcher.cpp @@ -712,8 +712,21 @@ StatusWith<OplogFetcher::Documents> OplogFetcher::_getNextBatch() { auto lastCommittedWithCurrentTerm = _dataReplicatorExternalState->getCurrentTermAndLastCommittedOpTime(); if (lastCommittedWithCurrentTerm.value != OpTime::kUninitializedTerm) { - _cursor->setCurrentTermAndLastCommittedOpTime(lastCommittedWithCurrentTerm.value, - lastCommittedWithCurrentTerm.opTime); + if (!_cursor->isExhaust() && lastCommittedWithCurrentTerm.opTime.isNull()) { + // For non-exhaust cursors, only set the lastKnownCommittedOpTime when it is not + // a null opTime. This is to avoid sending null opTime again and again and + // triggering oplog empty batches every single time in case we can't advance our + // commit point (e.g. during initial sync). + _cursor->setCurrentTermAndLastCommittedOpTime( + lastCommittedWithCurrentTerm.value, boost::none); + } else { + // For exhaust cursors, it is safe to set a null lastKnownCommittedOpTime in the + // initial getMore because the sync source will update the exhaust cursor's + // lastKnownCommittedOpTime to the commit point sent in the last response after + // each oplog batch. + _cursor->setCurrentTermAndLastCommittedOpTime( + lastCommittedWithCurrentTerm.value, lastCommittedWithCurrentTerm.opTime); + } } _cursor->more(); } |
