summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJordi Serra Torrens <jordi.serra-torrens@mongodb.com>2020-11-09 18:12:49 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-11-11 15:56:13 +0000
commit2ba5a7aee01d0b482f7f63d1fcabb90cb2a6897c (patch)
tree7194c8ccd4763fd9f8e2ea8d82e2728e94eb3ea2 /src
parentf5ad04df2255518e16048e09dcf2baeff64bd7a8 (diff)
downloadmongo-2ba5a7aee01d0b482f7f63d1fcabb90cb2a6897c.tar.gz
SERVER-51880: Remove all {dropped:true} entries from config.collection on FCV upgrade
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/commands/set_feature_compatibility_version_command.cpp14
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager.cpp9
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager.h11
3 files changed, 33 insertions, 1 deletions
diff --git a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp
index c2e9cfe5cec..3a69b2340f3 100644
--- a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp
+++ b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp
@@ -243,8 +243,20 @@ public:
_deleteHaystackIndexesOnUpgrade(opCtx);
}
- // Upgrade shards before config finishes its upgrade.
if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) {
+ if (actualVersion ==
+ ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo44 ||
+ actualVersion ==
+ ServerGlobalParams::FeatureCompatibility::Version::kUpgradingFrom44To47 ||
+ actualVersion ==
+ ServerGlobalParams::FeatureCompatibility::Version::kUpgradingFrom44To48 ||
+ actualVersion ==
+ ServerGlobalParams::FeatureCompatibility::Version::kUpgradingFrom44To49) {
+ // SERVER-52630: Remove once 5.0 becomes the LastLTS
+ ShardingCatalogManager::get(opCtx)->removeDroppedCollectionsMetadata(opCtx);
+ }
+
+ // Upgrade shards before config finishes its upgrade.
uassertStatusOK(
ShardingCatalogManager::get(opCtx)->setFeatureCompatibilityVersionOnShards(
opCtx, CommandHelpers::appendMajorityWriteConcern(request.toBSON({}))));
diff --git a/src/mongo/db/s/config/sharding_catalog_manager.cpp b/src/mongo/db/s/config/sharding_catalog_manager.cpp
index ff8e7c04f8d..bb1c707407c 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager.cpp
@@ -436,6 +436,15 @@ Status ShardingCatalogManager::setFeatureCompatibilityVersionOnShards(OperationC
return Status::OK();
}
+void ShardingCatalogManager::removeDroppedCollectionsMetadata(OperationContext* opCtx) {
+ const auto catalogClient = Grid::get(opCtx)->catalogClient();
+ uassertStatusOK(
+ catalogClient->removeConfigDocuments(opCtx,
+ CollectionType::ConfigNS,
+ BSON("dropped" << true),
+ ShardingCatalogClient::kMajorityWriteConcern));
+}
+
Lock::ExclusiveLock ShardingCatalogManager::lockZoneMutex(OperationContext* opCtx) {
Lock::ExclusiveLock lk(opCtx->lockState(), _kZoneOpLock);
return lk;
diff --git a/src/mongo/db/s/config/sharding_catalog_manager.h b/src/mongo/db/s/config/sharding_catalog_manager.h
index 5ae612814fd..06022f7b242 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager.h
+++ b/src/mongo/db/s/config/sharding_catalog_manager.h
@@ -444,6 +444,17 @@ public:
*/
Status setFeatureCompatibilityVersionOnShards(OperationContext* opCtx, const BSONObj& cmdObj);
+ /**
+ * Removes all entries from the config server's config.collections where 'dropped' is true.
+ *
+ * Before v5.0, when a collection was dropped, its entry in config.collections remained, tagged
+ * as 'dropped: true'. As those are no longer needed, this method cleans up the leftover
+ * metadata.
+ *
+ * It shall be called on FCV 4.4 to 5.0 upgrade.
+ */
+ void removeDroppedCollectionsMetadata(OperationContext* opCtx);
+
//
// For Diagnostics
//