@@ -365,7 +365,7 @@ void ReplicationCoordinatorImpl::_finishLoadLocalConfig(
365365 invariant (_rsConfigState == kConfigStartingUp );
366366 const PostMemberStateUpdateAction action =
367367 _setCurrentRSConfig_inlock (localConfig, myIndex.getValue ());
368- _setMyLastOptimeAndReport_inlock (&lk, lastOpTime, false );
368+ _setMyLastOptime_inlock (&lk, lastOpTime, false );
369369 _externalState->setGlobalTimestamp (lastOpTime.getTimestamp ());
370370 _updateTerm_incallback (term);
371371 LOG (1 ) << " Current term is now " << term;
@@ -760,30 +760,39 @@ void ReplicationCoordinatorImpl::setMyHeartbeatMessage(const std::string& msg) {
760760void ReplicationCoordinatorImpl::setMyLastOptimeForward (const OpTime& opTime) {
761761 stdx::unique_lock<stdx::mutex> lock (_mutex);
762762 if (opTime > _getMyLastOptime_inlock ()) {
763- _setMyLastOptimeAndReport_inlock (&lock, opTime, false );
763+ _setMyLastOptime_inlock (&lock, opTime, false );
764764 }
765765}
766766
767767void ReplicationCoordinatorImpl::setMyLastOptime (const OpTime& opTime) {
768768 stdx::unique_lock<stdx::mutex> lock (_mutex);
769- _setMyLastOptimeAndReport_inlock (&lock, opTime, false );
769+ _setMyLastOptime_inlock (&lock, opTime, false );
770770}
771771
772772void ReplicationCoordinatorImpl::resetMyLastOptime () {
773773 stdx::unique_lock<stdx::mutex> lock (_mutex);
774774 // Reset to uninitialized OpTime
775- _setMyLastOptimeAndReport_inlock (&lock, OpTime (), true );
775+ _setMyLastOptime_inlock (&lock, OpTime (), true );
776776}
777777
778- void ReplicationCoordinatorImpl::_setMyLastOptimeAndReport_inlock (
779- stdx::unique_lock<stdx::mutex>* lock, const OpTime& opTime, bool isRollbackAllowed) {
778+ void ReplicationCoordinatorImpl::_setMyLastOptime_inlock (stdx::unique_lock<stdx::mutex>* lock,
779+ const OpTime& opTime,
780+ bool isRollbackAllowed) {
780781 invariant (lock->owns_lock ());
781- _setMyLastOptime_inlock (opTime, isRollbackAllowed);
782+ SlaveInfo* mySlaveInfo = &_slaveInfo[_getMyIndexInSlaveInfo_inlock ()];
783+ invariant (isRollbackAllowed || mySlaveInfo->opTime <= opTime);
784+ _updateSlaveInfoOptime_inlock (mySlaveInfo, opTime);
782785
783786 if (getReplicationMode () != modeReplSet) {
784787 return ;
785788 }
786789
790+ for (auto & opTimeWaiter : _opTimeWaiterList) {
791+ if (*(opTimeWaiter->opTime ) <= opTime) {
792+ opTimeWaiter->condVar ->notify_all ();
793+ }
794+ }
795+
787796 if (_getMemberState_inlock ().primary ()) {
788797 return ;
789798 }
@@ -793,19 +802,6 @@ void ReplicationCoordinatorImpl::_setMyLastOptimeAndReport_inlock(
793802 _externalState->forwardSlaveProgress (); // Must do this outside _mutex
794803}
795804
796- void ReplicationCoordinatorImpl::_setMyLastOptime_inlock (const OpTime& opTime,
797- bool isRollbackAllowed) {
798- SlaveInfo* mySlaveInfo = &_slaveInfo[_getMyIndexInSlaveInfo_inlock ()];
799- invariant (isRollbackAllowed || mySlaveInfo->opTime <= opTime);
800- _updateSlaveInfoOptime_inlock (mySlaveInfo, opTime);
801-
802- for (auto & opTimeWaiter : _opTimeWaiterList) {
803- if (*(opTimeWaiter->opTime ) <= opTime) {
804- opTimeWaiter->condVar ->notify_all ();
805- }
806- }
807- }
808-
809805OpTime ReplicationCoordinatorImpl::getMyLastOptime () const {
810806 stdx::lock_guard<stdx::mutex> lock (_mutex);
811807 return _getMyLastOptime_inlock ();
@@ -2608,7 +2604,7 @@ void ReplicationCoordinatorImpl::resetLastOpTimeFromOplog(OperationContext* txn)
26082604 lastOpTime = lastOpTimeStatus.getValue ();
26092605 }
26102606 stdx::unique_lock<stdx::mutex> lk (_mutex);
2611- _setMyLastOptimeAndReport_inlock (&lk, lastOpTime, true );
2607+ _setMyLastOptime_inlock (&lk, lastOpTime, true );
26122608 _externalState->setGlobalTimestamp (lastOpTime.getTimestamp ());
26132609}
26142610
@@ -2682,10 +2678,6 @@ void ReplicationCoordinatorImpl::_setLastCommittedOpTime_inlock(const OpTime& co
26822678 return ;
26832679 }
26842680
2685- if (_getMemberState_inlock ().arbiter ()) {
2686- _setMyLastOptime_inlock (committedOpTime, false );
2687- }
2688-
26892681 _lastCommittedOpTime = committedOpTime;
26902682
26912683 auto maxSnapshotForOpTime = SnapshotInfo{committedOpTime, SnapshotName::max ()};
@@ -2727,9 +2719,7 @@ Status ReplicationCoordinatorImpl::processReplSetRequestVotes(
27272719 return {ErrorCodes::BadValue, " not using election protocol v1" };
27282720 }
27292721
2730- auto termStatus = updateTerm (args.getTerm ());
2731- if (!termStatus.isOK ())
2732- return termStatus;
2722+ updateTerm (args.getTerm ());
27332723
27342724 Status result{ErrorCodes::InternalError, " didn't set status in processReplSetRequestVotes" };
27352725 CBHStatus cbh = _replExecutor.scheduleWork (
0 commit comments