diff options
author | Andy Schwerin <schwerin@mongodb.com> | 2014-10-30 10:24:27 -0400 |
---|---|---|
committer | Andy Schwerin <schwerin@mongodb.com> | 2014-10-30 13:10:49 -0400 |
commit | 9cd693c414ce483c02211fe01f41540bcf4ba8bc (patch) | |
tree | 3f9119cad1f1e4fed4d97fcd32efa2426e5e1274 /src | |
parent | f5e67009ead674efb7cf16da2c1c462cc99424db (diff) | |
download | mongo-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.cpp | 19 |
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(); } |