diff options
author | Tommaso Tocci <tommaso.tocci@mongodb.com> | 2022-07-18 12:40:51 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-07-18 13:16:32 +0000 |
commit | 30e9886c8feaf56585a0fed88e2132e85f87223a (patch) | |
tree | f22e9e0023e339f1878a7867a6790fbec5b62809 | |
parent | 0d5fd57f9e55915550dd7d13340e2944c169c6e2 (diff) | |
download | mongo-30e9886c8feaf56585a0fed88e2132e85f87223a.tar.gz |
SERVER-67914 Remove ShardRegistry::_getShardForRSNameNoReload
-rw-r--r-- | src/mongo/s/client/shard.cpp | 2 | ||||
-rw-r--r-- | src/mongo/s/client/shard_registry.cpp | 51 | ||||
-rw-r--r-- | src/mongo/s/client/shard_registry.h | 8 |
3 files changed, 26 insertions, 35 deletions
diff --git a/src/mongo/s/client/shard.cpp b/src/mongo/s/client/shard.cpp index a70391501b1..87047d6e8c3 100644 --- a/src/mongo/s/client/shard.cpp +++ b/src/mongo/s/client/shard.cpp @@ -98,7 +98,7 @@ bool Shard::shouldErrorBePropagated(ErrorCodes::Error code) { Shard::Shard(const ShardId& id) : _id(id) {} bool Shard::isConfig() const { - return _id == "config"; + return _id == ShardId::kConfigServerId; } StatusWith<Shard::CommandResponse> Shard::runCommand(OperationContext* opCtx, diff --git a/src/mongo/s/client/shard_registry.cpp b/src/mongo/s/client/shard_registry.cpp index c56d7bd7d76..6070f3ea82d 100644 --- a/src/mongo/s/client/shard_registry.cpp +++ b/src/mongo/s/client/shard_registry.cpp @@ -461,36 +461,47 @@ void ShardRegistry::updateReplicaSetOnConfigServer(ServiceContext* serviceContex auto opCtx = tc->makeOperationContext(); auto const grid = Grid::get(opCtx.get()); + auto sr = grid->shardRegistry(); - std::shared_ptr<Shard> s = - grid->shardRegistry()->_getShardForRSNameNoReload(connStr.getSetName()); - if (!s) { - LOGV2_DEBUG(22730, - 1, - "Error updating replica set on config server. Couldn't find shard for " - "replica set {replicaSetConnectionStr}", - "Error updating replica set on config servers. Couldn't find shard", - "replicaSetConnectionStr"_attr = connStr); + // First check if this is a config shard lookup. + { + stdx::lock_guard<Latch> lk(sr->_mutex); + if (auto shard = sr->_configShardData.findByRSName(connStr.getSetName())) { + // No need to tell the config servers their own connection string. + return; + } + } + + auto swRegistryData = sr->_getDataAsync().getNoThrow(opCtx.get()); + if (!swRegistryData.isOK()) { + LOGV2_DEBUG( + 6791401, + 1, + "Error updating replica set on config servers. Failed to fetch shard registry data", + "replicaSetConnectionStr"_attr = connStr, + "error"_attr = swRegistryData.getStatus()); return; } - if (s->isConfig()) { - // No need to tell the config servers their own connection string. + auto shard = swRegistryData.getValue()->findByRSName(connStr.getSetName()); + if (!shard) { + LOGV2_DEBUG(6791402, + 1, + "Error updating replica set on config servers. Couldn't find shard", + "replicaSetConnectionStr"_attr = connStr); return; } auto swWasUpdated = grid->catalogClient()->updateConfigDocument( opCtx.get(), NamespaceString::kConfigsvrShardsNamespace, - BSON(ShardType::name(s->getId().toString())), + BSON(ShardType::name(shard->getId().toString())), BSON("$set" << BSON(ShardType::host(connStr.toString()))), false, ShardingCatalogClient::kMajorityWriteConcern); auto status = swWasUpdated.getStatus(); if (!status.isOK()) { LOGV2_ERROR(22736, - "Error updating replica set {replicaSetConnectionStr} on config server caused " - "by {error}", "Error updating replica set on config server", "replicaSetConnectionStr"_attr = connStr, "error"_attr = redact(status)); @@ -556,18 +567,6 @@ std::shared_ptr<Shard> ShardRegistry::getShardForHostNoReload(const HostAndPort& return data->findByHostAndPort(host); } -std::shared_ptr<Shard> ShardRegistry::_getShardForRSNameNoReload(const std::string& name) const { - // First check if this is a config shard lookup. - { - stdx::lock_guard<Latch> lk(_mutex); - if (auto shard = _configShardData.findByRSName(name)) { - return shard; - } - } - auto data = _getCachedData(); - return data->findByRSName(name); -} - ////////////// ShardRegistryData ////////////////// ShardRegistryData ShardRegistryData::createWithConfigShardOnly(std::shared_ptr<Shard> configShard) { diff --git a/src/mongo/s/client/shard_registry.h b/src/mongo/s/client/shard_registry.h index a55c02a7e6f..0a3b5d3bc09 100644 --- a/src/mongo/s/client/shard_registry.h +++ b/src/mongo/s/client/shard_registry.h @@ -414,14 +414,6 @@ private: */ Cache::ValueHandle _getCachedData() const; - /** - * Lookup shard by replica set name. Returns nullptr if the name can't be found. - * Note: this doesn't refresh the table if the name isn't found, so it's possible that a - * newly added shard/Replica Set may not be found. - * TODO SERVER-50206: Remove usage of this non-causally consistent accessor. - */ - std::shared_ptr<Shard> _getShardForRSNameNoReload(const std::string& name) const; - using LatestConnStrings = stdx::unordered_map<ShardId, ConnectionString, ShardId::Hasher>; std::pair<std::vector<LatestConnStrings::value_type>, Increment> _getLatestConnStrings() const; |