diff --git a/include/crm/pengine/Makefile.am b/include/crm/pengine/Makefile.am index 64275be01c..f963c627a8 100644 --- a/include/crm/pengine/Makefile.am +++ b/include/crm/pengine/Makefile.am @@ -1,23 +1,24 @@ # # Copyright 2006-2024 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. # include $(top_srcdir)/mk/common.mk headerdir=$(pkgincludedir)/crm/pengine noinst_HEADERS = internal.h \ $(wildcard *_internal.h) header_HEADERS = common.h \ + common_compat.h \ complex.h \ pe_types.h \ rules.h \ status.h \ pe_types_compat.h \ rules_compat.h \ status_compat.h diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h index c1048c8e69..ebc5eeb67d 100644 --- a/include/crm/pengine/common.h +++ b/include/crm/pengine/common.h @@ -1,58 +1,53 @@ /* * Copyright 2004-2024 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. */ #ifndef PCMK__CRM_PENGINE_COMMON__H # define PCMK__CRM_PENGINE_COMMON__H # include # include # include # include #ifdef __cplusplus extern "C" { #endif typedef struct pe_re_match_data { char *string; int nregs; regmatch_t *pmatch; } pe_re_match_data_t; typedef struct pe_match_data { pe_re_match_data_t *re; GHashTable *params; GHashTable *meta; } pe_match_data_t; typedef struct pe_rsc_eval_data { const char *standard; const char *provider; const char *agent; } pe_rsc_eval_data_t; typedef struct pe_op_eval_data { const char *op_name; guint interval; } pe_op_eval_data_t; -typedef struct pe_rule_eval_data { - GHashTable *node_hash; // Only used with g_hash_table_lookup() - enum rsc_role_e role; //!< \deprecated Ignored - crm_time_t *now; // @COMPAT could be const - pe_match_data_t *match_data; // @COMPAT could be const - pe_rsc_eval_data_t *rsc_data; // @COMPAT could be const - pe_op_eval_data_t *op_data; // @COMPAT could be const -} pe_rule_eval_data_t; - #ifdef __cplusplus } #endif +#if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1) +#include +#endif + #endif diff --git a/include/crm/pengine/common_compat.h b/include/crm/pengine/common_compat.h new file mode 100644 index 0000000000..800c8ba3ba --- /dev/null +++ b/include/crm/pengine/common_compat.h @@ -0,0 +1,49 @@ +/* + * Copyright 2004-2024 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU Lesser General Public License + * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. + */ + +#ifndef PCMK__CRM_PENGINE_COMMON_COMPAT__H +#define PCMK__CRM_PENGINE_COMMON_COMPAT__H + +#include // GHashTable + +#include // crm_time_t +#include // enum rsc_role_e + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file + * \brief Deprecated Pacemaker shared API for scheduler and rules + * \ingroup pengine + * \deprecated Do not include this header directly. The APIs in this + * header, and the header itself, will be removed in a future + * release. + */ + +//!@{ +//! \deprecated Use pcmk_rule_input_t instead + +typedef struct pe_rule_eval_data { + GHashTable *node_hash; + enum rsc_role_e role; + crm_time_t *now; + pe_match_data_t *match_data; + pe_rsc_eval_data_t *rsc_data; + pe_op_eval_data_t *op_data; +} pe_rule_eval_data_t; + +//!@} + +#ifdef __cplusplus +} +#endif + +#endif // PCMK__CRM_PENGINE_COMMON_COMPAT__H diff --git a/lib/pengine/rules.c b/lib/pengine/rules.c index 0eac8295af..d8f7da897e 100644 --- a/lib/pengine/rules.c +++ b/lib/pengine/rules.c @@ -1,120 +1,121 @@ /* * Copyright 2004-2024 the Pacemaker project contributors * * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. */ #include #include // NULL #include // gboolean, GList, GHashTable #include // xmlNode #include #include // crm_time_t #include // enum rsc_role_e #include #include // pcmk_rule_input_t, etc. #include // pcmk__nvpair_unpack_t, etc. CRM_TRACE_INIT_DATA(pe_rules); // Deprecated functions kept only for backward API compatibility // LCOV_EXCL_START +#include #include gboolean test_rule(xmlNode * rule, GHashTable * node_hash, enum rsc_role_e role, crm_time_t * now) { pcmk_rule_input_t rule_input = { .node_attrs = node_hash, .now = now, }; return pcmk_evaluate_rule(rule, &rule_input, NULL) == pcmk_rc_ok; } /*! * \internal * \brief Map pe_rule_eval_data_t to pcmk_rule_input_t * * \param[out] new New data struct * \param[in] old Old data struct */ static void map_rule_input(pcmk_rule_input_t *new, const pe_rule_eval_data_t *old) { if (old == NULL) { return; } new->now = old->now; new->node_attrs = old->node_hash; if (old->rsc_data != NULL) { new->rsc_standard = old->rsc_data->standard; new->rsc_provider = old->rsc_data->provider; new->rsc_agent = old->rsc_data->agent; } if (old->match_data != NULL) { new->rsc_params = old->match_data->params; new->rsc_meta = old->match_data->meta; if (old->match_data->re != NULL) { new->rsc_id = old->match_data->re->string; new->rsc_id_submatches = old->match_data->re->pmatch; new->rsc_id_nmatches = old->match_data->re->nregs; } } if (old->op_data != NULL) { new->op_name = old->op_data->op_name; new->op_interval_ms = old->op_data->interval; } } void pe_eval_nvpairs(xmlNode *top, const xmlNode *xml_obj, const char *set_name, const pe_rule_eval_data_t *rule_data, GHashTable *hash, const char *always_first, gboolean overwrite, crm_time_t *next_change) { GList *pairs = pcmk__xe_dereference_children(xml_obj, set_name); if (pairs) { pcmk__nvpair_unpack_t data = { .values = hash, .first_id = always_first, .overwrite = overwrite, .next_change = next_change, }; map_rule_input(&(data.rule_input), rule_data); pairs = g_list_sort_with_data(pairs, pcmk__cmp_nvpair_blocks, &data); g_list_foreach(pairs, pcmk__unpack_nvpair_block, &data); g_list_free(pairs); } } void pe_unpack_nvpairs(xmlNode *top, const xmlNode *xml_obj, const char *set_name, GHashTable *node_hash, GHashTable *hash, const char *always_first, gboolean overwrite, crm_time_t *now, crm_time_t *next_change) { pe_rule_eval_data_t rule_data = { .node_hash = node_hash, .now = now, .match_data = NULL, .rsc_data = NULL, .op_data = NULL }; pe_eval_nvpairs(NULL, xml_obj, set_name, &rule_data, hash, always_first, overwrite, next_change); } // LCOV_EXCL_STOP // End deprecated API