diff options
author | Brett Nawrocki <brett.nawrocki@mongodb.com> | 2023-04-25 18:56:59 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-27 19:57:32 +0000 |
commit | 32e92e378aa7cb467a5174da9f2b74e03ce15006 (patch) | |
tree | 41e8048367b7c512494ad28476251b8c163d1867 | |
parent | e68a3d48d3721004f963d71861cae10395e11182 (diff) | |
download | mongo-32e92e378aa7cb467a5174da9f2b74e03ce15006.tar.gz |
SERVER-76516 Fix concurrent access of clock in Resharding Test
-rw-r--r-- | src/mongo/db/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/primary_only_service_test_fixture.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/primary_only_service_test_fixture.h | 1 | ||||
-rw-r--r-- | src/mongo/db/s/resharding/resharding_recipient_service_test.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/service_context_d_test_fixture.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/service_context_d_test_fixture.h | 2 |
6 files changed, 21 insertions, 5 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index 8ed8df9cb56..62a403863c8 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -1864,6 +1864,7 @@ env.Library( ], LIBDEPS_PRIVATE=[ '$BUILD_DIR/mongo/db/index/index_access_method', + '$BUILD_DIR/mongo/util/clock_source_mock', 'catalog/catalog_impl', 'commands/mongod', 'index_builds_coordinator_mongod', diff --git a/src/mongo/db/repl/primary_only_service_test_fixture.cpp b/src/mongo/db/repl/primary_only_service_test_fixture.cpp index 987df992cb0..9f9a6cbe944 100644 --- a/src/mongo/db/repl/primary_only_service_test_fixture.cpp +++ b/src/mongo/db/repl/primary_only_service_test_fixture.cpp @@ -42,6 +42,9 @@ namespace mongo { namespace repl { +PrimaryOnlyServiceMongoDTest::PrimaryOnlyServiceMongoDTest(bool useMockClock) + : ServiceContextMongoDTest{"ephemeralForTest", RepairAction::kNoRepair, useMockClock} {} + void PrimaryOnlyServiceMongoDTest::setUp() { ServiceContextMongoDTest::setUp(); diff --git a/src/mongo/db/repl/primary_only_service_test_fixture.h b/src/mongo/db/repl/primary_only_service_test_fixture.h index d8a386740c7..d296ac5f939 100644 --- a/src/mongo/db/repl/primary_only_service_test_fixture.h +++ b/src/mongo/db/repl/primary_only_service_test_fixture.h @@ -46,6 +46,7 @@ class PrimaryOnlyServiceRegistry; class PrimaryOnlyServiceMongoDTest : public ServiceContextMongoDTest { public: + PrimaryOnlyServiceMongoDTest(bool useMockClock = false); virtual std::unique_ptr<repl::PrimaryOnlyService> makeService( ServiceContext* serviceContext) = 0; diff --git a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp index 5dc60ca8983..6e49bfbb11c 100644 --- a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp @@ -210,15 +210,14 @@ class ReshardingRecipientServiceTest : public repl::PrimaryOnlyServiceMongoDTest public: using RecipientStateMachine = ReshardingRecipientService::RecipientStateMachine; + ReshardingRecipientServiceTest() : repl::PrimaryOnlyServiceMongoDTest{true} {} + std::unique_ptr<repl::PrimaryOnlyService> makeService(ServiceContext* serviceContext) override { return std::make_unique<ReshardingRecipientServiceForTest>(serviceContext); } void setUp() override { repl::PrimaryOnlyServiceMongoDTest::setUp(); - auto clockSource = std::make_unique<ClockSourceMock>(); - clockSource->advance(Seconds(1)); - getServiceContext()->setFastClockSource(std::move(clockSource)); auto serviceContext = getServiceContext(); auto storageMock = std::make_unique<repl::StorageInterfaceMock>(); repl::DropPendingCollectionReaper::set( diff --git a/src/mongo/db/service_context_d_test_fixture.cpp b/src/mongo/db/service_context_d_test_fixture.cpp index 98cb56fb0e0..7a89a89142f 100644 --- a/src/mongo/db/service_context_d_test_fixture.cpp +++ b/src/mongo/db/service_context_d_test_fixture.cpp @@ -50,6 +50,7 @@ #include "mongo/db/storage/storage_options.h" #include "mongo/logv2/log.h" #include "mongo/util/assert_util.h" +#include "mongo/util/clock_source_mock.h" #include "mongo/util/periodic_runner_factory.h" namespace mongo { @@ -60,7 +61,9 @@ ServiceContextMongoDTest::ServiceContextMongoDTest() ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine) : ServiceContextMongoDTest(engine, RepairAction::kNoRepair) {} -ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine, RepairAction repair) +ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine, + RepairAction repair, + bool useMockClock) : _tempDir("service_context_d_test_fixture") { _stashedStorageParams.engine = std::exchange(storageGlobalParams.engine, std::move(engine)); @@ -80,6 +83,15 @@ ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine, RepairAct } auto const serviceContext = getServiceContext(); + if (useMockClock) { + auto fastClock = std::make_unique<ClockSourceMock>(); + fastClock->advance(Seconds(1)); + serviceContext->setFastClockSource(std::move(fastClock)); + + auto preciseClock = std::make_unique<ClockSourceMock>(); + preciseClock->advance(Seconds(1)); + serviceContext->setPreciseClockSource(std::move(preciseClock)); + } serviceContext->setServiceEntryPoint(std::make_unique<ServiceEntryPointMongod>(serviceContext)); // Set up the periodic runner to allow background job execution for tests that require it. diff --git a/src/mongo/db/service_context_d_test_fixture.h b/src/mongo/db/service_context_d_test_fixture.h index f67b2b11681..389de7125db 100644 --- a/src/mongo/db/service_context_d_test_fixture.h +++ b/src/mongo/db/service_context_d_test_fixture.h @@ -47,7 +47,7 @@ protected: * Build a ServiceContextMongoDTest, using the named storage engine. */ explicit ServiceContextMongoDTest(std::string engine); - ServiceContextMongoDTest(std::string engine, RepairAction repair); + ServiceContextMongoDTest(std::string engine, RepairAction repair, bool useMockClock = false); virtual ~ServiceContextMongoDTest(); void tearDown() override; |