summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2014-10-30 10:24:27 -0400
committerAndy Schwerin <schwerin@mongodb.com>2014-10-30 13:10:49 -0400
commit9cd693c414ce483c02211fe01f41540bcf4ba8bc (patch)
tree3f9119cad1f1e4fed4d97fcd32efa2426e5e1274 /src
parentf5e67009ead674efb7cf16da2c1c462cc99424db (diff)
downloadmongo-9cd693c414ce483c02211fe01f41540bcf4ba8bc.tar.gz
SERVER-15881 Do not forward slave progress or handshakes when primary.
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/repl/repl_coordinator_impl.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/mongo/db/repl/repl_coordinator_impl.cpp b/src/mongo/db/repl/repl_coordinator_impl.cpp
index 96cbb0404da..d4e20445c28 100644
--- a/src/mongo/db/repl/repl_coordinator_impl.cpp
+++ b/src/mongo/db/repl/repl_coordinator_impl.cpp
@@ -685,11 +685,14 @@ namespace {
invariant(lock->owns_lock());
_updateSlaveInfoOptime_inlock(&_slaveInfo[_getMyIndexInSlaveInfo_inlock()], ts);
- if (_getReplicationMode_inlock() == modeReplSet) {
- lock->unlock();
- _externalState->forwardSlaveProgress(); // Must do this outside _mutex
+ if (_getReplicationMode_inlock() != modeReplSet) {
+ return;
}
-
+ if (_getCurrentMemberState_inlock().primary()) {
+ return;
+ }
+ lock->unlock();
+ _externalState->forwardSlaveProgress(); // Must do this outside _mutex
}
OpTime ReplicationCoordinatorImpl::getMyLastOptime() const {
@@ -2036,7 +2039,7 @@ namespace {
somethingChanged = true;
}
- if (somethingChanged) {
+ if (somethingChanged && !_getCurrentMemberState_inlock().primary()) {
lock.unlock();
_externalState->forwardSlaveProgress(); // Must do this outside _mutex
}
@@ -2070,8 +2073,10 @@ namespace {
slaveInfo->rid = handshake.getRid();
slaveInfo->hostAndPort = member->getHostAndPort();
- lock.unlock();
- _externalState->forwardSlaveHandshake(); // must do outside _mutex
+ if (!_getCurrentMemberState_inlock().primary()) {
+ lock.unlock();
+ _externalState->forwardSlaveHandshake(); // must do outside _mutex
+ }
return Status::OK();
}