File pacemaker-libpe_status-validate-no-quorum-policy=suicide.patch of Package pacemaker.14737

commit 64fdcf44dbb28f87e8b225bb44a16dc15ccae952
Author: Ken Gaillot <kgaillot@redhat.com>
Date:   Wed Sep 27 15:45:14 2017 -0500

    Fix: libpe_status: validate no-quorum-policy=suicide correctly
    
    The previous implementation had cases where a no-quorum-policy of suicide
    would get ignored, leaving data_set->no_quorum_policy unset, which would be 0
    (no_quorum_freeze). The main example is when stonith-enabled=false and the
    cluster has, or has ever had, quorum.
    
    The new implementation always uses no_quorum_stop if suicide needs to be
    overridden.

diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index a13153e42..d450f0e8e 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -218,20 +218,19 @@ unpack_config(xmlNode * config, pe_working_set_t * data_set)
         data_set->no_quorum_policy = no_quorum_freeze;
 
     } else if (safe_str_eq(value, "suicide")) {
-        gboolean do_panic = FALSE;
+        if (is_set(data_set->flags, pe_flag_stonith_enabled)) {
+            int do_panic = 0;
 
-        crm_element_value_int(data_set->input, XML_ATTR_QUORUM_PANIC, &do_panic);
-
-        if (is_set(data_set->flags, pe_flag_stonith_enabled) == FALSE) {
-            crm_config_err
-                ("Setting no-quorum-policy=suicide makes no sense if stonith-enabled=false");
-        }
-
-        if (do_panic && is_set(data_set->flags, pe_flag_stonith_enabled)) {
-            data_set->no_quorum_policy = no_quorum_suicide;
-
-        } else if (is_set(data_set->flags, pe_flag_have_quorum) == FALSE && do_panic == FALSE) {
-            crm_notice("Resetting no-quorum-policy to 'stop': The cluster has never had quorum");
+            crm_element_value_int(data_set->input, XML_ATTR_QUORUM_PANIC,
+                                  &do_panic);
+            if (do_panic || is_set(data_set->flags, pe_flag_have_quorum)) {
+                data_set->no_quorum_policy = no_quorum_suicide;
+            } else {
+                crm_notice("Resetting no-quorum-policy to 'stop': cluster has never had quorum");
+                data_set->no_quorum_policy = no_quorum_stop;
+            }
+        } else {
+            crm_config_err("Resetting no-quorum-policy to 'stop': stonith is not configured");
             data_set->no_quorum_policy = no_quorum_stop;
         }
 
openSUSE Build Service is sponsored by