diff options
author | Jordi Serra Torrens <jordi.serra-torrens@mongodb.com> | 2020-11-09 18:12:49 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-11-11 15:56:13 +0000 |
commit | 2ba5a7aee01d0b482f7f63d1fcabb90cb2a6897c (patch) | |
tree | 7194c8ccd4763fd9f8e2ea8d82e2728e94eb3ea2 /src | |
parent | f5ad04df2255518e16048e09dcf2baeff64bd7a8 (diff) | |
download | mongo-2ba5a7aee01d0b482f7f63d1fcabb90cb2a6897c.tar.gz |
SERVER-51880: Remove all {dropped:true} entries from config.collection on FCV upgrade
Diffstat (limited to 'src')
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 // |