MemberState TopologyCoordinatorImpl::getMemberState() const {
|
if (_selfIndex == -1) {
|
if (_rsConfig.isInitialized()) {
|
return MemberState::RS_REMOVED;
|
}
|
return MemberState::RS_STARTUP;
|
}
|
|
if (_rsConfig.isConfigServer()) {
|
if (_options.configServerMode == CatalogManager::ConfigServerMode::NONE) {
|
return MemberState::RS_REMOVED;
|
}
|
if (_options.configServerMode == CatalogManager::ConfigServerMode::CSRS) {
|
invariant(_storageEngineSupportsReadCommitted != ReadCommittedSupport::kUnknown);
|
if (_storageEngineSupportsReadCommitted == ReadCommittedSupport::kNo) {
|
return MemberState::RS_REMOVED;
|
}
|
}
|
} else {
|
if (_options.configServerMode != CatalogManager::ConfigServerMode::NONE) {
|
return MemberState::RS_REMOVED;
|
}
|
}
|
|
if (_role == Role::leader) {
|
invariant(_currentPrimaryIndex == _selfIndex);
|
return MemberState::RS_PRIMARY;
|
}
|
const MemberConfig& myConfig = _selfConfig();
|
if (myConfig.isArbiter()) {
|
return MemberState::RS_ARBITER;
|
}
|
if (((_maintenanceModeCalls > 0) || (_hasOnlyAuthErrorUpHeartbeats(_hbdata, _selfIndex))) &&
|
(_followerMode == MemberState::RS_SECONDARY)) {
|
return MemberState::RS_RECOVERING;
|
}
|
return _followerMode;
|
}
|