diff options
author | Kshitij Gupta <kshitij.gupta@mongodb.com> | 2021-12-20 22:46:17 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-12-29 17:57:12 +0000 |
commit | 9cbee26f2e10c87966f0766eead2c4898c50c5f1 (patch) | |
tree | 92f8a6d41413d046e0122e614f3d25a41daf5f39 | |
parent | e7234e51120edcc9bd67f0e0890c48b27df39397 (diff) | |
download | mongo-9cbee26f2e10c87966f0766eead2c4898c50c5f1.tar.gz |
SERVER-62197: Get rid of potential deadlock.
(cherry picked from commit 60c56d04a121194e16884eed520eb0676cbf0261)
-rw-r--r-- | src/mongo/db/process_health/fault_manager.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/process_health/fault_state_machine_test.cpp | 9 |
2 files changed, 5 insertions, 11 deletions
diff --git a/src/mongo/db/process_health/fault_manager.cpp b/src/mongo/db/process_health/fault_manager.cpp index a9266e9d3b6..b438ef6914f 100644 --- a/src/mongo/db/process_health/fault_manager.cpp +++ b/src/mongo/db/process_health/fault_manager.cpp @@ -231,8 +231,7 @@ boost::optional<FaultState> FaultManager::handleOk(const OptionalMessageType& me auto lk = stdx::lock_guard(_stateMutex); logMessageReceived(state(), status); - if (_config->getHealthObserverIntensity(status.getType()) == - HealthObserverIntensityEnum::kOff) { + if (!_config->isHealthObserverEnabled(status.getType())) { return boost::none; } @@ -380,7 +379,6 @@ SharedSemiFuture<void> FaultManager::startPeriodicHealthChecks() { } FaultState FaultManager::getFaultState() const { - stdx::lock_guard<Latch> lk(_stateMutex); return state(); } @@ -553,8 +551,7 @@ std::vector<HealthObserver*> FaultManager::getActiveHealthObservers() { std::vector<HealthObserver*> result; result.reserve(allObservers.size()); for (auto observer : allObservers) { - if (_config->getHealthObserverIntensity(observer->getType()) != - HealthObserverIntensityEnum::kOff) { + if (_config->isHealthObserverEnabled(observer->getType())) { result.push_back(observer); } } diff --git a/src/mongo/db/process_health/fault_state_machine_test.cpp b/src/mongo/db/process_health/fault_state_machine_test.cpp index c1d3c5efc59..5d19dbba4f1 100644 --- a/src/mongo/db/process_health/fault_state_machine_test.cpp +++ b/src/mongo/db/process_health/fault_state_machine_test.cpp @@ -279,16 +279,13 @@ TEST_F(FaultManagerTest, HealthCheckWithOffFacetCreatesNoFault) { config->setIntensityForType(faultFacetType, HealthObserverIntensityEnum::kOff); resetManager(std::move(config)); - registerMockHealthObserver(faultFacetType, [] { return 0; }); - - // Create another observer so that we don't skip the startup check state. + registerMockHealthObserver(faultFacetType, [] { return 1.0; }); + // kSystem is enabled. registerMockHealthObserver(FaultFacetType::kSystem, [] { return 0; }); + ASSERT(manager().getFaultState() == FaultState::kStartupCheck); auto initialHealthCheckFuture = manager().startPeriodicHealthChecks(); - ASSERT(manager().getFaultState() == FaultState::kStartupCheck); - manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error")); - advanceTime(Milliseconds(100)); assertSoon([this]() { return manager().getFaultState() == FaultState::kOk; }); ASSERT(initialHealthCheckFuture.isReady()); } |