SERVER-125546 Consolidate authoritative shards feature flags into two unified flags (part 2: DDL coordinators) (#53950)
GitOrigin-RevId: a4fe9d2277d1bf05199c451b85b3e2c1d1fa1cc5
This commit is contained in:
parent
ab5f758f97
commit
f3d4df67b4
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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] = [&] {
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}();
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user