summaryrefslogtreecommitdiffstats
path: root/lib/common/scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common/scheduler.c')
-rw-r--r--lib/common/scheduler.c97
1 files changed, 96 insertions, 1 deletions
diff --git a/lib/common/scheduler.c b/lib/common/scheduler.c
index 20e6fdf..dad3de9 100644
--- a/lib/common/scheduler.c
+++ b/lib/common/scheduler.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2023 the Pacemaker project contributors
+ * Copyright 2004-2024 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
@@ -10,5 +10,100 @@
#include <crm_internal.h>
#include <stdint.h> // uint32_t
+#include <errno.h> // EINVAL
+#include <glib.h> // gboolean, FALSE
+#include <libxml/tree.h> // xmlNode
+
+#include <crm/common/scheduler.h>
uint32_t pcmk__warnings = 0;
+
+gboolean was_processing_error = FALSE;
+gboolean was_processing_warning = FALSE;
+
+/*!
+ * \internal
+ * \brief Get the Designated Controller node from scheduler data
+ *
+ * \param[in] scheduler Scheduler data
+ *
+ * \return Designated Controller node from scheduler data, or NULL if none
+ */
+pcmk_node_t *
+pcmk_get_dc(const pcmk_scheduler_t *scheduler)
+{
+ return (scheduler == NULL)? NULL : scheduler->dc_node;
+}
+
+/*!
+ * \internal
+ * \brief Get the no quorum policy from scheduler data
+ *
+ * \param[in] scheduler Scheduler data
+ *
+ * \return No quorum policy from scheduler data
+ */
+enum pe_quorum_policy
+pcmk_get_no_quorum_policy(const pcmk_scheduler_t *scheduler)
+{
+ if (scheduler == NULL) {
+ return pcmk_no_quorum_stop; // The default
+ }
+ return scheduler->no_quorum_policy;
+}
+
+/*!
+ * \internal
+ * \brief Set CIB XML as scheduler input in scheduler data
+ *
+ * \param[out] scheduler Scheduler data
+ * \param[in] cib CIB XML to set as scheduler input
+ *
+ * \return Standard Pacemaker return code (EINVAL if \p scheduler is NULL,
+ * otherwise pcmk_rc_ok)
+ * \note This will not free any previously set scheduler CIB.
+ */
+int
+pcmk_set_scheduler_cib(pcmk_scheduler_t *scheduler, xmlNode *cib)
+{
+ if (scheduler == NULL) {
+ return EINVAL;
+ }
+ scheduler->input = cib;
+ return pcmk_rc_ok;
+}
+
+/*!
+ * \internal
+ * \brief Check whether cluster has quorum
+ *
+ * \param[in] scheduler Scheduler data
+ *
+ * \return true if cluster has quorum, otherwise false
+ */
+bool
+pcmk_has_quorum(const pcmk_scheduler_t *scheduler)
+{
+ if (scheduler == NULL) {
+ return false;
+ }
+ return pcmk_is_set(scheduler->flags, pcmk_sched_quorate);
+}
+
+/*!
+ * \brief Find a node by name in scheduler data
+ *
+ * \param[in] scheduler Scheduler data
+ * \param[in] node_name Name of node to find
+ *
+ * \return Node from scheduler data that matches \p node_name if any,
+ * otherwise NULL
+ */
+pcmk_node_t *
+pcmk_find_node(const pcmk_scheduler_t *scheduler, const char *node_name)
+{
+ if ((scheduler == NULL) || (node_name == NULL)) {
+ return NULL;
+ }
+ return pcmk__find_node_in_list(scheduler->nodes, node_name);
+}