summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/repl/SConscript1
-rw-r--r--src/mongo/db/repl/sync_tail_test.cpp33
-rw-r--r--src/mongo/db/repl/sync_tail_test_fixture.cpp23
-rw-r--r--src/mongo/db/repl/sync_tail_test_fixture.h2
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;