summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/shard_metadata_util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/shard_metadata_util.cpp')
-rw-r--r--src/mongo/db/s/shard_metadata_util.cpp80
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