diff options
-rw-r--r-- | src/mongo/db/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/feature_flag.cpp | 10 | ||||
-rw-r--r-- | src/mongo/db/feature_flag.h | 7 | ||||
-rw-r--r-- | src/mongo/db/mongod_main.cpp | 14 | ||||
-rw-r--r-- | src/mongo/idl/cluster_server_parameter_initializer.cpp | 24 | ||||
-rw-r--r-- | src/mongo/idl/cluster_server_parameter_initializer.h | 41 |
6 files changed, 35 insertions, 62 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index b29f0b4135c..250765a6ec6 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -2294,7 +2294,6 @@ env.Library( '$BUILD_DIR/mongo/db/s/query_analysis_writer', '$BUILD_DIR/mongo/db/set_change_stream_state_coordinator', '$BUILD_DIR/mongo/idl/cluster_server_parameter', - '$BUILD_DIR/mongo/idl/cluster_server_parameter_initializer', '$BUILD_DIR/mongo/idl/cluster_server_parameter_op_observer', '$BUILD_DIR/mongo/s/catalog/sharding_catalog_client_impl', '$BUILD_DIR/mongo/s/grid', diff --git a/src/mongo/db/feature_flag.cpp b/src/mongo/db/feature_flag.cpp index 4c014e83819..e818deb9992 100644 --- a/src/mongo/db/feature_flag.cpp +++ b/src/mongo/db/feature_flag.cpp @@ -64,16 +64,6 @@ bool FeatureFlag::isEnabled(const ServerGlobalParams::FeatureCompatibility& fcv) return fcv.isGreaterThanOrEqualTo(_version); } -bool FeatureFlag::isEnabledUseDefaultFCVWhenUninitialized( - const ServerGlobalParams::FeatureCompatibility& fcv) const { - if (fcv.isVersionInitialized()) { - return isEnabled(fcv); - } else { - return isEnabledOnVersion( - multiversion::FeatureCompatibilityVersion::kUnsetDefaultLastLTSBehavior); - } -} - bool FeatureFlag::isEnabledAndIgnoreFCV() const { return _enabled; } diff --git a/src/mongo/db/feature_flag.h b/src/mongo/db/feature_flag.h index 2f0a3e771b0..f81f0342dd7 100644 --- a/src/mongo/db/feature_flag.h +++ b/src/mongo/db/feature_flag.h @@ -60,13 +60,6 @@ public: bool isEnabled(const ServerGlobalParams::FeatureCompatibility& fcv) const; /** - * Returns true if the flag is set to true and enabled for this FCV version. If the FCV version - * is unset, instead checks against the default last LTS FCV version. - */ - bool isEnabledUseDefaultFCVWhenUninitialized( - const ServerGlobalParams::FeatureCompatibility& fcv) const; - - /** * Returns true if this flag is enabled regardless of the current FCV version. * * isEnabled() is prefered over this function since it will prevent upgrade/downgrade issues. diff --git a/src/mongo/db/mongod_main.cpp b/src/mongo/db/mongod_main.cpp index 5376f769496..c2060a15738 100644 --- a/src/mongo/db/mongod_main.cpp +++ b/src/mongo/db/mongod_main.cpp @@ -191,7 +191,6 @@ #include "mongo/executor/network_interface_thread_pool.h" #include "mongo/executor/thread_pool_task_executor.h" #include "mongo/idl/cluster_server_parameter_gen.h" -#include "mongo/idl/cluster_server_parameter_initializer.h" #include "mongo/idl/cluster_server_parameter_op_observer.h" #include "mongo/logv2/log.h" #include "mongo/platform/process_id.h" @@ -563,14 +562,6 @@ ExitCode _initAndListen(ServiceContext* serviceContext, int listenPort) { exitCleanly(ExitCode::needDowngrade); } - // If we are on standalone, load cluster parameters from disk. If we are replicated, this is not - // a concern as the cluster parameter initializer runs automatically. - auto replCoord = repl::ReplicationCoordinator::get(startupOpCtx.get()); - invariant(replCoord); - if (!replCoord->isReplEnabled()) { - ClusterServerParameterInitializer::synchronizeAllParametersFromDisk(startupOpCtx.get()); - } - // Ensure FCV document exists and is initialized in-memory. Fatally asserts if there is an // error. FeatureCompatibilityVersion::fassertInitializedAfterStartup(startupOpCtx.get()); @@ -721,6 +712,8 @@ ExitCode _initAndListen(ServiceContext* serviceContext, int listenPort) { << "startupRecoveryForRestore at the same time", !repl::startupRecoveryForRestore); + auto replCoord = repl::ReplicationCoordinator::get(startupOpCtx.get()); + invariant(replCoord); uassert(ErrorCodes::BadValue, str::stream() << "Cannot use queryableBackupMode in a replica set", !replCoord->isReplEnabled()); @@ -737,6 +730,9 @@ ExitCode _initAndListen(ServiceContext* serviceContext, int listenPort) { startFreeMonitoring(serviceContext); + auto replCoord = repl::ReplicationCoordinator::get(startupOpCtx.get()); + invariant(replCoord); + if (serverGlobalParams.clusterRole == ClusterRole::ShardServer) { // Note: For replica sets, ShardingStateRecovery happens on transition to primary. if (!replCoord->isReplEnabled()) { diff --git a/src/mongo/idl/cluster_server_parameter_initializer.cpp b/src/mongo/idl/cluster_server_parameter_initializer.cpp index 5488f4297cc..4c33440b653 100644 --- a/src/mongo/idl/cluster_server_parameter_initializer.cpp +++ b/src/mongo/idl/cluster_server_parameter_initializer.cpp @@ -156,10 +156,10 @@ void ClusterServerParameterInitializer::initializeAllTenantParametersFromDisk( doLoadAllTenantParametersFromDisk( opCtx, "initializing"_sd, - [&](OperationContext* opCtx, - const BSONObj& doc, - StringData mode, - const boost::optional<TenantId>& tenantId) { + [this](OperationContext* opCtx, + const BSONObj& doc, + StringData mode, + const boost::optional<TenantId>& tenantId) { updateParameter(opCtx, doc, mode, tenantId); }, tenantId); @@ -176,10 +176,10 @@ void ClusterServerParameterInitializer::resynchronizeAllTenantParametersFromDisk doLoadAllTenantParametersFromDisk( opCtx, "resynchronizing"_sd, - [&](OperationContext* opCtx, - const BSONObj& doc, - StringData mode, - const boost::optional<TenantId>& tenantId) { + [this, &unsetSettings](OperationContext* opCtx, + const BSONObj& doc, + StringData mode, + const boost::optional<TenantId>& tenantId) { unsetSettings.erase(doc[kIdField].str()); updateParameter(opCtx, doc, mode, tenantId); }, @@ -192,7 +192,8 @@ void ClusterServerParameterInitializer::resynchronizeAllTenantParametersFromDisk } } -void ClusterServerParameterInitializer::synchronizeAllParametersFromDisk(OperationContext* opCtx) { +void ClusterServerParameterInitializer::onInitialDataAvailable(OperationContext* opCtx, + bool isMajorityDataAvailable) { LOGV2_INFO(6608200, "Initializing cluster server parameters from disk"); if (gMultitenancySupport) { std::set<TenantId> tenantIds; @@ -209,9 +210,4 @@ void ClusterServerParameterInitializer::synchronizeAllParametersFromDisk(Operati initializeAllTenantParametersFromDisk(opCtx, boost::none); } -void ClusterServerParameterInitializer::onInitialDataAvailable(OperationContext* opCtx, - bool isMajorityDataAvailable) { - synchronizeAllParametersFromDisk(opCtx); -} - } // namespace mongo diff --git a/src/mongo/idl/cluster_server_parameter_initializer.h b/src/mongo/idl/cluster_server_parameter_initializer.h index 348c1fb358f..3b87f56dcd3 100644 --- a/src/mongo/idl/cluster_server_parameter_initializer.h +++ b/src/mongo/idl/cluster_server_parameter_initializer.h @@ -52,39 +52,38 @@ public: static ClusterServerParameterInitializer* get(OperationContext* opCtx); static ClusterServerParameterInitializer* get(ServiceContext* serviceContext); - static void updateParameter(OperationContext* opCtx, - BSONObj doc, - StringData mode, - const boost::optional<TenantId>& tenantId); - static void clearParameter(OperationContext* opCtx, - ServerParameter* sp, - const boost::optional<TenantId>& tenantId); - static void clearParameter(OperationContext* opCtx, - StringData id, - const boost::optional<TenantId>& tenantId); - static void clearAllTenantParameters(OperationContext* opCtx, - const boost::optional<TenantId>& tenantId); + void updateParameter(OperationContext* opCtx, + BSONObj doc, + StringData mode, + const boost::optional<TenantId>& tenantId); + void clearParameter(OperationContext* opCtx, + ServerParameter* sp, + const boost::optional<TenantId>& tenantId); + void clearParameter(OperationContext* opCtx, + StringData id, + const boost::optional<TenantId>& tenantId); + void clearAllTenantParameters(OperationContext* opCtx, + const boost::optional<TenantId>& tenantId); /** * Used to initialize in-memory cluster parameter state based on the on-disk contents after * startup recovery or initial sync is complete. */ - static void initializeAllTenantParametersFromDisk(OperationContext* opCtx, - const boost::optional<TenantId>& tenantId); + void initializeAllTenantParametersFromDisk(OperationContext* opCtx, + const boost::optional<TenantId>& tenantId); /** * Used on rollback and rename with drop. * Updates settings which are present and clears settings which are not. */ - static void resynchronizeAllTenantParametersFromDisk(OperationContext* opCtx, - const boost::optional<TenantId>& tenantId); + void resynchronizeAllTenantParametersFromDisk(OperationContext* opCtx, + const boost::optional<TenantId>& tenantId); // Virtual methods coming from the ReplicaSetAwareService void onStartup(OperationContext* opCtx) override final {} void onSetCurrentConfig(OperationContext* opCtx) override final {} - static void synchronizeAllParametersFromDisk(OperationContext* opCtx); /** * Called after startup recovery or initial sync is complete. */ @@ -98,10 +97,10 @@ public: private: template <typename OnEntry> - static void doLoadAllTenantParametersFromDisk(OperationContext* opCtx, - StringData mode, - OnEntry onEntry, - const boost::optional<TenantId>& tenantId) try { + void doLoadAllTenantParametersFromDisk(OperationContext* opCtx, + StringData mode, + OnEntry onEntry, + const boost::optional<TenantId>& tenantId) try { // If the RecoveryUnit already had an open snapshot, keep the snapshot open. Otherwise // abandon the snapshot when exiting the function. |