StatusWith<int> validateConfigForInitiate(ReplicationCoordinatorExternalState* externalState, const ReplSetConfig& newConfig, ServiceContext* ctx) { Status status = newConfig.validate(); if (!status.isOK()) { return StatusWith<int>(status); } status = newConfig.checkIfWriteConcernCanBeSatisfied(newConfig.getDefaultWriteConcern()); if (!status.isOK()) { return status.withContext( "Found invalid default write concern in 'getLastErrorDefaults' field"); } status = validateArbiterPriorities(newConfig); if (!status.isOK()) { return StatusWith<int>(status); } if (newConfig.getConfigVersion() != 1) { return StatusWith<int>(ErrorCodes::NewReplicaSetConfigurationIncompatible, str::stream() << "Configuration used to initiate a replica set must " << " have version 1, but found " << newConfig.getConfigVersion()); } return findSelfInConfigIfElectable(externalState, newConfig, ctx); }
Status checkQuorumForReconfig(executor::TaskExecutor* executor, const ReplSetConfig& rsConfig, const int myIndex, long long term) { invariant(rsConfig.getConfigVersion() > 1); return checkQuorumGeneral(executor, rsConfig, myIndex, term, "reconfig quorum check"); }
Status checkQuorumForInitiate(executor::TaskExecutor* executor, const ReplSetConfig& rsConfig, const int myIndex, long long term) { invariant(rsConfig.getConfigVersion() == 1); return checkQuorumGeneral(executor, rsConfig, myIndex, term); }