summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Hernandez <scotthernandez@gmail.com>2014-11-07 08:22:44 -0500
committerScott Hernandez <scotthernandez@gmail.com>2014-11-13 10:52:25 -0500
commit7dc63fa1a8d6937e9dd2c029da002a7a99372b57 (patch)
treeccd6248aea91a87d8f70ac0cd459f5d1d7496240
parent44461e50ac7124b76564a400948ed7b9173504b4 (diff)
downloadmongo-7dc63fa1a8d6937e9dd2c029da002a7a99372b57.tar.gz
SERVER-16008: log remote member state changes
-rw-r--r--src/mongo/db/repl/member_heartbeat_data.cpp16
-rw-r--r--src/mongo/db/repl/member_heartbeat_data.h8
-rw-r--r--src/mongo/db/repl/topology_coordinator_impl.cpp11
3 files changed, 18 insertions, 17 deletions
diff --git a/src/mongo/db/repl/member_heartbeat_data.cpp b/src/mongo/db/repl/member_heartbeat_data.cpp
index 9892a5821b2..8ca22c40649 100644
--- a/src/mongo/db/repl/member_heartbeat_data.cpp
+++ b/src/mongo/db/repl/member_heartbeat_data.cpp
@@ -33,6 +33,8 @@
#include <climits>
#include "mongo/db/repl/member_heartbeat_data.h"
+#include "mongo/db/repl/rslog.h"
+#include "mongo/util/log.h"
namespace mongo {
namespace repl {
@@ -49,11 +51,9 @@ namespace repl {
_lastResponse.setOpTime(OpTime());
}
- void MemberHeartbeatData::setState(MemberState newState) {
- _lastResponse.setState(newState);
- }
-
- void MemberHeartbeatData::setUpValues(Date_t now, ReplSetHeartbeatResponse hbResponse) {
+ void MemberHeartbeatData::setUpValues(Date_t now,
+ const HostAndPort& host,
+ ReplSetHeartbeatResponse hbResponse) {
_health = 1;
if (_upSince == 0) {
_upSince = now;
@@ -70,6 +70,12 @@ namespace repl {
hbResponse.setOpTime(_lastResponse.getOpTime());
}
+ // Log if the state changes
+ if (_lastResponse.getState() != hbResponse.getState()){
+ log() << "Member " << host.toString() << " is now in state "
+ << hbResponse.getState().toString() << rsLog;
+ }
+
_lastResponse = hbResponse;
}
diff --git a/src/mongo/db/repl/member_heartbeat_data.h b/src/mongo/db/repl/member_heartbeat_data.h
index e268a4f58e5..624c572d33f 100644
--- a/src/mongo/db/repl/member_heartbeat_data.h
+++ b/src/mongo/db/repl/member_heartbeat_data.h
@@ -73,15 +73,9 @@ namespace repl {
bool maybeUp() const { return _health != 0; }
/**
- * Sets the member's state to "newState". This is principally valuable when modeling
- * step-down of the the local node.
- */
- void setState(MemberState newState);
-
- /**
* Sets values in this object from the results of a successful heartbeat command.
*/
- void setUpValues(Date_t now, ReplSetHeartbeatResponse hbResponse);
+ void setUpValues(Date_t now, const HostAndPort& host, ReplSetHeartbeatResponse hbResponse);
/**
* Sets values in this object from the results of a erroring/failed heartbeat command.
diff --git a/src/mongo/db/repl/topology_coordinator_impl.cpp b/src/mongo/db/repl/topology_coordinator_impl.cpp
index 1a8ff9dd60a..36548468689 100644
--- a/src/mongo/db/repl/topology_coordinator_impl.cpp
+++ b/src/mongo/db/repl/topology_coordinator_impl.cpp
@@ -857,15 +857,15 @@ namespace {
invariant(memberIndex != _selfIndex);
MemberHeartbeatData& hbData = _hbdata[memberIndex];
+ const MemberConfig member = _currentConfig.getMemberAt(memberIndex);
if (!hbResponse.isOK()) {
if (isUnauthorized) {
LOG(3) << "setAuthIssue: heartbeat response failed due to authentication"
- " issue for member _id:"
- << _currentConfig.getMemberAt(memberIndex).getId();
+ " issue for member _id:" << member.getId();
hbData.setAuthIssue(now);
} else {
LOG(3) << "setDownValues: heartbeat response failed for member _id:"
- << _currentConfig.getMemberAt(memberIndex).getId() << ", msg: "
+ << member.getId() << ", msg: "
<< hbResponse.getStatus().reason();
hbData.setDownValues(now, hbResponse.getStatus().reason());
@@ -874,9 +874,9 @@ namespace {
else {
ReplSetHeartbeatResponse hbr = hbResponse.getValue();
LOG(3) << "setUpValues: heartbeat response good for member _id:"
- << _currentConfig.getMemberAt(memberIndex).getId() << ", msg: "
+ << member.getId() << ", msg: "
<< hbr.getHbMsg();
- hbData.setUpValues(now, hbr);
+ hbData.setUpValues(now, member.getHostAndPort(), hbr);
}
HeartbeatResponseAction nextAction = _updateHeartbeatDataImpl(
memberIndex,
@@ -1241,6 +1241,7 @@ namespace {
hbResponse.setHbMsg("");
_hbdata[primaryIndex].setUpValues(
_hbdata[primaryIndex].getLastHeartbeat(),
+ _currentConfig.getMemberAt(primaryIndex).getHostAndPort(),
hbResponse);
}
_currentPrimaryIndex = primaryIndex;