summaryrefslogtreecommitdiff
path: root/src/mongo/idl/cluster_server_parameter_initializer.h
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.h
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.h')
-rw-r--r--src/mongo/idl/cluster_server_parameter_initializer.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/mongo/idl/cluster_server_parameter_initializer.h b/src/mongo/idl/cluster_server_parameter_initializer.h
index 49d501a7e6d..0eb02bb058c 100644
--- a/src/mongo/idl/cluster_server_parameter_initializer.h
+++ b/src/mongo/idl/cluster_server_parameter_initializer.h
@@ -52,6 +52,23 @@ public:
static ClusterServerParameterInitializer* get(OperationContext* opCtx);
static ClusterServerParameterInitializer* get(ServiceContext* serviceContext);
+ void updateParameter(BSONObj doc, StringData mode);
+ void clearParameter(ServerParameter* sp);
+ void clearParameter(StringData id);
+ void clearAllParameters();
+
+ /**
+ * Used to initialize in-memory cluster parameter state based on the on-disk contents after
+ * startup recovery or initial sync is complete.
+ */
+ void initializeAllParametersFromDisk(OperationContext* opCtx);
+
+ /**
+ * Used on rollback and rename with drop.
+ * Updates settings which are present and clears settings which are not.
+ */
+ void resynchronizeAllParametersFromDisk(OperationContext* opCtx);
+
// Virtual methods coming from the ReplicaSetAwareService
void onStartup(OperationContext* opCtx) override final {}
@@ -65,6 +82,35 @@ public:
void onStepUpComplete(OperationContext* opCtx, long long term) override final {}
void onStepDown() override final {}
void onBecomeArbiter() override final {}
+
+private:
+ template <typename OnEntry>
+ void doLoadAllParametersFromDisk(OperationContext* opCtx,
+ StringData mode,
+ OnEntry onEntry) try {
+ std::vector<Status> failures;
+
+ DBDirectClient client(opCtx);
+ FindCommandRequest findRequest{NamespaceString::kClusterParametersNamespace};
+ client.find(std::move(findRequest), ReadPreferenceSetting{}, [&](BSONObj doc) {
+ try {
+ onEntry(doc, mode);
+ } catch (const DBException& ex) {
+ failures.push_back(ex.toStatus());
+ }
+ });
+ if (!failures.empty()) {
+ StringBuilder msg;
+ for (const auto& failure : failures) {
+ msg << failure.toString() << ", ";
+ }
+ msg.reset(msg.len() - 2);
+ uasserted(ErrorCodes::OperationFailed, msg.str());
+ }
+ } catch (const DBException& ex) {
+ uassertStatusOK(ex.toStatus().withContext(
+ str::stream() << "Failed " << mode << " cluster server parameters from disk"));
+ }
};
} // namespace mongo