diff options
author | Tommaso Tocci <tommaso.tocci@mongodb.com> | 2020-10-08 13:08:28 +0200 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-10-11 13:24:44 +0000 |
commit | bd1f707b4e981aeea09d3a0e0774973b9c223eb2 (patch) | |
tree | be0826b7adce74d007ced8fd87dda281016a43db | |
parent | 7fcbd7c28648e444e108bd9e4b64e32deef9ca77 (diff) | |
download | mongo-bd1f707b4e981aeea09d3a0e0774973b9c223eb2.tar.gz |
SERVER-51342 ShardRegistry should forget connection strings of removed shards
-rw-r--r-- | src/mongo/s/client/shard_registry.cpp | 6 | ||||
-rw-r--r-- | src/mongo/s/client/shard_registry.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/mongo/s/client/shard_registry.cpp b/src/mongo/s/client/shard_registry.cpp index d1689d672c7..b19f5d7d77b 100644 --- a/src/mongo/s/client/shard_registry.cpp +++ b/src/mongo/s/client/shard_registry.cpp @@ -194,6 +194,7 @@ ShardRegistry::Cache::LookupResult ShardRegistry::_lookup(OperationContext* opCt auto name = shard->getConnString().getSetName(); ReplicaSetMonitor::remove(name); + _removeReplicaSet(name); for (auto& callback : _shardRemovalHooks) { // Run callbacks asynchronously. // TODO SERVER-50906: Consider running these callbacks synchronously. @@ -375,6 +376,11 @@ ShardRegistry::_getLatestConnStrings() const { return {{_latestConnStrings.begin(), _latestConnStrings.end()}, _rsmIncrement.load()}; } +void ShardRegistry::_removeReplicaSet(const std::string& setName) { + stdx::lock_guard<Latch> lk(_mutex); + _latestConnStrings.erase(setName); +} + void ShardRegistry::updateReplSetHosts(const ConnectionString& givenConnString, ConnectionStringUpdateType updateType) { invariant(givenConnString.type() == ConnectionString::SET || diff --git a/src/mongo/s/client/shard_registry.h b/src/mongo/s/client/shard_registry.h index c990c4b3069..7a21be7858a 100644 --- a/src/mongo/s/client/shard_registry.h +++ b/src/mongo/s/client/shard_registry.h @@ -428,6 +428,8 @@ private: std::pair<std::vector<LatestConnStrings::value_type>, Increment> _getLatestConnStrings() const; + void _removeReplicaSet(const std::string& setName); + void _initializeCacheIfNecessary() const; void _periodicReload(const executor::TaskExecutor::CallbackArgs& cbArgs); |