summaryrefslogtreecommitdiff
path: root/src/mongo/idl/cluster_server_parameter_initializer.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/idl/cluster_server_parameter_initializer.cpp
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'src/mongo/idl/cluster_server_parameter_initializer.cpp')
-rw-r--r--src/mongo/idl/cluster_server_parameter_initializer.cpp95
1 files changed, 93 insertions, 2 deletions
diff --git a/src/mongo/idl/cluster_server_parameter_initializer.cpp b/src/mongo/idl/cluster_server_parameter_initializer.cpp
index e28e0542ecb..3205f7a4fa7 100644
--- a/src/mongo/idl/cluster_server_parameter_initializer.cpp
+++ b/src/mongo/idl/cluster_server_parameter_initializer.cpp
@@ -34,7 +34,6 @@
#include "mongo/base/string_data.h"
#include "mongo/db/repl/replica_set_aware_service.h"
#include "mongo/db/service_context.h"
-#include "mongo/idl/cluster_parameter_synchronization_helpers.h"
#include "mongo/logv2/log.h"
namespace mongo {
@@ -59,10 +58,102 @@ ClusterServerParameterInitializer* ClusterServerParameterInitializer::get(
return &getInstance(serviceContext);
}
+void ClusterServerParameterInitializer::updateParameter(BSONObj doc, StringData mode) {
+ auto nameElem = doc[kIdField];
+ if (nameElem.type() != String) {
+ LOGV2_DEBUG(6226301,
+ 1,
+ "Update with invalid cluster server parameter name",
+ "mode"_attr = mode,
+ "_id"_attr = nameElem);
+ return;
+ }
+
+ auto name = nameElem.valueStringData();
+ auto* sp = ServerParameterSet::getClusterParameterSet()->getIfExists(name);
+ if (!sp) {
+ LOGV2_DEBUG(6226300,
+ 3,
+ "Update to unknown cluster server parameter",
+ "mode"_attr = mode,
+ "name"_attr = name);
+ return;
+ }
+
+ auto cptElem = doc[kCPTField];
+ if ((cptElem.type() != mongo::Date) && (cptElem.type() != bsonTimestamp)) {
+ LOGV2_DEBUG(6226302,
+ 1,
+ "Update to cluster server parameter has invalid clusterParameterTime",
+ "mode"_attr = mode,
+ "name"_attr = name,
+ "clusterParameterTime"_attr = cptElem);
+ return;
+ }
+
+ uassertStatusOK(sp->set(doc));
+}
+
+void ClusterServerParameterInitializer::clearParameter(ServerParameter* sp) {
+ if (sp->getClusterParameterTime() == LogicalTime::kUninitialized) {
+ // Nothing to clear.
+ return;
+ }
+
+ uassertStatusOK(sp->reset());
+}
+
+void ClusterServerParameterInitializer::clearParameter(StringData id) {
+ auto* sp = ServerParameterSet::getClusterParameterSet()->getIfExists(id);
+ if (!sp) {
+ LOGV2_DEBUG(6226303,
+ 5,
+ "oplog event deletion of unknown cluster server parameter",
+ "name"_attr = id);
+ return;
+ }
+
+ clearParameter(sp);
+}
+
+void ClusterServerParameterInitializer::clearAllParameters() {
+ const auto& params = ServerParameterSet::getClusterParameterSet()->getMap();
+ for (const auto& it : params) {
+ clearParameter(it.second);
+ }
+}
+
+void ClusterServerParameterInitializer::initializeAllParametersFromDisk(OperationContext* opCtx) {
+ doLoadAllParametersFromDisk(opCtx, "initializing"_sd, [this](BSONObj doc, StringData mode) {
+ updateParameter(doc, mode);
+ });
+}
+
+void ClusterServerParameterInitializer::resynchronizeAllParametersFromDisk(
+ OperationContext* opCtx) {
+ const auto& allParams = ServerParameterSet::getClusterParameterSet()->getMap();
+ std::set<std::string> unsetSettings;
+ for (const auto& it : allParams) {
+ unsetSettings.insert(it.second->name());
+ }
+
+ doLoadAllParametersFromDisk(
+ opCtx, "resynchronizing"_sd, [this, &unsetSettings](BSONObj doc, StringData mode) {
+ unsetSettings.erase(doc[kIdField].str());
+ updateParameter(doc, mode);
+ });
+
+ // For all known settings which were not present in this resync,
+ // explicitly clear any value which may be present in-memory.
+ for (const auto& setting : unsetSettings) {
+ clearParameter(setting);
+ }
+}
+
void ClusterServerParameterInitializer::onInitialDataAvailable(OperationContext* opCtx,
bool isMajorityDataAvailable) {
LOGV2_INFO(6608200, "Initializing cluster server parameters from disk");
- cluster_parameters::initializeAllParametersFromDisk(opCtx);
+ initializeAllParametersFromDisk(opCtx);
}
} // namespace mongo