diff options
Diffstat (limited to 'src/mongo/db/repl/oplog_fetcher_test.cpp')
-rw-r--r-- | src/mongo/db/repl/oplog_fetcher_test.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/mongo/db/repl/oplog_fetcher_test.cpp b/src/mongo/db/repl/oplog_fetcher_test.cpp index 88086deaeeb..2359c1ba250 100644 --- a/src/mongo/db/repl/oplog_fetcher_test.cpp +++ b/src/mongo/db/repl/oplog_fetcher_test.cpp @@ -323,7 +323,9 @@ protected: * Tests checkSyncSource result handling. */ void testSyncSourceChecking(const rpc::ReplSetMetadata& replMetadata, - const rpc::OplogQueryMetadata& oqMetadata); + const rpc::OplogQueryMetadata& oqMetadata, + ChangeSyncSourceAction changeSyncSourceAction = + ChangeSyncSourceAction::kStopSyncingAndEnqueueLastBatch); void validateLastBatch(bool skipFirstDoc, OplogFetcher::Documents docs, OpTime lastFetched); @@ -478,14 +480,15 @@ std::unique_ptr<ShutdownState> OplogFetcherTest::processSingleBatch(const Messag } void OplogFetcherTest::testSyncSourceChecking(const rpc::ReplSetMetadata& replMetadata, - const rpc::OplogQueryMetadata& oqMetadata) { + const rpc::OplogQueryMetadata& oqMetadata, + ChangeSyncSourceAction changeSyncSourceAction) { auto firstEntry = makeNoopOplogEntry(lastFetched); auto secondEntry = makeNoopOplogEntry({{Seconds(456), 0}, lastFetched.getTerm()}); auto thirdEntry = makeNoopOplogEntry({{Seconds(789), 0}, lastFetched.getTerm()}); auto metadataObj = makeOplogBatchMetadata(replMetadata, oqMetadata); - dataReplicatorExternalState->shouldStopFetchingResult = true; + dataReplicatorExternalState->shouldStopFetchingResult = changeSyncSourceAction; auto shutdownState = processSingleBatch(makeFirstBatch(0, {firstEntry, secondEntry, thirdEntry}, metadataObj), @@ -1832,6 +1835,10 @@ TEST_F(OplogFetcherTest, FailedSyncSourceCheckWithBothMetadatasStopsTheOplogFetc ASSERT_EQUALS(source, dataReplicatorExternalState->lastSyncSourceChecked); ASSERT_EQUALS(oqMetadata.getLastOpApplied(), dataReplicatorExternalState->syncSourceLastOpTime); ASSERT_TRUE(dataReplicatorExternalState->syncSourceHasSyncSource); + + // We should have enqueued the last batch if the 'shouldStopFetching' check returns + // kStopSyncingAndEnqueueLastBatch. + ASSERT_FALSE(lastEnqueuedDocuments.empty()); } TEST_F(OplogFetcherTest, @@ -1845,6 +1852,19 @@ TEST_F(OplogFetcherTest, ASSERT_EQUALS(oplogQueryMetadata.getLastOpApplied(), dataReplicatorExternalState->syncSourceLastOpTime); ASSERT_FALSE(dataReplicatorExternalState->syncSourceHasSyncSource); + + // We should have enqueued the last batch if the 'shouldStopFetching' check returns + // kStopSyncingAndEnqueueLastBatch. + ASSERT_FALSE(lastEnqueuedDocuments.empty()); +} + +TEST_F(OplogFetcherTest, FailedSyncSourceCheckReturnsStopSyncingAndDropBatch) { + testSyncSourceChecking( + replSetMetadata, oqMetadata, ChangeSyncSourceAction::kStopSyncingAndDropLastBatch); + + // If the 'shouldStopFetching' check returns kStopSyncingAndDropLastBatch, we should not enqueue + // any documents. + ASSERT_TRUE(lastEnqueuedDocuments.empty()); } TEST_F(OplogFetcherTest, ValidateDocumentsReturnsNoSuchKeyIfTimestampIsNotFoundInAnyDocument) { |