summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/topology_coordinator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/topology_coordinator.cpp')
-rw-r--r--src/mongo/db/repl/topology_coordinator.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mongo/db/repl/topology_coordinator.cpp b/src/mongo/db/repl/topology_coordinator.cpp
index 6f3daeb392a..4f7ebd4f350 100644
--- a/src/mongo/db/repl/topology_coordinator.cpp
+++ b/src/mongo/db/repl/topology_coordinator.cpp
@@ -1077,6 +1077,7 @@ HeartbeatResponseAction TopologyCoordinator::processHeartbeatResponse(
const MemberConfig member = _rsConfig.getMemberAt(memberIndex);
bool advancedOpTimeOrUpdatedConfig = false;
bool becameElectable = false;
+ bool changedMemberState = false;
if (!hbResponse.isOK()) {
if (isUnauthorized) {
hbData.setAuthIssue(now);
@@ -1105,7 +1106,10 @@ HeartbeatResponseAction TopologyCoordinator::processHeartbeatResponse(
"memberId"_attr = member.getId());
pingsInConfig++;
auto wasUnelectable = hbData.isUnelectable();
- advancedOpTimeOrUpdatedConfig = hbData.setUpValues(now, std::move(hbr));
+ auto hbChanges = hbData.setUpValues(now, std::move(hbr));
+ advancedOpTimeOrUpdatedConfig =
+ hbChanges.getOpTimeAdvanced() || hbChanges.getConfigChanged();
+ changedMemberState = hbChanges.getMemberStateChanged();
becameElectable = wasUnelectable && !hbData.isUnelectable();
}
@@ -1121,6 +1125,7 @@ HeartbeatResponseAction TopologyCoordinator::processHeartbeatResponse(
nextAction.setNextHeartbeatStartDate(nextHeartbeatStartDate);
nextAction.setAdvancedOpTimeOrUpdatedConfig(advancedOpTimeOrUpdatedConfig);
nextAction.setBecameElectable(becameElectable);
+ nextAction.setChangedMemberState(changedMemberState);
return nextAction;
}