diff options
author | matt dannenberg <matt.dannenberg@10gen.com> | 2014-11-25 11:50:14 -0500 |
---|---|---|
committer | matt dannenberg <matt.dannenberg@10gen.com> | 2014-12-01 04:21:50 -0500 |
commit | effc9042bdca26e40230399aac85e4a94a6fd01f (patch) | |
tree | bd7c448d6a36e4599a83d945b26b2f20c5570f28 | |
parent | 175d6ecb8bef59745a73fc7769c8a281aa70c7ad (diff) | |
download | mongo-effc9042bdca26e40230399aac85e4a94a6fd01f.tar.gz |
SERVER-15849 clear SyncSourceFeedback maps on non-additive reconfigs
-rw-r--r-- | src/mongo/db/repl/sync_source_feedback.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/mongo/db/repl/sync_source_feedback.cpp b/src/mongo/db/repl/sync_source_feedback.cpp index 95f62d2a5db..8fdf7a57261 100644 --- a/src/mongo/db/repl/sync_source_feedback.cpp +++ b/src/mongo/db/repl/sync_source_feedback.cpp @@ -120,8 +120,8 @@ namespace mongo { // handshakes for those connected to us { - for (OIDMemberMap::iterator itr = _members.begin(); - itr != _members.end(); ++itr) { + OIDMemberMap::iterator itr = _members.begin(); + while (itr != _members.end()) { BSONObjBuilder slaveCmd; slaveCmd.append("replSetUpdatePosition", 1); // outer handshake indicates this is a handshake command @@ -134,8 +134,25 @@ namespace mongo { BSONObj slaveRes; try { if (!_connection->runCommand("admin", slaveCmd.obj(), slaveRes)) { - resetConnection(); - return false; + if (slaveRes["errmsg"].str().find("node could not be found ") + != std::string::npos) { + if (theReplSet->getMutableMember(itr->second->id())) { + log() << "sync source does not have member " << itr->second->id() + << " in its config and neither do we, removing member from" + " tracking"; + OIDMemberMap::iterator removeItr = itr; + ++itr; + _slaveMap.erase(_slaveMap.find(removeItr->first)); + _members.erase(removeItr); + continue; + } + // here the node exists in our config, so do not stop tracking it + // and continue with the handshaking process + } + else { + resetConnection(); + return false; + } } } catch (const DBException& e) { @@ -144,6 +161,7 @@ namespace mongo { resetConnection(); return false; } + ++itr; } } return true; @@ -321,6 +339,7 @@ namespace mongo { } else { _handshakeNeeded = false; + _positionChanged = true; } } if (_positionChanged) { |