SERVER-127097 Fix multiversion handling of authoritativeMetadataAccessLevel in MigrationBlockingOperationCoordinator (#54046)

GitOrigin-RevId: 5632ae1c291fd5aa42192bc411393b1076e9c6d5
This commit is contained in:
Joan Bruguera Micó (at MongoDB) 2026-05-20 07:31:03 +00:00 committed by MongoDB Bot
parent 53931f4a8c
commit ae76ed08a6
2 changed files with 12 additions and 1 deletions

View File

@ -45,6 +45,7 @@ enums:
structs:
MigrationBlockingOperationCoordinatorDocument:
description: State documents for a MigrationBlockingOperationCoordinator.
strict: false
chained_structs:
ShardingCoordinatorMetadata: ShardingCoordinatorMetadata
fields:

View File

@ -476,7 +476,17 @@ public:
}
BSONObj toBSON() const override {
return _doc.toBSON();
auto bson = _doc.toBSON();
// TODO (SERVER-98118): Remove once v9.0 becomes last-LTS.
// In v8.x, some coordinators parse the document with strict:true, so do not serialize the
// default "none" value of authoritativeMetadataAccessLevel (see SERVER-127097).
// This is also correct for newer binaries, which interpret the missing field as "none".
if (_doc.getShardingCoordinatorMetadata().getAuthoritativeMetadataAccessLevel() ==
AuthoritativeMetadataAccessLevelEnum::kNone) {
bson = bson.removeField(
ShardingCoordinatorMetadata::kAuthoritativeMetadataAccessLevelFieldName);
}
return bson;
}
void replace(std::unique_ptr<CoordinatorStateDoc> newDoc) override {