diff options
Diffstat (limited to 'src/mongo/db/s/shard_metadata_util.cpp')
-rw-r--r-- | src/mongo/db/s/shard_metadata_util.cpp | 80 |
1 files changed, 20 insertions, 60 deletions
diff --git a/src/mongo/db/s/shard_metadata_util.cpp b/src/mongo/db/s/shard_metadata_util.cpp index dade37ea0e5..37e78540c23 100644 --- a/src/mongo/db/s/shard_metadata_util.cpp +++ b/src/mongo/db/s/shard_metadata_util.cpp @@ -401,6 +401,26 @@ Status updateShardChunks(OperationContext* opCtx, } } +void updateTimestampOnShardCollections(OperationContext* opCtx, + const NamespaceString& nss, + const boost::optional<Timestamp>& timestamp) { + write_ops::Update clearFields(NamespaceString::kShardConfigCollectionsNamespace, [&] { + write_ops::UpdateOpEntry u; + u.setQ(BSON(ShardCollectionType::kNssFieldName << nss.ns())); + BSONObj updateOp = (timestamp) + ? BSON("$set" << BSON(CollectionType::kTimestampFieldName << *timestamp)) + : BSON("$unset" << BSON(ShardCollectionType::kPre50CompatibleAllowMigrationsFieldName + << "" << CollectionType::kTimestampFieldName << "")); + u.setU(write_ops::UpdateModification::parseFromClassicUpdate(updateOp)); + return std::vector{u}; + }()); + + DBDirectClient client(opCtx); + const auto commandResult = client.runCommand(clearFields.serialize({})); + + uassertStatusOK(getStatusFromWriteCommandResponse(commandResult->getCommandReply())); +} + Status dropChunksAndDeleteCollectionsEntry(OperationContext* opCtx, const NamespaceString& nss) { try { DBDirectClient client(opCtx); @@ -487,65 +507,5 @@ Status deleteDatabasesEntry(OperationContext* opCtx, StringData dbName) { } } -void downgradeShardConfigDatabasesEntriesToPre49(OperationContext* opCtx) { - LOGV2(5258804, "Starting downgrade of config.cache.databases"); - if (feature_flags::gShardingFullDDLSupportTimestampedVersion.isEnabledAndIgnoreFCV()) { - write_ops::Update clearFields(NamespaceString::kShardConfigDatabasesNamespace, [] { - write_ops::UpdateOpEntry u; - u.setQ({}); - u.setU(write_ops::UpdateModification::parseFromClassicUpdate( - BSON("$unset" << BSON( - ShardDatabaseType::version() + "." + DatabaseVersion::kTimestampFieldName - << "")))); - u.setMulti(true); - return std::vector{u}; - }()); - - clearFields.setWriteCommandBase([] { - write_ops::WriteCommandBase base; - base.setOrdered(false); - return base; - }()); - - DBDirectClient client(opCtx); - const auto commandResult = client.runCommand(clearFields.serialize({})); - - uassertStatusOK(getStatusFromWriteCommandResponse(commandResult->getCommandReply())); - LOGV2(5258805, "Successfully downgraded config.cache.databases"); - } -} - -void downgradeShardConfigCollectionEntriesToPre49(OperationContext* opCtx) { - // Clear the 'allowMigrations' and 'timestamp' fields from config.cache.collections - LOGV2(5189100, "Starting downgrade of config.cache.collections"); - write_ops::Update clearFields(NamespaceString::kShardConfigCollectionsNamespace, [] { - BSONObj unsetFields = - BSON(ShardCollectionType::kPre50CompatibleAllowMigrationsFieldName << ""); - if (feature_flags::gShardingFullDDLSupportTimestampedVersion.isEnabledAndIgnoreFCV()) { - unsetFields = unsetFields.addFields(BSON(CollectionType::kTimestampFieldName << "")); - } - - write_ops::UpdateOpEntry u; - u.setQ({}); - u.setU( - write_ops::UpdateModification::parseFromClassicUpdate(BSON("$unset" << unsetFields))); - u.setMulti(true); - return std::vector{u}; - }()); - - clearFields.setWriteCommandBase([] { - write_ops::WriteCommandBase base; - base.setOrdered(false); - return base; - }()); - - DBDirectClient client(opCtx); - const auto commandResult = client.runCommand(clearFields.serialize({})); - - uassertStatusOK(getStatusFromWriteCommandResponse(commandResult->getCommandReply())); - - LOGV2(5189101, "Successfully downgraded config.cache.collections"); -} - } // namespace shardmetadatautil } // namespace mongo |