MockReplicaSet::MockReplicaSet(const string& setName, size_t nodes) : _setName(setName) { BSONObjBuilder configBuilder; configBuilder.append("_id", setName); configBuilder.append("version", 1); BSONArrayBuilder membersBuilder(configBuilder.subarrayStart("members")); for (size_t n = 0; n < nodes; n++) { std::stringstream str; str << "$" << setName << n << ":27017"; const string hostName(str.str()); if (n == 0) { _primaryHost = hostName; } MockRemoteDBServer* mockServer = new MockRemoteDBServer(hostName); _nodeMap[hostName] = mockServer; MockConnRegistry::get()->addServer(mockServer); membersBuilder.append(BSON("_id" << static_cast<int>(n) << "host" << hostName)); } membersBuilder.done(); ReplicaSetConfig replConfig; fassert(28566, replConfig.initialize(configBuilder.obj())); fassert(28573, replConfig.validate()); setConfig(replConfig); }
StatusWith<int> validateConfigForHeartbeatReconfig( ReplicationCoordinatorExternalState* externalState, const ReplicaSetConfig& newConfig) { Status status = newConfig.validate(); if (!status.isOK()) { return StatusWith<int>(status); } return findSelfInConfig(externalState, newConfig); }
StatusWith<int> validateConfigForInitiate(ReplicationCoordinatorExternalState* externalState, const ReplicaSetConfig& newConfig) { Status status = newConfig.validate(); 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); }
StatusWith<int> validateConfigForStartUp(ReplicationCoordinatorExternalState* externalState, const ReplicaSetConfig& oldConfig, const ReplicaSetConfig& newConfig) { Status status = newConfig.validate(); if (!status.isOK()) { return StatusWith<int>(status); } if (oldConfig.isInitialized()) { status = validateOldAndNewConfigsCompatible(oldConfig, newConfig); if (!status.isOK()) { return StatusWith<int>(status); } } return findSelfInConfig(externalState, newConfig); }
StatusWith<int> validateConfigForReconfig(ReplicationCoordinatorExternalState* externalState, const ReplicaSetConfig& oldConfig, const ReplicaSetConfig& newConfig, bool force) { Status status = newConfig.validate(); if (!status.isOK()) { return StatusWith<int>(status); } status = validateOldAndNewConfigsCompatible(oldConfig, newConfig); if (!status.isOK()) { return StatusWith<int>(status); } if (force) { return findSelfInConfig(externalState, newConfig); } return findSelfInConfigIfElectable(externalState, newConfig); }
ReplicaSetConfig ReplCoordTest::assertMakeRSConfig(const BSONObj& configBson) { ReplicaSetConfig config; ASSERT_OK(config.initialize(configBson)); ASSERT_OK(config.validate()); return config; }