summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Nawrocki <brett.nawrocki@mongodb.com>2023-04-25 18:56:59 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-27 19:57:32 +0000
commit32e92e378aa7cb467a5174da9f2b74e03ce15006 (patch)
tree41e8048367b7c512494ad28476251b8c163d1867
parente68a3d48d3721004f963d71861cae10395e11182 (diff)
downloadmongo-32e92e378aa7cb467a5174da9f2b74e03ce15006.tar.gz
SERVER-76516 Fix concurrent access of clock in Resharding Test
-rw-r--r--src/mongo/db/SConscript1
-rw-r--r--src/mongo/db/repl/primary_only_service_test_fixture.cpp3
-rw-r--r--src/mongo/db/repl/primary_only_service_test_fixture.h1
-rw-r--r--src/mongo/db/s/resharding/resharding_recipient_service_test.cpp5
-rw-r--r--src/mongo/db/service_context_d_test_fixture.cpp14
-rw-r--r--src/mongo/db/service_context_d_test_fixture.h2
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;