void NetworkInterfaceMock::incrementNow(Milliseconds inc) { boost::lock_guard<boost::mutex> lk(_mutex); invariant(inc.total_milliseconds() > 0); _now += inc.total_milliseconds(); _executor->signalWorkForTest(); _timeElapsed.notify_all(); }
Status LegacyReplicationCoordinator::_stepDownHelper(OperationContext* txn, bool force, const Milliseconds& initialWaitTime, const Milliseconds& stepdownTime, const Milliseconds& postStepdownWaitTime) { invariant(getReplicationMode() == modeReplSet); if (!getCurrentMemberState().primary()) { return Status(ErrorCodes::NotMaster, "not primary so can't step down"); } if (!force) { Status status = _waitForSecondary(initialWaitTime, Milliseconds(10 * 1000)); if (!status.isOK()) { return status; } } // step down bool worked = repl::theReplSet->stepDown(txn, stepdownTime.total_seconds()); if (!worked) { return Status(ErrorCodes::NotMaster, "not primary so can't step down"); } if (postStepdownWaitTime.total_milliseconds() > 0) { log() << "waiting for secondaries to catch up" << endl; // The only caller of this with a non-zero postStepdownWaitTime is // stepDownAndWaitForSecondary, and the only caller of that is the shutdown command // which doesn't actually care if secondaries failed to catch up here, so we ignore the // return status of _waitForSecondary _waitForSecondary(postStepdownWaitTime, Milliseconds(0)); } return Status::OK(); }