From c9872047e534822ffb6d57561ac05a123ba08e41 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mar 09 2021 06:18:40 +0000 Subject: Refactor: scheduler: remove dead code Several internal expression-testing functions were unused. While they might have had some potential future value, the abundance of similarly named functions made debugging difficult. Comment blocks were added to the functions they wrapped, which should add similar value. Also, we had an internal wrapper for pe__eval_date_expr() that was used only in crm_rule, so it was moved there. --- diff --git a/include/crm/pengine/rules_internal.h b/include/crm/pengine/rules_internal.h index f60263a..7380826 100644 --- a/include/crm/pengine/rules_internal.h +++ b/include/crm/pengine/rules_internal.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2019 the Pacemaker project contributors + * Copyright 2015-2020 the Pacemaker project contributors * * The version control history for this file may have further details. * @@ -28,14 +28,6 @@ gboolean pe__eval_op_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data); gboolean pe__eval_role_expr(xmlNode *expr, pe_rule_eval_data_t *rule_data); gboolean pe__eval_rsc_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data); -int pe_eval_date_expression(xmlNode *time_expr, - crm_time_t *now, - crm_time_t *next_change); -gboolean pe_test_date_expression(xmlNode *time_expr, crm_time_t *now, - crm_time_t *next_change); int pe_cron_range_satisfied(crm_time_t * now, xmlNode * cron_spec); -gboolean pe_test_attr_expression(xmlNode *expr, GHashTable *hash, crm_time_t *now, - pe_match_data_t *match_data); -gboolean pe_test_role_expression(xmlNode * expr, enum rsc_role_e role, crm_time_t * now); #endif diff --git a/lib/pengine/rules.c b/lib/pengine/rules.c index 28562aa..be30e67 100644 --- a/lib/pengine/rules.c +++ b/lib/pengine/rules.c @@ -140,37 +140,6 @@ find_expression_type(xmlNode * expr) return attr_expr; } -gboolean -pe_test_role_expression(xmlNode *expr, enum rsc_role_e role, crm_time_t *now) -{ - pe_rule_eval_data_t rule_data = { - .node_hash = NULL, - .role = role, - .now = now, - .match_data = NULL, - .rsc_data = NULL, - .op_data = NULL - }; - - return pe__eval_role_expr(expr, &rule_data); -} - -gboolean -pe_test_attr_expression(xmlNode *expr, GHashTable *hash, crm_time_t *now, - pe_match_data_t *match_data) -{ - pe_rule_eval_data_t rule_data = { - .node_hash = hash, - .role = RSC_ROLE_UNKNOWN, - .now = now, - .match_data = match_data, - .rsc_data = NULL, - .op_data = NULL - }; - - return pe__eval_attr_expr(expr, &rule_data); -} - /* As per the nethack rules: * * moon period = 29.53058 days ~= 30, year = 365.2422 days @@ -331,38 +300,6 @@ pe_parse_xml_duration(crm_time_t * start, xmlNode * duration_spec) return end; } -/*! - * \internal - * \brief Test a date expression (pass/fail) for a specific time - * - * \param[in] time_expr date_expression XML - * \param[in] now Time for which to evaluate expression - * \param[out] next_change If not NULL, set to when evaluation will change - * - * \return TRUE if date expression is in effect at given time, FALSE otherwise - */ -gboolean -pe_test_date_expression(xmlNode *expr, crm_time_t *now, crm_time_t *next_change) -{ - pe_rule_eval_data_t rule_data = { - .node_hash = NULL, - .role = RSC_ROLE_UNKNOWN, - .now = now, - .match_data = NULL, - .rsc_data = NULL, - .op_data = NULL - }; - - switch (pe__eval_date_expr(expr, &rule_data, next_change)) { - case pcmk_rc_within_range: - case pcmk_rc_ok: - return TRUE; - - default: - return FALSE; - } -} - // Set next_change to t if t is earlier static void crm_time_set_if_earlier(crm_time_t *next_change, crm_time_t *t) @@ -375,31 +312,6 @@ crm_time_set_if_earlier(crm_time_t *next_change, crm_time_t *t) } } -/*! - * \internal - * \brief Evaluate a date expression for a specific time - * - * \param[in] time_expr date_expression XML - * \param[in] now Time for which to evaluate expression - * \param[out] next_change If not NULL, set to when evaluation will change - * - * \return Standard Pacemaker return code - */ -int -pe_eval_date_expression(xmlNode *expr, crm_time_t *now, crm_time_t *next_change) -{ - pe_rule_eval_data_t rule_data = { - .node_hash = NULL, - .role = RSC_ROLE_UNKNOWN, - .now = now, - .match_data = NULL, - .rsc_data = NULL, - .op_data = NULL - }; - - return pe__eval_date_expr(expr, &rule_data, next_change); -} - // Information about a block of nvpair elements typedef struct sorted_set_s { int score; // This block's score for sorting @@ -908,7 +820,16 @@ pe_eval_subexpr(xmlNode *expr, pe_rule_eval_data_t *rule_data, crm_time_t *next_ break; case time_expr: - accept = pe_test_date_expression(expr, rule_data->now, next_change); + switch (pe__eval_date_expr(expr, rule_data, next_change)) { + case pcmk_rc_within_range: + case pcmk_rc_ok: + accept = TRUE; + break; + + default: + accept = FALSE; + break; + } break; case role_expr: @@ -1104,6 +1025,16 @@ accept_attr_expr(const char *l_val, const char *r_val, const char *type, return false; // Should never reach this point } +/*! + * \internal + * \brief Evaluate a node attribute expression based on #uname, #id, #kind, + * or a generic node attribute + * + * \param[in] expr XML of rule expression + * \param[in] rule_data The match_data and node_hash members are used + * + * \return TRUE if rule_data satisfies the expression, FALSE otherwise + */ gboolean pe__eval_attr_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data) { @@ -1169,8 +1100,16 @@ pe__eval_attr_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data) return accept_attr_expr(h_val, value, type, op); } - - +/*! + * \internal + * \brief Evaluate a date_expression + * + * \param[in] expr XML of rule expression + * \param[in] rule_data Only the now member is used + * \param[out] next_change If not NULL, set to when evaluation will change + * + * \return Standard Pacemaker return code + */ int pe__eval_date_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data, crm_time_t *next_change) { @@ -1285,6 +1224,15 @@ pe__eval_op_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data) { return TRUE; } +/*! + * \internal + * \brief Evaluate a node attribute expression based on #role + * + * \param[in] expr XML of rule expression + * \param[in] rule_data Only the role member is used + * + * \return TRUE if rule_data->role satisfies the expression, FALSE otherwise + */ gboolean pe__eval_role_expr(xmlNodePtr expr, pe_rule_eval_data_t *rule_data) { diff --git a/tools/crm_rule.c b/tools/crm_rule.c index 0e44828..2871f3d 100644 --- a/tools/crm_rule.c +++ b/tools/crm_rule.c @@ -75,6 +75,31 @@ mode_cb(const gchar *option_name, const gchar *optarg, gpointer data, GError **e return TRUE; } +/*! + * \internal + * \brief Evaluate a date expression for a specific time + * + * \param[in] time_expr date_expression XML + * \param[in] now Time for which to evaluate expression + * \param[out] next_change If not NULL, set to when evaluation will change + * + * \return Standard Pacemaker return code + */ +static int +eval_date_expression(xmlNode *expr, crm_time_t *now, crm_time_t *next_change) +{ + pe_rule_eval_data_t rule_data = { + .node_hash = NULL, + .role = RSC_ROLE_UNKNOWN, + .now = now, + .match_data = NULL, + .rsc_data = NULL, + .op_data = NULL + }; + + return pe__eval_date_expr(expr, &rule_data, next_change); +} + static int crm_rule_check(pe_working_set_t *data_set, const char *rule_id, crm_time_t *effective_date) { @@ -156,7 +181,7 @@ crm_rule_check(pe_working_set_t *data_set, const char *rule_id, crm_time_t *effe CRM_ASSERT(match != NULL); CRM_ASSERT(find_expression_type(match) == time_expr); - rc = pe_eval_date_expression(match, effective_date, NULL); + rc = eval_date_expression(match, effective_date, NULL); if (rc == pcmk_rc_within_range) { printf("Rule %s is still in effect\n", rule_id);