summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/SConscript1
-rw-r--r--src/mongo/db/feature_flag.cpp10
-rw-r--r--src/mongo/db/feature_flag.h7
-rw-r--r--src/mongo/db/mongod_main.cpp14
-rw-r--r--src/mongo/idl/cluster_server_parameter_initializer.cpp24
-rw-r--r--src/mongo/idl/cluster_server_parameter_initializer.h41
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.