diff options
Diffstat (limited to 'src/mongo/client/sdam/topology_description.cpp')
-rw-r--r-- | src/mongo/client/sdam/topology_description.cpp | 65 |
1 files changed, 15 insertions, 50 deletions
diff --git a/src/mongo/client/sdam/topology_description.cpp b/src/mongo/client/sdam/topology_description.cpp index d3783719864..f236f388e90 100644 --- a/src/mongo/client/sdam/topology_description.cpp +++ b/src/mongo/client/sdam/topology_description.cpp @@ -107,6 +107,9 @@ const boost::optional<ServerDescriptionPtr> TopologyDescription::findServerByAdd boost::optional<ServerDescriptionPtr> TopologyDescription::installServerDescription( const ServerDescriptionPtr& newServerDescription) { + LOG(2) << "(" << getSetName() << ") install ServerDescription " + << newServerDescription->toString(); + boost::optional<ServerDescriptionPtr> previousDescription; if (getType() == TopologyType::kSingle) { // For Single, there is always one ServerDescription in TopologyDescription.servers; @@ -131,6 +134,8 @@ boost::optional<ServerDescriptionPtr> TopologyDescription::installServerDescript } } + newServerDescription->_topologyDescription = shared_from_this(); + checkWireCompatibilityVersions(); calculateLogicalSessionTimeout(); return previousDescription; @@ -174,13 +179,12 @@ void TopologyDescription::checkWireCompatibilityVersions() { break; } } - _compatibleError = (_compatible) ? boost::none : boost::make_optional(errorOss.str()); } const std::string TopologyDescription::minimumRequiredMongoVersionString(int version) { switch (version) { - case RESUMABLE_INITIAL_SYNC: + case RESUMABLE_INITIAL_SYNC: return "4.4"; case SHARDED_TRANSACTIONS: return "4.2"; @@ -270,54 +274,15 @@ std::string TopologyDescription::toString() { return toBSON().toString(); } -//////////////////////// -// SdamConfiguration -//////////////////////// -SdamConfiguration::SdamConfiguration(boost::optional<std::vector<ServerAddress>> seedList, - TopologyType initialType, - mongo::Milliseconds heartBeatFrequencyMs, - boost::optional<std::string> setName) - : _seedList(seedList), - _initialType(initialType), - _heartBeatFrequencyMs(heartBeatFrequencyMs), - _setName(setName) { - uassert(ErrorCodes::InvalidSeedList, - "seed list size must be >= 1", - !seedList || (*seedList).size() >= 1); - - uassert(ErrorCodes::InvalidSeedList, - "TopologyType Single must have exactly one entry in the seed list.", - _initialType != TopologyType::kSingle || (*seedList).size() == 1); - - uassert( - ErrorCodes::InvalidTopologyType, - "Only ToplogyTypes ReplicaSetNoPrimary and Single are allowed when a setName is provided.", - !_setName || - (_initialType == TopologyType::kReplicaSetNoPrimary || - _initialType == TopologyType::kSingle)); - - uassert(ErrorCodes::TopologySetNameRequired, - "setName is required for ReplicaSetNoPrimary", - _initialType != TopologyType::kReplicaSetNoPrimary || _setName); - - uassert(ErrorCodes::InvalidHeartBeatFrequency, - "topology heartbeat must be >= 500ms", - _heartBeatFrequencyMs >= kMinHeartbeatFrequencyMS); -} -const boost::optional<std::vector<ServerAddress>>& SdamConfiguration::getSeedList() const { - return _seedList; -} - -TopologyType SdamConfiguration::getInitialType() const { - return _initialType; -} - -Milliseconds SdamConfiguration::getHeartBeatFrequency() const { - return _heartBeatFrequencyMs; -} +boost::optional<ServerDescriptionPtr> TopologyDescription::getPrimary() { + if (getType() != TopologyType::kReplicaSetWithPrimary) { + return boost::none; + } -const boost::optional<std::string>& SdamConfiguration::getSetName() const { - return _setName; + auto foundPrimaries = findServers( + [](const ServerDescriptionPtr& s) { return s->getType() == ServerType::kRSPrimary; }); + invariant(foundPrimaries.size() == 1); + return foundPrimaries[0]; } -}; // namespace mongo::sdam +} // namespace mongo::sdam |