diff options
Diffstat (limited to 'src/mongo/db/repl/topology_coordinator.cpp')
-rw-r--r-- | src/mongo/db/repl/topology_coordinator.cpp | 7 |
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; } |