File pacemaker-libpe_status-ability-log-warning-once.patch of Package pacemaker.14737
commit f6795045ff8e23ac995c75acb83adce65f07c3ee
Author: Ken Gaillot <kgaillot@redhat.com>
Date: Mon Sep 25 11:32:30 2017 -0500
Refactor: libpe_status: generalize ability to log warning only once
Index: pacemaker/lib/pengine/unpack.c
===================================================================
--- pacemaker.orig/lib/pengine/unpack.c
+++ pacemaker/lib/pengine/unpack.c
@@ -46,6 +46,9 @@ gboolean unpack_rsc_op(resource_t * rsc,
enum action_fail_response *failed, pe_working_set_t * data_set);
static gboolean determine_remote_online_status(pe_working_set_t * data_set, node_t * this_node);
+// Bitmask for warnings we only want to print once
+uint32_t pe_wo = 0;
+
static gboolean
is_dangling_container_remote_node(node_t *node)
{
@@ -541,7 +544,6 @@ handle_startup_fencing(pe_working_set_t
{
static const char *blind_faith = NULL;
static gboolean unseen_are_unclean = TRUE;
- static gboolean need_warning = TRUE;
if ((new_node->details->type == node_remote) && (new_node->details->remote_rsc == NULL)) {
/* ignore fencing remote-nodes that don't have a conneciton resource associated
@@ -554,12 +556,7 @@ handle_startup_fencing(pe_working_set_t
if (crm_is_true(blind_faith) == FALSE) {
unseen_are_unclean = FALSE;
- if (need_warning) {
- crm_warn("Blind faith: not fencing unseen nodes");
-
- /* Warn once per run, not per node and transition */
- need_warning = FALSE;
- }
+ pe_warn_once(pe_wo_blind, "Blind faith: not fencing unseen nodes");
}
if (is_set(data_set->flags, pe_flag_stonith_enabled) == FALSE
Index: pacemaker/lib/pengine/unpack.h
===================================================================
--- pacemaker.orig/lib/pengine/unpack.h
+++ pacemaker/lib/pengine/unpack.h
@@ -97,4 +97,23 @@ extern const char *param_value(GHashTabl
do_crm_log(log_level, fmt, ##args); \
}
+// Some warnings we don't want to print every transition
+
+enum pe_warn_once_e {
+ pe_wo_blind = 0x0001,
+};
+
+extern uint32_t pe_wo;
+
+#define pe_warn_once(pe_wo_bit, fmt...) do { \
+ if (is_not_set(pe_wo, pe_wo_bit)) { \
+ if (pe_wo_bit == pe_wo_blind) { \
+ crm_warn(fmt); \
+ } else { \
+ pe_warn(fmt); \
+ } \
+ set_bit(pe_wo, pe_wo_bit); \
+ } \
+ } while (0);
+
#endif