SERVER-125546 Consolidate authoritative shards feature flags into two unified flags (part 2: DDL coordinators) (#53950)

GitOrigin-RevId: a4fe9d2277d1bf05199c451b85b3e2c1d1fa1cc5
This commit is contained in:
Joan Bruguera Micó (at MongoDB) 2026-05-19 10:51:11 +00:00 committed by MongoDB Bot
parent ab5f758f97
commit f3d4df67b4
18 changed files with 75 additions and 122 deletions

View File

@ -57,7 +57,6 @@
#include "mongo/db/shard_role/shard_catalog/participant_block_gen.h"
#include "mongo/db/sharding_environment/client/shard.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/timeseries/catalog_helper.h"
#include "mongo/db/timeseries/timeseries_collmod.h"
#include "mongo/db/timeseries/timeseries_options.h"
@ -142,6 +141,7 @@ void commitToGlobalCatalog(OperationContext* opCtx,
template <typename GetSessionFn>
void commitToShardCatalog(OperationContext* opCtx,
AuthoritativeMetadataAccessLevelEnum metadataAccessLevel,
const NamespaceString& nss,
const std::vector<ShardId>& participantsOwningChunks,
const ShardId& primaryShard,
@ -149,9 +149,7 @@ void commitToShardCatalog(OperationContext* opCtx,
GetSessionFn&& getSession,
const std::shared_ptr<executor::ScopedTaskExecutor>& executor,
const CancellationToken& token) {
if (!feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (metadataAccessLevel == AuthoritativeMetadataAccessLevelEnum::kNone) {
return;
}
@ -394,9 +392,8 @@ ExecutorFuture<void> CollModCoordinator::_runImpl(
// for updating the shard catalog with current information. This flag is
// evaluated at insertion time because on secondaries, metadata is cleared
// during the onDelete of the critical section document.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
blockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -426,6 +423,7 @@ ExecutorFuture<void> CollModCoordinator::_runImpl(
commitToShardCatalog(
opCtx,
_doc.getAuthoritativeMetadataAccessLevel(),
_collInfo->nsForTargeting,
_shardingInfo->participantsOwningChunks,
_shardingInfo->primaryShard,
@ -491,9 +489,8 @@ ExecutorFuture<void> CollModCoordinator::_runImpl(
request.setNeedsUnblock(needsUnblock);
if (needsUnblock) {
const bool isDDLAuthoritative =
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
request.setClearCollMetadata(!isDDLAuthoritative);
}

View File

@ -40,7 +40,6 @@
#include "mongo/db/global_catalog/ddl/create_database_util.h"
#include "mongo/db/global_catalog/ddl/sharded_ddl_commands_gen.h"
#include "mongo/db/global_catalog/ddl/sharding_catalog_manager.h"
#include "mongo/db/global_catalog/ddl/sharding_ddl_util.h"
#include "mongo/db/global_catalog/type_database_gen.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
@ -138,9 +137,6 @@ public:
const auto createDatabaseDDLCoordinatorFeatureFlagEnabled =
feature_flags::gCreateDatabaseDDLCoordinator.isEnabled(
VersionContext::getDecoration(opCtx), fcvSnapshot);
const auto authoritativeMetadataAccessLevel =
sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx), fcvSnapshot);
if (!createDatabaseDDLCoordinatorFeatureFlagEnabled) {
// (Ignore FCV check): The use isEnabledAndIgnoreFCVUnsafe is intentional, we
@ -166,8 +162,6 @@ public:
{{NamespaceString(dbName), CoordinatorTypeEnum::kCreateDatabase}});
coordinatorDoc.setPrimaryShard(optResolvedPrimaryShard);
coordinatorDoc.setUserSelectedPrimary(optResolvedPrimaryShard.is_initialized());
coordinatorDoc.setAuthoritativeMetadataAccessLevel(
authoritativeMetadataAccessLevel);
auto createDatabaseCoordinator =
checked_pointer_cast<CreateDatabaseCoordinator>(
ShardingCoordinatorService::getService(opCtx)->getOrCreateInstance(

View File

@ -45,7 +45,6 @@
#include "mongo/db/shard_role/shard_catalog/shard_filtering_metadata_refresh.h"
#include "mongo/db/shard_role/shard_role.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_logging.h"
#include "mongo/db/topology/sharding_state.h"
#include "mongo/db/topology/vector_clock/vector_clock_mutable.h"
@ -361,10 +360,8 @@ ExecutorFuture<void> ConvertToCappedCoordinator::_runImpl(
}();
if (_doc.getOriginalCollection().has_value()) {
const bool isAuthoritative =
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
const bool isAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
{
const auto session = getNewSession(opCtx);
@ -470,10 +467,8 @@ ExecutorFuture<void> ConvertToCappedCoordinator::_runImpl(
// When the original collection was not tracked, there is no need to clear the
// filtering metadata upon releasing the critical section because no changes to the
// global / shard catalog were made.
const bool isAuthoritative =
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
const bool isAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
std::unique_ptr<ShardingRecoveryService::BeforeReleasingCustomAction> actionPtr;
if (isAuthoritative) {
@ -569,10 +564,8 @@ ExecutorFuture<void> ConvertToCappedCoordinator::_cleanupOnAbort(
_exitCriticalSectionOnDataShard(opCtx, executor, token);
}
const bool isAuthoritative =
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
const bool isAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
std::unique_ptr<ShardingRecoveryService::BeforeReleasingCustomAction> actionPtr;
if (isAuthoritative) {
@ -606,9 +599,8 @@ void ConvertToCappedCoordinator::_enterCriticalSectionOnDataShard(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog with current information. This flag is evaluated at insertion time because on
// secondaries, metadata is cleared during the onDelete of the critical section document.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
blockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -632,9 +624,8 @@ void ConvertToCappedCoordinator::_exitCriticalSectionOnDataShard(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog (both durable and in-memory) with current information on both primary and secondary
// nodes.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
unblockCRUDOperationsRequest.setClearCollMetadata(false);
}

View File

@ -1139,6 +1139,7 @@ void enterCriticalSectionsOnCoordinator(OperationContext* opCtx,
}
void exitCriticalSectionsOnCoordinator(OperationContext* opCtx,
AuthoritativeMetadataAccessLevelEnum metadataAccessLevel,
bool throwIfReasonDiffers,
const BSONObj& critSecReason,
const NamespaceString& originalNss) {
@ -1147,9 +1148,8 @@ void exitCriticalSectionsOnCoordinator(OperationContext* opCtx,
? originalNss.getTimeseriesViewNamespace()
: originalNss;
const bool clearFilteringMetadata = !feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
const bool clearFilteringMetadata =
metadataAccessLevel == AuthoritativeMetadataAccessLevelEnum::kNone;
std::unique_ptr<ShardingRecoveryService::BeforeReleasingCustomAction> actionPtr;
if (clearFilteringMetadata) {
@ -1529,9 +1529,8 @@ void CreateCollectionCoordinator::_exitCriticalSectionOnShards(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog (both durable and in-memory) with current information on both primary and secondary
// nodes.
bool isDDLAuthoritative = feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
bool isDDLAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
if (isDDLAuthoritative) {
unblockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -1576,8 +1575,11 @@ ExecutorFuture<void> CreateCollectionCoordinator::_runImpl(
LOGV2(8119050,
"Found that collection already exists with matching option after taking "
"the collection critical section");
exitCriticalSectionsOnCoordinator(
opCtx, _firstExecution, _critSecReason, originalNss());
exitCriticalSectionsOnCoordinator(opCtx,
_doc.getAuthoritativeMetadataAccessLevel(),
_firstExecution,
_critSecReason,
originalNss());
throw ex;
}
}))
@ -2380,9 +2382,7 @@ void CreateCollectionCoordinator::_commitOnShardCatalog(
OperationContext* opCtx,
const std::shared_ptr<executor::ScopedTaskExecutor>& executor,
const CancellationToken& token) {
if (!feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() == AuthoritativeMetadataAccessLevelEnum::kNone) {
return;
}
@ -2508,8 +2508,11 @@ void CreateCollectionCoordinator::_exitCriticalSection(
// If the coordinator successfully committed the collection during a previous execution, the
// critical section may have already been released. In such case, it is safe to skip the release
// if the reason does not match because a migration may have already re-acquired it.
exitCriticalSectionsOnCoordinator(
opCtx, _firstExecution /* throwIfReasonDiffers */, _critSecReason, originalNss());
exitCriticalSectionsOnCoordinator(opCtx,
_doc.getAuthoritativeMetadataAccessLevel(),
_firstExecution /* throwIfReasonDiffers */,
_critSecReason,
originalNss());
}
ExecutorFuture<void> CreateCollectionCoordinator::_cleanupOnAbort(
@ -2563,8 +2566,11 @@ ExecutorFuture<void> CreateCollectionCoordinator::_cleanupOnAbort(
// Exit both critical sections on the coordinator
exitCriticalSectionsOnCoordinator(
opCtx, true /* throwIfReasonDiffers */, _critSecReason, originalNss());
exitCriticalSectionsOnCoordinator(opCtx,
_doc.getAuthoritativeMetadataAccessLevel(),
true /* throwIfReasonDiffers */,
_critSecReason,
originalNss());
})
.onError([this, anchor = shared_from_this()](const Status& status) {
const auto opCtxHolder = makeOperationContext();

View File

@ -66,7 +66,3 @@ structs:
userSelectedPrimary:
type: bool
description: "If the primary shard was specified by the user."
authoritativeMetadataAccessLevel:
type: AuthoritativeMetadataAccessLevel
description: "The access level to authoritative metadata granted by the FCV state at the creation of this document."
default: kNone

View File

@ -49,7 +49,6 @@
#include "mongo/db/shard_role/shard_catalog/participant_block_gen.h"
#include "mongo/db/shard_role/shard_catalog/shard_filtering_metadata_refresh.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_logging.h"
#include "mongo/db/topology/sharding_state.h"
#include "mongo/db/topology/vector_clock/vector_clock_mutable.h"
@ -297,9 +296,8 @@ void DropCollectionCoordinator::_enterCriticalSection(
// catalog with current information. This flag is evaluated at insertion time because on
// secondaries, metadata is cleared during the onDelete of the critical section document.
if (collIsTracked &&
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
blockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -372,9 +370,8 @@ void DropCollectionCoordinator::_commitDropCollection(
sharding_ddl_util::removeQueryAnalyzerMetadata(opCtx, nss(), session);
}
bool isAuthoritative = feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
bool isAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
if (collIsTracked) {
tassert(10644514,
@ -494,9 +491,8 @@ void DropCollectionCoordinator::_exitCriticalSection(
// catalog (both durable and in-memory) with current information on both primary and secondary
// nodes.
if (collIsTracked &&
feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
unblockCRUDOperationsRequest.setClearCollMetadata(false);
}

View File

@ -62,7 +62,6 @@
#include "mongo/db/shard_role/shard_catalog/participant_block_gen.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/shard_id.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_logging.h"
#include "mongo/db/tenant_id.h"
#include "mongo/db/topology/shard_registry.h"
@ -308,9 +307,8 @@ void DropDatabaseCoordinator::_dropTrackedCollection(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog with current information. This flag is evaluated at insertion time because on
// secondaries, metadata is cleared during the onDelete of the critical section document.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
blockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -338,9 +336,8 @@ void DropDatabaseCoordinator::_dropTrackedCollection(
sharding_ddl_util::removeTagsMetadataFromConfig(opCtx, nss, session);
}
bool isAuthoritative = feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
bool isAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
if (isAuthoritative) {
const auto session = getNewSession(opCtx);
@ -426,9 +423,8 @@ void DropDatabaseCoordinator::_dropTrackedCollection(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog (both durable and in-memory) with current information on both primary and
// secondary nodes.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
unblockCRUDOperationsRequest.setClearCollMetadata(false);
}

View File

@ -77,7 +77,3 @@ structs:
"The identity of the Shard that will generate the op log entries about the sharded/unsplittable collection being dropped
(which drive the behavior of change stream readers V2)."
optional: true
authoritativeMetadataAccessLevel:
type: AuthoritativeMetadataAccessLevel
description: "The access level to authoritative metadata granted by the FCV state at the creation of this document."
default: kNone

View File

@ -70,7 +70,3 @@ structs:
type: array<namespacestring>
description: "List of collections to be cloned by the destination shard."
optional: true
authoritativeMetadataAccessLevel:
type: AuthoritativeMetadataAccessLevel
description: "The access level to authoritative metadata granted by the FCV state at the creation of this document."
default: kNone

View File

@ -57,7 +57,6 @@
#include "mongo/db/shard_role/shard_catalog/shard_filtering_metadata_refresh.h"
#include "mongo/db/sharding_environment/client/shard.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_logging.h"
#include "mongo/db/topology/shard_registry.h"
#include "mongo/db/topology/sharding_state.h"
@ -281,9 +280,8 @@ ExecutorFuture<void> RefineCollectionShardKeyCoordinator::_runImpl(
// the shard catalog with current information. This flag is evaluated at insertion
// time because on secondaries, metadata is cleared during the onDelete of the
// critical section document.
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
blockCRUDOperationsRequest.setClearCollMetadata(false);
}
@ -342,9 +340,8 @@ ExecutorFuture<void> RefineCollectionShardKeyCoordinator::_runImpl(
uassertStatusOK(Shard::CommandResponse::getEffectiveStatus(commitResponse));
if (feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed) {
const auto involvedShards = getShardsWithDataForCollection(opCtx, nss());
const auto session = getNewSession(opCtx);
sharding_ddl_util::commitRefineCollectionShardKeyToShardCatalog(
@ -393,9 +390,8 @@ ExecutorFuture<void> RefineCollectionShardKeyCoordinator::_runImpl(
auto opCtxHolder = makeOperationContext();
auto* opCtx = opCtxHolder.get();
if (!feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot())) {
if (_doc.getAuthoritativeMetadataAccessLevel() ==
AuthoritativeMetadataAccessLevelEnum::kNone) {
// Refresh all shards so cache is warmed up for queries.
sharding_util::tellShardsToRefreshCollection(
opCtx, getShardsWithDataForCollection(opCtx, nss()), nss(), **executor);
@ -467,9 +463,8 @@ void RefineCollectionShardKeyCoordinator::_exitCriticalSection(
// releasing the critical section; the commit phase is responsible for updating the shard
// catalog (both durable and in-memory) with current information on both primary and secondary
// nodes.
bool isDDLAuthoritative = feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
VersionContext::getDecoration(opCtx),
serverGlobalParams.featureCompatibility.acquireFCVSnapshot());
bool isDDLAuthoritative = _doc.getAuthoritativeMetadataAccessLevel() >=
AuthoritativeMetadataAccessLevelEnum::kWritesAllowed;
if (isDDLAuthoritative) {
unblockCRUDOperationsRequest.setClearCollMetadata(false);
}

View File

@ -143,3 +143,7 @@ structs:
description: "Error triggering the cleanup pipeline"
type: error_status
optional: true
authoritativeMetadataAccessLevel:
type: AuthoritativeMetadataAccessLevel
description: "The access level to authoritative metadata granted by the FCV state at the creation of this document."
default: kNone

View File

@ -56,6 +56,7 @@
#include "mongo/db/global_catalog/ddl/rename_collection_coordinator.h"
#include "mongo/db/global_catalog/ddl/set_allow_migrations_coordinator.h"
#include "mongo/db/global_catalog/ddl/sharding_coordinator.h"
#include "mongo/db/global_catalog/ddl/sharding_ddl_util.h"
#include "mongo/db/global_catalog/ddl/split_chunk_coordinator.h"
#include "mongo/db/global_catalog/ddl/timeseries_upgrade_downgrade_coordinator.h"
#include "mongo/db/global_catalog/ddl/untrack_unsplittable_collection_coordinator.h"
@ -432,6 +433,9 @@ ShardingCoordinatorService::getOrCreateInstance(OperationContext* opCtx,
coorMetadata.setDatabaseVersion(
OperationShardingState::get(opCtx).getDbVersion(coorMetadata.getId().getNss().dbName()));
coorMetadata.setForwardableOpMetadata(forwardableOpMetadata);
coorMetadata.setAuthoritativeMetadataAccessLevel(
sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx), fcvRegion->acquireFCVSnapshot()));
const auto patchedCoorDoc = coorDoc.addFields(coorMetadata.toBSON());
auto [coordinator, created] = [&] {

View File

@ -431,7 +431,7 @@ MONGO_MOD_PRIVATE void commitCreateCollectionMetadataToShardCatalog(
/**
* Based on the FCV, get the where the DDL needs to act accordingly to the database
* authoritativeness.
* or collection metadata authoritativeness.
*/
MONGO_MOD_NEEDS_REPLACEMENT AuthoritativeMetadataAccessLevelEnum
getGrantedAuthoritativeMetadataAccessLevel(const VersionContext& vCtx,

View File

@ -38,7 +38,6 @@
#include "mongo/db/global_catalog/ddl/sharded_ddl_commands_gen.h"
#include "mongo/db/global_catalog/ddl/sharding_coordinator_gen.h"
#include "mongo/db/global_catalog/ddl/sharding_coordinator_service.h"
#include "mongo/db/global_catalog/ddl/sharding_ddl_util.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/profile_settings.h"
@ -114,16 +113,10 @@ public:
// which cannot be nested. Therefore, the VersionContext shouldn't have
// an OFCV yet.
invariant(!VersionContext::getDecoration(opCtx).hasOperationFCV());
const auto authoritativeMetadataAccessLevel =
sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx),
fcvRegion->acquireFCVSnapshot());
DropDatabaseCoordinatorDocument coordinatorDoc;
coordinatorDoc.setShardingCoordinatorMetadata(
{{ns(), CoordinatorTypeEnum::kDropDatabase}});
coordinatorDoc.setAuthoritativeMetadataAccessLevel(
authoritativeMetadataAccessLevel);
dropDatabaseCoordinator = checked_pointer_cast<DropDatabaseCoordinator>(
service->getOrCreateInstance(

View File

@ -41,6 +41,7 @@
#include "mongo/db/global_catalog/ddl/merge_chunk_request_gen.h"
#include "mongo/db/global_catalog/ddl/merge_chunks_coordinator.h"
#include "mongo/db/global_catalog/ddl/sharding_catalog_manager.h"
#include "mongo/db/global_catalog/ddl/sharding_ddl_util.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/repl/read_concern_args.h"
@ -52,7 +53,6 @@
#include "mongo/db/shard_role/shard_catalog/collection_sharding_runtime.h"
#include "mongo/db/shard_role/shard_catalog/shard_filtering_metadata_refresh.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_runtime_d_params_gen.h"
#include "mongo/db/topology/cluster_role.h"
#include "mongo/db/topology/sharding_state.h"
@ -92,9 +92,10 @@ bool tryRunMergeChunksCoordinator(OperationContext* opCtx,
for (int retries = 0; retries < maxConflictRetries; ++retries) {
boost::optional<FixedFCVRegion> optFixedFcvRegion{boost::in_place_init, opCtx};
if (!feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
if (sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx),
optFixedFcvRegion.get()->acquireFCVSnapshot())) {
optFixedFcvRegion.get()->acquireFCVSnapshot()) ==
AuthoritativeMetadataAccessLevelEnum::kNone) {
return false;
}

View File

@ -49,7 +49,6 @@
#include "mongo/db/sharding_environment/client/shard.h"
#include "mongo/db/sharding_environment/grid.h"
#include "mongo/db/sharding_environment/shard_id.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/topology/shard_registry.h"
#include "mongo/db/topology/sharding_state.h"
#include "mongo/util/assert_util.h"
@ -102,9 +101,6 @@ public:
// The Operation FCV is currently propagated only for DDL operations,
// which cannot be nested. Therefore, the VersionContext shouldn't have an OFCV yet.
invariant(!VersionContext::getDecoration(opCtx).hasOperationFCV());
const auto authoritativeMetadataAccessLevel =
sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx), fcvRegion->acquireFCVSnapshot());
auto shardRegistry = Grid::get(opCtx)->shardRegistry();
// Ensure that the shard information is up-to-date as possible to catch the case
@ -120,7 +116,6 @@ public:
doc.setShardingCoordinatorMetadata(
{{dbNss, CoordinatorTypeEnum::kMovePrimary}});
doc.setToShardId(toShard->getId());
doc.setAuthoritativeMetadataAccessLevel(authoritativeMetadataAccessLevel);
return doc.toBSON();
}();

View File

@ -33,6 +33,7 @@
#include "mongo/db/commands.h"
#include "mongo/db/commands/feature_compatibility_version.h"
#include "mongo/db/global_catalog/ddl/sharded_ddl_commands_gen.h"
#include "mongo/db/global_catalog/ddl/sharding_ddl_util.h"
#include "mongo/db/global_catalog/ddl/split_chunk.h"
#include "mongo/db/global_catalog/ddl/split_chunk_coordinator.h"
#include "mongo/db/global_catalog/type_chunk.h"
@ -40,7 +41,6 @@
#include "mongo/db/s/chunk_operation_precondition_checks.h"
#include "mongo/db/service_context.h"
#include "mongo/db/shard_role/shard_catalog/shard_filtering_metadata_refresh.h"
#include "mongo/db/sharding_environment/sharding_feature_flags_gen.h"
#include "mongo/db/sharding_environment/sharding_runtime_d_params_gen.h"
#include "mongo/db/topology/sharding_state.h"
#include "mongo/db/version_context.h"
@ -76,9 +76,10 @@ bool tryRunSplitChunkCoordinator(OperationContext* opCtx,
for (int retries = 0; retries < maxConflictRetries; ++retries) {
boost::optional<FixedFCVRegion> optFixedFcvRegion{boost::in_place_init, opCtx};
if (!feature_flags::gShardAuthoritativeCollMetadata.isEnabled(
if (sharding_ddl_util::getGrantedAuthoritativeMetadataAccessLevel(
VersionContext::getDecoration(opCtx),
optFixedFcvRegion.get()->acquireFCVSnapshot())) {
optFixedFcvRegion.get()->acquireFCVSnapshot()) ==
AuthoritativeMetadataAccessLevelEnum::kNone) {
return false;
}

View File

@ -146,14 +146,6 @@ feature_flags:
default: false
fcv_gated: true
enable_on_transitional_fcv_UNSAFE: true
# TODO (SERVER-89169): remove once 9.0 becomes last LTS.
featureFlagShardAuthoritativeCollMetadata:
description:
"Feature flag to enable the authoritative model for storing shard-local information
for collections and chunks metadata."
cpp_varname: feature_flags::gShardAuthoritativeCollMetadata
default: false
fcv_gated: true
# TODO (SERVER-100309): remove once 9.0 becomes last LTS.
featureFlagSessionsCollectionCoordinatorOnConfigServer:
description: