summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKshitij Gupta <kshitij.gupta@mongodb.com>2021-12-20 22:46:17 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-29 17:57:12 +0000
commit9cbee26f2e10c87966f0766eead2c4898c50c5f1 (patch)
tree92f8a6d41413d046e0122e614f3d25a41daf5f39
parente7234e51120edcc9bd67f0e0890c48b27df39397 (diff)
downloadmongo-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.cpp7
-rw-r--r--src/mongo/db/process_health/fault_state_machine_test.cpp9
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());
}