summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommaso Tocci <tommaso.tocci@mongodb.com>2022-07-18 12:40:51 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-07-18 13:16:32 +0000
commit30e9886c8feaf56585a0fed88e2132e85f87223a (patch)
treef22e9e0023e339f1878a7867a6790fbec5b62809
parent0d5fd57f9e55915550dd7d13340e2944c169c6e2 (diff)
downloadmongo-30e9886c8feaf56585a0fed88e2132e85f87223a.tar.gz
SERVER-67914 Remove ShardRegistry::_getShardForRSNameNoReload
-rw-r--r--src/mongo/s/client/shard.cpp2
-rw-r--r--src/mongo/s/client/shard_registry.cpp51
-rw-r--r--src/mongo/s/client/shard_registry.h8
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;