diff options
-rw-r--r-- | src/mongo/db/repl/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail_test.cpp | 33 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail_test_fixture.cpp | 23 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail_test_fixture.h | 2 |
4 files changed, 22 insertions, 37 deletions
diff --git a/src/mongo/db/repl/SConscript b/src/mongo/db/repl/SConscript index 064d3244740..4fc00aa268e 100644 --- a/src/mongo/db/repl/SConscript +++ b/src/mongo/db/repl/SConscript @@ -656,6 +656,7 @@ env.Library( 'oplog_application', 'replication_process', 'replmocks', + 'storage_interface_impl', '$BUILD_DIR/mongo/db/catalog/document_validation', '$BUILD_DIR/mongo/db/op_observer_d', '$BUILD_DIR/mongo/db/service_context_d_test_fixture', diff --git a/src/mongo/db/repl/sync_tail_test.cpp b/src/mongo/db/repl/sync_tail_test.cpp index 386fbada946..68359c36229 100644 --- a/src/mongo/db/repl/sync_tail_test.cpp +++ b/src/mongo/db/repl/sync_tail_test.cpp @@ -55,12 +55,9 @@ #include "mongo/db/repl/idempotency_test_fixture.h" #include "mongo/db/repl/oplog.h" #include "mongo/db/repl/oplog_interface_local.h" -#include "mongo/db/repl/replication_consistency_markers_mock.h" #include "mongo/db/repl/replication_coordinator.h" -#include "mongo/db/repl/replication_coordinator_mock.h" #include "mongo/db/repl/replication_process.h" #include "mongo/db/repl/storage_interface.h" -#include "mongo/db/repl/storage_interface_mock.h" #include "mongo/db/repl/sync_tail.h" #include "mongo/db/service_context.h" #include "mongo/db/service_context_d_test_fixture.h" @@ -643,18 +640,6 @@ TEST_F(SyncTailTest, MultiApplyAssignsOperationsToWriterThreadsBasedOnNamespaceH auto op1 = makeInsertDocumentOplogEntry({Timestamp(Seconds(1), 0), 1LL}, nss1, BSON("x" << 1)); auto op2 = makeInsertDocumentOplogEntry({Timestamp(Seconds(2), 0), 1LL}, nss2, BSON("x" << 2)); - NamespaceString nssForInsert; - std::vector<InsertStatement> operationsWrittenToOplog; - _storageInterface->insertDocumentsFn = [&mutex, &nssForInsert, &operationsWrittenToOplog]( - OperationContext* opCtx, - const NamespaceString& nss, - const std::vector<InsertStatement>& docs) { - stdx::lock_guard<stdx::mutex> lock(mutex); - nssForInsert = nss; - operationsWrittenToOplog = docs; - return Status::OK(); - }; - SyncTail syncTail(nullptr, applyOperationFn, writerPool.get()); auto lastOpTime = unittest::assertGet(syncTail.multiApply(_opCtx.get(), {op1, op2})); ASSERT_EQUALS(op2.getOpTime(), lastOpTime); @@ -675,11 +660,23 @@ TEST_F(SyncTailTest, MultiApplyAssignsOperationsToWriterThreadsBasedOnNamespaceH } // Check ops in oplog. + // Obtain the last 2 entries in the oplog using a reverse collection scan. stdx::lock_guard<stdx::mutex> lock(mutex); + auto storage = StorageInterface::get(_opCtx.get()); + auto operationsWrittenToOplog = + unittest::assertGet(storage->findDocuments(_opCtx.get(), + NamespaceString::kRsOplogNamespace, + {}, + StorageInterface::ScanDirection::kBackward, + {}, + BoundInclusion::kIncludeStartKeyOnly, + 2U)); ASSERT_EQUALS(2U, operationsWrittenToOplog.size()); - ASSERT_EQUALS(NamespaceString::kRsOplogNamespace, nssForInsert); - ASSERT_EQUALS(op1, unittest::assertGet(OplogEntry::parse(operationsWrittenToOplog[0].doc))); - ASSERT_EQUALS(op2, unittest::assertGet(OplogEntry::parse(operationsWrittenToOplog[1].doc))); + + auto lastEntry = unittest::assertGet(OplogEntry::parse(operationsWrittenToOplog[0])); + auto secondToLastEntry = unittest::assertGet(OplogEntry::parse(operationsWrittenToOplog[1])); + ASSERT_EQUALS(op1, secondToLastEntry); + ASSERT_EQUALS(op2, lastEntry); } TEST_F(SyncTailTest, MultiSyncApplyUsesSyncApplyToApplyOperation) { diff --git a/src/mongo/db/repl/sync_tail_test_fixture.cpp b/src/mongo/db/repl/sync_tail_test_fixture.cpp index 4d84411e4ea..fb7fc2888b6 100644 --- a/src/mongo/db/repl/sync_tail_test_fixture.cpp +++ b/src/mongo/db/repl/sync_tail_test_fixture.cpp @@ -39,7 +39,8 @@ #include "mongo/db/repl/replication_coordinator_mock.h" #include "mongo/db/repl/replication_process.h" #include "mongo/db/repl/replication_recovery_mock.h" -#include "mongo/db/repl/storage_interface_mock.h" +#include "mongo/db/repl/storage_interface.h" +#include "mongo/db/repl/storage_interface_impl.h" namespace mongo { namespace repl { @@ -93,28 +94,16 @@ void SyncTailTest::setUp() { ReplicationCoordinator::set(service, stdx::make_unique<ReplicationCoordinatorMock>(service)); ASSERT_OK(ReplicationCoordinator::get(_opCtx.get())->setFollowerMode(MemberState::RS_PRIMARY)); - auto storageInterface = stdx::make_unique<StorageInterfaceMock>(); - _storageInterface = storageInterface.get(); - storageInterface->insertDocumentsFn = - [](OperationContext*, const NamespaceString&, const std::vector<InsertStatement>&) { - return Status::OK(); - }; - - // Storage interface mock should get the real uuid. - storageInterface->getCollectionUUIDFn = []( - OperationContext* opCtx, const NamespaceString& nss) -> StatusWith<OptionalCollectionUUID> { - AutoGetCollectionForRead autoColl(opCtx, nss); - return autoColl.getCollection()->uuid(); - }; + StorageInterface::set(service, stdx::make_unique<StorageInterfaceImpl>()); + auto storageInterface = StorageInterface::get(service); - StorageInterface::set(service, std::move(storageInterface)); DropPendingCollectionReaper::set( - service, stdx::make_unique<DropPendingCollectionReaper>(_storageInterface)); + service, stdx::make_unique<DropPendingCollectionReaper>(storageInterface)); repl::setOplogCollectionName(service); repl::createOplog(_opCtx.get()); _replicationProcess = - new ReplicationProcess(_storageInterface, + new ReplicationProcess(storageInterface, stdx::make_unique<ReplicationConsistencyMarkersMock>(), stdx::make_unique<ReplicationRecoveryMock>()); ReplicationProcess::set(cc().getServiceContext(), diff --git a/src/mongo/db/repl/sync_tail_test_fixture.h b/src/mongo/db/repl/sync_tail_test_fixture.h index 8da915d2089..f1e41dce6e9 100644 --- a/src/mongo/db/repl/sync_tail_test_fixture.h +++ b/src/mongo/db/repl/sync_tail_test_fixture.h @@ -42,7 +42,6 @@ class OperationContext; namespace repl { class ReplicationProcess; -class StorageInterfaceMock; /** * OpObserver for SyncTail test fixture. @@ -110,7 +109,6 @@ protected: SyncTail::ApplyOperationInLockFn _applyOp; SyncTail::ApplyCommandInLockFn _applyCmd; SyncTail::IncrementOpsAppliedStatsFn _incOps; - StorageInterfaceMock* _storageInterface = nullptr; ReplicationProcess* _replicationProcess = nullptr; SyncTailOpObserver* _opObserver = nullptr; |