summaryrefslogtreecommitdiffstats
path: root/daemons/controld/controld_metadata.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 06:53:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 06:53:20 +0000
commite5a812082ae033afb1eed82c0f2df3d0f6bdc93f (patch)
treea6716c9275b4b413f6c9194798b34b91affb3cc7 /daemons/controld/controld_metadata.h
parentInitial commit. (diff)
downloadpacemaker-e5a812082ae033afb1eed82c0f2df3d0f6bdc93f.tar.xz
pacemaker-e5a812082ae033afb1eed82c0f2df3d0f6bdc93f.zip
Adding upstream version 2.1.6.upstream/2.1.6
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'daemons/controld/controld_metadata.h')
-rw-r--r--daemons/controld/controld_metadata.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/daemons/controld/controld_metadata.h b/daemons/controld/controld_metadata.h
new file mode 100644
index 0000000..12ea327
--- /dev/null
+++ b/daemons/controld/controld_metadata.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2017-2022 the Pacemaker project contributors
+ *
+ * The version control history for this file may have further details.
+ *
+ * This source code is licensed under the GNU General Public License version 2
+ * or later (GPLv2+) WITHOUT ANY WARRANTY.
+ */
+
+#ifndef CRMD_METADATA_H
+#define CRMD_METADATA_H
+
+#include <stdint.h> // uint32_t
+#include <glib.h> // GList, GHashTable
+#include "controld_lrm.h" // lrm_state_t, lrm_rsc_info_t
+
+/*
+ * @COMPAT pre-OCF-1.1 resource agents
+ *
+ * Pacemaker previously used the "reload" action to reload agent parameters,
+ * but most agents used it to reload the service configuration. Pacemaker also
+ * misused the OCF 1.0 "unique" parameter attribute to indicate reloadability.
+ *
+ * OCF 1.1 created the "reload-agent" action and "reloadable" parameter
+ * attribute for the Pacemaker usage.
+ *
+ * Pacemaker now supports the OCF 1.1 usage. The old usage is now deprecated,
+ * but will be supported if the agent does not claim OCF 1.1 or later
+ * compliance and does not advertise the reload-agent action.
+ */
+enum ra_flags_e {
+ ra_supports_legacy_reload = (1 << 0),
+ ra_supports_reload_agent = (1 << 1),
+};
+
+enum ra_param_flags_e {
+ ra_param_unique = (1 << 0),
+ ra_param_private = (1 << 1),
+ ra_param_reloadable = (1 << 2),
+};
+
+// Allowed sources of resource agent meta-data when requesting it
+enum controld_metadata_source_e {
+ controld_metadata_from_cache = (1 << 0),
+ controld_metadata_from_agent = (1 << 1),
+};
+
+struct ra_param_s {
+ char *rap_name;
+ uint32_t rap_flags; // bitmask of ra_param_flags_s
+};
+
+struct ra_metadata_s {
+ GList *ra_params; // ra_param_s
+ uint32_t ra_flags; // bitmask of ra_flags_e
+};
+
+#define controld_set_ra_flags(ra_md, ra_key, flags_to_set) do { \
+ (ra_md)->ra_flags = pcmk__set_flags_as(__func__, __LINE__, \
+ LOG_TRACE, "Resource agent", ra_key, \
+ (ra_md)->ra_flags, (flags_to_set), #flags_to_set); \
+ } while (0)
+
+#define controld_set_ra_param_flags(ra_param, flags_to_set) do { \
+ (ra_param)->rap_flags = pcmk__set_flags_as(__func__, __LINE__, \
+ LOG_TRACE, "Resource agent parameter", (ra_param)->rap_name, \
+ (ra_param)->rap_flags, (flags_to_set), #flags_to_set); \
+ } while (0)
+
+GHashTable *metadata_cache_new(void);
+void metadata_cache_free(GHashTable *mdc);
+void metadata_cache_reset(GHashTable *mdc);
+
+struct ra_metadata_s *controld_cache_metadata(GHashTable *mdc,
+ const lrmd_rsc_info_t *rsc,
+ const char *metadata_str);
+struct ra_metadata_s *controld_get_rsc_metadata(lrm_state_t *lrm_state,
+ const lrmd_rsc_info_t *rsc,
+ uint32_t source);
+
+static inline const char *
+ra_param_flag2text(enum ra_param_flags_e flag)
+{
+ switch (flag) {
+ case ra_param_reloadable:
+ return "reloadable";
+ case ra_param_unique:
+ return "unique";
+ case ra_param_private:
+ return "private";
+ default:
+ return "unknown";
+ }
+}
+
+#endif