diff --git a/SOURCES/013-guest-node.patch b/SOURCES/013-guest-node.patch new file mode 100644 index 0000000..1291635 --- /dev/null +++ b/SOURCES/013-guest-node.patch @@ -0,0 +1,126 @@ +From 11685256d35035ae69985d1f4536d0ed68951efe Mon Sep 17 00:00:00 2001 +From: Ken Gaillot +Date: Thu, 24 Oct 2019 17:35:48 -0500 +Subject: [PATCH 4/5] Fix: scheduler: properly detect whether guest node is + fenceable + +Guest nodes are "fenced" by stopping their container resource. Previously, we +assumed that this was always possible. However, it may not be if the +container's host is failed and not fenceable (e.g. due to lack of quorum). + +Now, we check guest nodes for fenceability as we do for other nodes, +with the criteria being that the guest's host must be either online or +fenceable. Additionally, when creating a new action that normally does not +require fencing, we make the action unrunnable if it is on an non-fenceable +guest node, because the action cannot be attempted in that case. +--- + lib/pengine/utils.c | 55 ++++++++++++++++++++++++++++++++++++++--------------- + pengine/allocate.c | 3 ++- + 2 files changed, 42 insertions(+), 16 deletions(-) + +diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c +index 97241af..671ef76 100644 +--- a/lib/pengine/utils.c ++++ b/lib/pengine/utils.c +@@ -92,36 +92,49 @@ pe_free_rsc_action_details(pe_action_t *action) + * \param[in] data_set Working set for cluster + * \param[in] node Name of node to check + * +- * \return TRUE if node can be fenced, FALSE otherwise +- * +- * \note This function should only be called for cluster nodes and baremetal +- * remote nodes; guest nodes are fenced by stopping their container +- * resource, so fence execution requirements do not apply to them. ++ * \return true if node can be fenced, false otherwise + */ +-bool pe_can_fence(pe_working_set_t * data_set, node_t *node) ++bool ++pe_can_fence(pe_working_set_t *data_set, pe_node_t *node) + { +- if(is_not_set(data_set->flags, pe_flag_stonith_enabled)) { +- return FALSE; /* Turned off */ ++ if (is_container_remote_node(node)) { ++ /* Guest nodes are fenced by stopping their container resource. We can ++ * do that if the container's host is either online or fenceable. ++ */ ++ pe_resource_t *rsc = node->details->remote_rsc->container; ++ ++ for (GList *n = rsc->running_on; n != NULL; n = n->next) { ++ pe_node_t *container_node = n->data; ++ ++ if (!container_node->details->online ++ && !pe_can_fence(data_set, container_node)) { ++ return false; ++ } ++ } ++ return true; ++ ++ } else if(is_not_set(data_set->flags, pe_flag_stonith_enabled)) { ++ return false; /* Turned off */ + + } else if (is_not_set(data_set->flags, pe_flag_have_stonith_resource)) { +- return FALSE; /* No devices */ ++ return false; /* No devices */ + + } else if (is_set(data_set->flags, pe_flag_have_quorum)) { +- return TRUE; ++ return true; + + } else if (data_set->no_quorum_policy == no_quorum_ignore) { +- return TRUE; ++ return true; + + } else if(node == NULL) { +- return FALSE; ++ return false; + + } else if(node->details->online) { + crm_notice("We can fence %s without quorum because they're in our membership", node->details->uname); +- return TRUE; ++ return true; + } + + crm_trace("Cannot fence %s", node->details->uname); +- return FALSE; ++ return false; + } + + node_t * +@@ -576,7 +589,19 @@ custom_action(resource_t * rsc, char *key, const char *task, + } else if (action->needs == rsc_req_nothing) { + pe_rsc_trace(rsc, "Action %s does not require anything", action->uuid); + pe_action_set_reason(action, NULL, TRUE); +- pe_set_action_bit(action, pe_action_runnable); ++ if (is_container_remote_node(action->node) ++ && !pe_can_fence(data_set, action->node)) { ++ /* An action that requires nothing usually does not require any ++ * fencing in order to be runnable. However, there is an ++ * exception: an action cannot be completed if it is on a guest ++ * node whose host is unclean and cannot be fenced. ++ */ ++ pe_clear_action_bit(action, pe_action_runnable); ++ crm_debug("%s\t%s (cancelled : host cannot be fenced)", ++ action->node->details->uname, action->uuid); ++ } else { ++ pe_set_action_bit(action, pe_action_runnable); ++ } + #if 0 + /* + * No point checking this +diff --git a/pengine/allocate.c b/pengine/allocate.c +index e30cb1c..b819af3 100644 +--- a/pengine/allocate.c ++++ b/pengine/allocate.c +@@ -1584,7 +1584,8 @@ stage6(pe_working_set_t * data_set) + * so handle them separately. + */ + if (is_container_remote_node(node)) { +- if (node->details->remote_requires_reset && need_stonith) { ++ if (node->details->remote_requires_reset && need_stonith ++ && pe_can_fence(data_set, node)) { + fence_guest(node, data_set); + } + continue; +-- +1.8.3.1 + diff --git a/SOURCES/014-guest-node-test.patch b/SOURCES/014-guest-node-test.patch new file mode 100644 index 0000000..95cf581 --- /dev/null +++ b/SOURCES/014-guest-node-test.patch @@ -0,0 +1,1297 @@ +From 739fb14ad27e3a8ab18e92a23f0926c773983ad6 Mon Sep 17 00:00:00 2001 +From: Ken Gaillot +Date: Tue, 29 Oct 2019 17:44:40 -0500 +Subject: [PATCH 5/5] Test: scheduler: add regression test for guest node with + unclean host that cannot be fenced + +--- + pengine/regression.sh | 1 + + pengine/test10/guest-host-not-fenceable.dot | 258 +++++++++++++++ + pengine/test10/guest-host-not-fenceable.exp | 340 +++++++++++++++++++ + pengine/test10/guest-host-not-fenceable.scores | 134 ++++++++ + pengine/test10/guest-host-not-fenceable.summary | 87 +++++ + pengine/test10/guest-host-not-fenceable.xml | 413 ++++++++++++++++++++++++ + 6 files changed, 1233 insertions(+) + create mode 100644 pengine/test10/guest-host-not-fenceable.dot + create mode 100644 pengine/test10/guest-host-not-fenceable.exp + create mode 100644 pengine/test10/guest-host-not-fenceable.scores + create mode 100644 pengine/test10/guest-host-not-fenceable.summary + create mode 100755 pengine/test10/guest-host-not-fenceable.xml + +diff --git a/pengine/regression.sh b/pengine/regression.sh +index 25d9e3f..f2226ed 100755 +--- a/pengine/regression.sh ++++ b/pengine/regression.sh +@@ -862,6 +862,7 @@ do_test whitebox-imply-stop-on-fence "imply stop action on container node rsc wh + do_test whitebox-nested-group "Verify guest remote-node works nested in a group" + do_test guest-node-host-dies "Verify guest node is recovered if host goes away" + do_test guest-node-cleanup "Order guest node connection recovery after container probe" ++do_test guest-host-not-fenceable "Actions on guest node are unrunnable if host is unclean and cannot be fenced" + + echo "" + do_test remote-startup-probes "Baremetal remote-node startup probes" +diff --git a/pengine/test10/guest-host-not-fenceable.dot b/pengine/test10/guest-host-not-fenceable.dot +new file mode 100644 +index 0000000..a510aaf +--- /dev/null ++++ b/pengine/test10/guest-host-not-fenceable.dot +@@ -0,0 +1,258 @@ ++ digraph "g" { ++"galera-bundle-0_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-0_start_0 node1" -> "galera-bundle-0_monitor_60000 node1" [ style = dashed] ++"galera-bundle-0_start_0 node1" -> "galera_clear_failcount_0 galera-bundle-0" [ style = dashed] ++"galera-bundle-0_start_0 node1" -> "galera_monitor_10000 galera-bundle-0" [ style = dashed] ++"galera-bundle-0_start_0 node1" -> "galera_start_0 galera-bundle-0" [ style = dashed] ++"galera-bundle-0_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-0_stop_0 node1" -> "galera-bundle-0_start_0 node1" [ style = dashed] ++"galera-bundle-0_stop_0 node1" -> "galera-bundle-docker-0_stop_0 node1" [ style = bold] ++"galera-bundle-0_stop_0 node1" [ style=bold color="green" fontcolor="black"] ++"galera-bundle-1_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-1_start_0 node1" -> "galera-bundle-1_monitor_60000 node1" [ style = dashed] ++"galera-bundle-1_start_0 node1" -> "galera_monitor_10000 galera-bundle-1" [ style = dashed] ++"galera-bundle-1_start_0 node1" -> "galera_start_0 galera-bundle-1" [ style = dashed] ++"galera-bundle-1_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-1_stop_0 node2" -> "galera-bundle-1_start_0 node1" [ style = dashed] ++"galera-bundle-1_stop_0 node2" -> "galera-bundle-docker-1_stop_0 node2" [ style = dashed] ++"galera-bundle-1_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-2_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-2_start_0 node1" -> "galera-bundle-2_monitor_60000 node1" [ style = dashed] ++"galera-bundle-2_start_0 node1" -> "galera_monitor_20000 galera-bundle-2" [ style = dashed] ++"galera-bundle-2_start_0 node1" -> "galera_monitor_30000 galera-bundle-2" [ style = dashed] ++"galera-bundle-2_start_0 node1" -> "galera_start_0 galera-bundle-2" [ style = dashed] ++"galera-bundle-2_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-2_stop_0 node3" -> "galera-bundle-2_start_0 node1" [ style = dashed] ++"galera-bundle-2_stop_0 node3" -> "galera-bundle-docker-2_stop_0 node3" [ style = dashed] ++"galera-bundle-2_stop_0 node3" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-docker-0_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-docker-0_start_0 node1" -> "galera-bundle-0_start_0 node1" [ style = dashed] ++"galera-bundle-docker-0_start_0 node1" -> "galera-bundle-docker-0_monitor_60000 node1" [ style = dashed] ++"galera-bundle-docker-0_start_0 node1" -> "galera-bundle_running_0" [ style = dashed] ++"galera-bundle-docker-0_start_0 node1" -> "galera_start_0 galera-bundle-0" [ style = dashed] ++"galera-bundle-docker-0_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-docker-0_stop_0 node1" -> "galera-bundle-docker-0_start_0 node1" [ style = dashed] ++"galera-bundle-docker-0_stop_0 node1" -> "galera-bundle_stopped_0" [ style = bold] ++"galera-bundle-docker-0_stop_0 node1" [ style=bold color="green" fontcolor="black"] ++"galera-bundle-docker-1_stop_0 node2" -> "galera-bundle_stopped_0" [ style = dashed] ++"galera-bundle-docker-1_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-docker-2_stop_0 node3" -> "galera-bundle_stopped_0" [ style = dashed] ++"galera-bundle-docker-2_stop_0 node3" [ style=dashed color="red" fontcolor="black"] ++"galera-bundle-master_demote_0" -> "galera-bundle-master_demoted_0" [ style = bold] ++"galera-bundle-master_demote_0" -> "galera_demote_0 galera-bundle-0" [ style = bold] ++"galera-bundle-master_demote_0" -> "galera_demote_0 galera-bundle-1" [ style = dashed] ++"galera-bundle-master_demote_0" -> "galera_demote_0 galera-bundle-2" [ style = dashed] ++"galera-bundle-master_demote_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle-master_demoted_0" -> "galera-bundle-master_start_0" [ style = dashed] ++"galera-bundle-master_demoted_0" -> "galera-bundle-master_stop_0" [ style = bold] ++"galera-bundle-master_demoted_0" -> "galera-bundle_demoted_0" [ style = bold] ++"galera-bundle-master_demoted_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle-master_running_0" -> "galera-bundle_running_0" [ style = dashed] ++"galera-bundle-master_running_0" [ style=dashed color="red" fontcolor="orange"] ++"galera-bundle-master_start_0" -> "galera-bundle-master_running_0" [ style = dashed] ++"galera-bundle-master_start_0" -> "galera_start_0 galera-bundle-0" [ style = dashed] ++"galera-bundle-master_start_0" -> "galera_start_0 galera-bundle-1" [ style = dashed] ++"galera-bundle-master_start_0" -> "galera_start_0 galera-bundle-2" [ style = dashed] ++"galera-bundle-master_start_0" [ style=dashed color="red" fontcolor="orange"] ++"galera-bundle-master_stop_0" -> "galera-bundle-master_stopped_0" [ style = bold] ++"galera-bundle-master_stop_0" -> "galera_stop_0 galera-bundle-0" [ style = bold] ++"galera-bundle-master_stop_0" -> "galera_stop_0 galera-bundle-1" [ style = dashed] ++"galera-bundle-master_stop_0" -> "galera_stop_0 galera-bundle-2" [ style = dashed] ++"galera-bundle-master_stop_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle-master_stopped_0" -> "galera-bundle-master_start_0" [ style = dashed] ++"galera-bundle-master_stopped_0" -> "galera-bundle_stopped_0" [ style = bold] ++"galera-bundle-master_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle_demote_0" -> "galera-bundle-master_demote_0" [ style = bold] ++"galera-bundle_demote_0" -> "galera-bundle_demoted_0" [ style = bold] ++"galera-bundle_demote_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle_demoted_0" -> "galera-bundle_start_0" [ style = dashed] ++"galera-bundle_demoted_0" -> "galera-bundle_stop_0" [ style = bold] ++"galera-bundle_demoted_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle_running_0" [ style=dashed color="red" fontcolor="orange"] ++"galera-bundle_start_0" -> "galera-bundle-docker-0_start_0 node1" [ style = dashed] ++"galera-bundle_start_0" -> "galera-bundle-master_start_0" [ style = dashed] ++"galera-bundle_start_0" [ style=dashed color="red" fontcolor="orange"] ++"galera-bundle_stop_0" -> "galera-bundle-docker-0_stop_0 node1" [ style = bold] ++"galera-bundle_stop_0" -> "galera-bundle-docker-1_stop_0 node2" [ style = dashed] ++"galera-bundle_stop_0" -> "galera-bundle-docker-2_stop_0 node3" [ style = dashed] ++"galera-bundle_stop_0" -> "galera-bundle-master_stop_0" [ style = bold] ++"galera-bundle_stop_0" -> "galera_stop_0 galera-bundle-0" [ style = bold] ++"galera-bundle_stop_0" -> "galera_stop_0 galera-bundle-1" [ style = dashed] ++"galera-bundle_stop_0" -> "galera_stop_0 galera-bundle-2" [ style = dashed] ++"galera-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] ++"galera-bundle_stopped_0" -> "galera-bundle_start_0" [ style = dashed] ++"galera-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"galera_clear_failcount_0 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] ++"galera_demote_0 galera-bundle-0" -> "galera-bundle-0_stop_0 node1" [ style = bold] ++"galera_demote_0 galera-bundle-0" -> "galera-bundle-master_demoted_0" [ style = bold] ++"galera_demote_0 galera-bundle-0" -> "galera_stop_0 galera-bundle-0" [ style = bold] ++"galera_demote_0 galera-bundle-0" [ style=bold color="green" fontcolor="black"] ++"galera_demote_0 galera-bundle-1" -> "galera-bundle-master_demoted_0" [ style = dashed] ++"galera_demote_0 galera-bundle-1" -> "galera_demote_0 galera-bundle-0" [ style = dashed] ++"galera_demote_0 galera-bundle-1" -> "galera_stop_0 galera-bundle-1" [ style = dashed] ++"galera_demote_0 galera-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"galera_demote_0 galera-bundle-2" -> "galera-bundle-master_demoted_0" [ style = dashed] ++"galera_demote_0 galera-bundle-2" -> "galera_demote_0 galera-bundle-1" [ style = dashed] ++"galera_demote_0 galera-bundle-2" -> "galera_monitor_20000 galera-bundle-2" [ style = dashed] ++"galera_demote_0 galera-bundle-2" -> "galera_monitor_30000 galera-bundle-2" [ style = dashed] ++"galera_demote_0 galera-bundle-2" -> "galera_stop_0 galera-bundle-2" [ style = dashed] ++"galera_demote_0 galera-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"galera_monitor_10000 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] ++"galera_monitor_10000 galera-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"galera_monitor_20000 galera-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"galera_monitor_30000 galera-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"galera_start_0 galera-bundle-0" -> "galera-bundle-master_running_0" [ style = dashed] ++"galera_start_0 galera-bundle-0" -> "galera_monitor_10000 galera-bundle-0" [ style = dashed] ++"galera_start_0 galera-bundle-0" -> "galera_start_0 galera-bundle-1" [ style = dashed] ++"galera_start_0 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] ++"galera_start_0 galera-bundle-1" -> "galera-bundle-master_running_0" [ style = dashed] ++"galera_start_0 galera-bundle-1" -> "galera_monitor_10000 galera-bundle-1" [ style = dashed] ++"galera_start_0 galera-bundle-1" -> "galera_start_0 galera-bundle-2" [ style = dashed] ++"galera_start_0 galera-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"galera_start_0 galera-bundle-2" -> "galera-bundle-master_running_0" [ style = dashed] ++"galera_start_0 galera-bundle-2" -> "galera_monitor_20000 galera-bundle-2" [ style = dashed] ++"galera_start_0 galera-bundle-2" -> "galera_monitor_30000 galera-bundle-2" [ style = dashed] ++"galera_start_0 galera-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"galera_stop_0 galera-bundle-0" -> "galera-bundle-0_stop_0 node1" [ style = bold] ++"galera_stop_0 galera-bundle-0" -> "galera-bundle-master_stopped_0" [ style = bold] ++"galera_stop_0 galera-bundle-0" -> "galera_start_0 galera-bundle-0" [ style = dashed] ++"galera_stop_0 galera-bundle-0" [ style=bold color="green" fontcolor="black"] ++"galera_stop_0 galera-bundle-1" -> "galera-bundle-master_stopped_0" [ style = dashed] ++"galera_stop_0 galera-bundle-1" -> "galera_start_0 galera-bundle-1" [ style = dashed] ++"galera_stop_0 galera-bundle-1" -> "galera_stop_0 galera-bundle-0" [ style = dashed] ++"galera_stop_0 galera-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"galera_stop_0 galera-bundle-2" -> "galera-bundle-master_stopped_0" [ style = dashed] ++"galera_stop_0 galera-bundle-2" -> "galera_start_0 galera-bundle-2" [ style = dashed] ++"galera_stop_0 galera-bundle-2" -> "galera_stop_0 galera-bundle-1" [ style = dashed] ++"galera_stop_0 galera-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-0_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-0_start_0 node1" -> "rabbitmq-bundle-0_monitor_60000 node1" [ style = dashed] ++"rabbitmq-bundle-0_start_0 node1" -> "rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq-bundle-0_start_0 node1" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq-bundle-0_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-0_stop_0 node1" -> "rabbitmq-bundle-0_start_0 node1" [ style = dashed] ++"rabbitmq-bundle-0_stop_0 node1" -> "rabbitmq-bundle-docker-0_stop_0 node1" [ style = bold] ++"rabbitmq-bundle-0_stop_0 node1" [ style=bold color="green" fontcolor="black"] ++"rabbitmq-bundle-1_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-1_start_0 node1" -> "rabbitmq-bundle-1_monitor_60000 node1" [ style = dashed] ++"rabbitmq-bundle-1_start_0 node1" -> "rabbitmq_monitor_10000 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle-1_start_0 node1" -> "rabbitmq_start_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle-1_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-1_stop_0 node2" -> "rabbitmq-bundle-1_start_0 node1" [ style = dashed] ++"rabbitmq-bundle-1_stop_0 node2" -> "rabbitmq-bundle-docker-1_stop_0 node2" [ style = dashed] ++"rabbitmq-bundle-1_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-2_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-2_start_0 node1" -> "rabbitmq-bundle-2_monitor_60000 node1" [ style = dashed] ++"rabbitmq-bundle-2_start_0 node1" -> "rabbitmq_monitor_10000 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle-2_start_0 node1" -> "rabbitmq_start_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle-2_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-2_stop_0 node3" -> "rabbitmq-bundle-2_start_0 node1" [ style = dashed] ++"rabbitmq-bundle-2_stop_0 node3" -> "rabbitmq-bundle-docker-2_stop_0 node3" [ style = dashed] ++"rabbitmq-bundle-2_stop_0 node3" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-clone_confirmed-post_notify_running_0" -> "rabbitmq-bundle_running_0" [ style = dashed] ++"rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" -> "rabbitmq-bundle-clone_pre_notify_start_0" [ style = dashed] ++"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" -> "rabbitmq-bundle_stopped_0" [ style = bold] ++"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" -> "rabbitmq-bundle-clone_post_notify_running_0" [ style = dashed] ++"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = dashed] ++"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" -> "rabbitmq-bundle-clone_post_notify_stopped_0" [ style = bold] ++"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" -> "rabbitmq-bundle-clone_stop_0" [ style = bold] ++"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-clone_post_notify_running_0" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = dashed] ++"rabbitmq-bundle-clone_post_notify_running_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_post_notify_stopped_0" -> "rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style = bold] ++"rabbitmq-bundle-clone_post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-clone_pre_notify_start_0" -> "rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style = dashed] ++"rabbitmq-bundle-clone_pre_notify_start_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = bold] ++"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq_pre_notify_stop_0 rabbitmq-bundle-0" [ style = bold] ++"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle-clone_pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-clone_running_0" -> "rabbitmq-bundle-clone_post_notify_running_0" [ style = dashed] ++"rabbitmq-bundle-clone_running_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_start_0" -> "rabbitmq-bundle-clone_running_0" [ style = dashed] ++"rabbitmq-bundle-clone_start_0" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq-bundle-clone_start_0" -> "rabbitmq_start_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle-clone_start_0" -> "rabbitmq_start_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle-clone_start_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle-clone_stop_0" -> "rabbitmq-bundle-clone_stopped_0" [ style = bold] ++"rabbitmq-bundle-clone_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = bold] ++"rabbitmq-bundle-clone_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle-clone_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle-clone_stop_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-clone_stopped_0" -> "rabbitmq-bundle-clone_post_notify_stopped_0" [ style = bold] ++"rabbitmq-bundle-clone_stopped_0" -> "rabbitmq-bundle-clone_start_0" [ style = dashed] ++"rabbitmq-bundle-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle-docker-0_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-docker-0_start_0 node1" -> "rabbitmq-bundle-0_start_0 node1" [ style = dashed] ++"rabbitmq-bundle-docker-0_start_0 node1" -> "rabbitmq-bundle-docker-0_monitor_60000 node1" [ style = dashed] ++"rabbitmq-bundle-docker-0_start_0 node1" -> "rabbitmq-bundle_running_0" [ style = dashed] ++"rabbitmq-bundle-docker-0_start_0 node1" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq-bundle-docker-0_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-docker-0_stop_0 node1" -> "rabbitmq-bundle-docker-0_start_0 node1" [ style = dashed] ++"rabbitmq-bundle-docker-0_stop_0 node1" -> "rabbitmq-bundle_stopped_0" [ style = bold] ++"rabbitmq-bundle-docker-0_stop_0 node1" [ style=bold color="green" fontcolor="black"] ++"rabbitmq-bundle-docker-1_stop_0 node2" -> "rabbitmq-bundle_stopped_0" [ style = dashed] ++"rabbitmq-bundle-docker-1_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle-docker-2_stop_0 node3" -> "rabbitmq-bundle_stopped_0" [ style = dashed] ++"rabbitmq-bundle-docker-2_stop_0 node3" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq-bundle_running_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = dashed] ++"rabbitmq-bundle_start_0" -> "rabbitmq-bundle-docker-0_start_0 node1" [ style = dashed] ++"rabbitmq-bundle_start_0" [ style=dashed color="red" fontcolor="orange"] ++"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-clone_stop_0" [ style = bold] ++"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-docker-0_stop_0 node1" [ style = bold] ++"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-docker-1_stop_0 node2" [ style = dashed] ++"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-docker-2_stop_0 node3" [ style = dashed] ++"rabbitmq-bundle_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = bold] ++"rabbitmq-bundle_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq-bundle_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] ++"rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_monitor_10000 rabbitmq-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_monitor_10000 rabbitmq-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = bold] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = dashed] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = dashed] ++"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_start_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_running_0" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-0" -> "rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-0" -> "rabbitmq_start_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-0" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_start_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_running_0" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-1" -> "rabbitmq_monitor_10000 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-1" -> "rabbitmq_start_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_start_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_running_0" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-2" -> "rabbitmq_monitor_10000 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq_start_0 rabbitmq-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_stop_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-0_stop_0 node1" [ style = bold] ++"rabbitmq_stop_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_stopped_0" [ style = bold] ++"rabbitmq_stop_0 rabbitmq-bundle-0" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] ++"rabbitmq_stop_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_stopped_0" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-1" -> "rabbitmq_start_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-1" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-1" [ style=dashed color="red" fontcolor="black"] ++"rabbitmq_stop_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_stopped_0" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-2" -> "rabbitmq_start_0 rabbitmq-bundle-2" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-2" -> "rabbitmq_stop_0 rabbitmq-bundle-1" [ style = dashed] ++"rabbitmq_stop_0 rabbitmq-bundle-2" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node1_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node2_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node2_start_0 node1" -> "stonith-fence_ipmilan-node2_monitor_60000 node1" [ style = dashed] ++"stonith-fence_ipmilan-node2_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node2_stop_0 node3" -> "stonith-fence_ipmilan-node2_start_0 node1" [ style = dashed] ++"stonith-fence_ipmilan-node2_stop_0 node3" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node3_monitor_60000 node1" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node3_start_0 node1" -> "stonith-fence_ipmilan-node3_monitor_60000 node1" [ style = dashed] ++"stonith-fence_ipmilan-node3_start_0 node1" [ style=dashed color="red" fontcolor="black"] ++"stonith-fence_ipmilan-node3_stop_0 node2" -> "stonith-fence_ipmilan-node3_start_0 node1" [ style = dashed] ++"stonith-fence_ipmilan-node3_stop_0 node2" [ style=dashed color="red" fontcolor="black"] ++} +diff --git a/pengine/test10/guest-host-not-fenceable.exp b/pengine/test10/guest-host-not-fenceable.exp +new file mode 100644 +index 0000000..ed28f2b +--- /dev/null ++++ b/pengine/test10/guest-host-not-fenceable.exp +@@ -0,0 +1,340 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/pengine/test10/guest-host-not-fenceable.scores b/pengine/test10/guest-host-not-fenceable.scores +new file mode 100644 +index 0000000..80bd0d4 +--- /dev/null ++++ b/pengine/test10/guest-host-not-fenceable.scores +@@ -0,0 +1,134 @@ ++Allocation scores: ++Using the original execution date of: 2019-08-26 04:52:42Z ++clone_color: galera-bundle-master allocation score on galera-bundle-0: 0 ++clone_color: galera-bundle-master allocation score on galera-bundle-1: 0 ++clone_color: galera-bundle-master allocation score on galera-bundle-2: 0 ++clone_color: galera-bundle-master allocation score on node1: -INFINITY ++clone_color: galera-bundle-master allocation score on node2: -INFINITY ++clone_color: galera-bundle-master allocation score on node3: -INFINITY ++clone_color: galera:0 allocation score on galera-bundle-0: INFINITY ++clone_color: galera:1 allocation score on galera-bundle-1: INFINITY ++clone_color: galera:2 allocation score on galera-bundle-2: INFINITY ++clone_color: rabbitmq-bundle-clone allocation score on node1: -INFINITY ++clone_color: rabbitmq-bundle-clone allocation score on node2: -INFINITY ++clone_color: rabbitmq-bundle-clone allocation score on node3: -INFINITY ++clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-0: 0 ++clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-1: 0 ++clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-2: 0 ++clone_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY ++clone_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY ++clone_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY ++container_color: galera-bundle allocation score on node1: 0 ++container_color: galera-bundle allocation score on node2: 0 ++container_color: galera-bundle allocation score on node3: 0 ++container_color: galera-bundle-0 allocation score on node1: INFINITY ++container_color: galera-bundle-0 allocation score on node2: 0 ++container_color: galera-bundle-0 allocation score on node3: 0 ++container_color: galera-bundle-1 allocation score on node1: 0 ++container_color: galera-bundle-1 allocation score on node2: INFINITY ++container_color: galera-bundle-1 allocation score on node3: 0 ++container_color: galera-bundle-2 allocation score on node1: 0 ++container_color: galera-bundle-2 allocation score on node2: 0 ++container_color: galera-bundle-2 allocation score on node3: INFINITY ++container_color: galera-bundle-docker-0 allocation score on node1: INFINITY ++container_color: galera-bundle-docker-0 allocation score on node2: 0 ++container_color: galera-bundle-docker-0 allocation score on node3: 0 ++container_color: galera-bundle-docker-1 allocation score on node1: 0 ++container_color: galera-bundle-docker-1 allocation score on node2: INFINITY ++container_color: galera-bundle-docker-1 allocation score on node3: 0 ++container_color: galera-bundle-docker-2 allocation score on node1: 0 ++container_color: galera-bundle-docker-2 allocation score on node2: 0 ++container_color: galera-bundle-docker-2 allocation score on node3: INFINITY ++container_color: galera-bundle-master allocation score on galera-bundle-0: -INFINITY ++container_color: galera-bundle-master allocation score on galera-bundle-1: -INFINITY ++container_color: galera-bundle-master allocation score on galera-bundle-2: -INFINITY ++container_color: galera-bundle-master allocation score on node1: 0 ++container_color: galera-bundle-master allocation score on node2: 0 ++container_color: galera-bundle-master allocation score on node3: 0 ++container_color: galera:0 allocation score on galera-bundle-0: INFINITY ++container_color: galera:1 allocation score on galera-bundle-1: INFINITY ++container_color: galera:2 allocation score on galera-bundle-2: INFINITY ++container_color: rabbitmq-bundle allocation score on node1: 0 ++container_color: rabbitmq-bundle allocation score on node2: 0 ++container_color: rabbitmq-bundle allocation score on node3: 0 ++container_color: rabbitmq-bundle-0 allocation score on node1: INFINITY ++container_color: rabbitmq-bundle-0 allocation score on node2: 0 ++container_color: rabbitmq-bundle-0 allocation score on node3: 0 ++container_color: rabbitmq-bundle-1 allocation score on node1: 0 ++container_color: rabbitmq-bundle-1 allocation score on node2: INFINITY ++container_color: rabbitmq-bundle-1 allocation score on node3: 0 ++container_color: rabbitmq-bundle-2 allocation score on node1: 0 ++container_color: rabbitmq-bundle-2 allocation score on node2: 0 ++container_color: rabbitmq-bundle-2 allocation score on node3: INFINITY ++container_color: rabbitmq-bundle-clone allocation score on node1: 0 ++container_color: rabbitmq-bundle-clone allocation score on node2: 0 ++container_color: rabbitmq-bundle-clone allocation score on node3: 0 ++container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-0: -INFINITY ++container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-1: -INFINITY ++container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-2: -INFINITY ++container_color: rabbitmq-bundle-docker-0 allocation score on node1: INFINITY ++container_color: rabbitmq-bundle-docker-0 allocation score on node2: 0 ++container_color: rabbitmq-bundle-docker-0 allocation score on node3: 0 ++container_color: rabbitmq-bundle-docker-1 allocation score on node1: 0 ++container_color: rabbitmq-bundle-docker-1 allocation score on node2: INFINITY ++container_color: rabbitmq-bundle-docker-1 allocation score on node3: 0 ++container_color: rabbitmq-bundle-docker-2 allocation score on node1: 0 ++container_color: rabbitmq-bundle-docker-2 allocation score on node2: 0 ++container_color: rabbitmq-bundle-docker-2 allocation score on node3: INFINITY ++container_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY ++container_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY ++container_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY ++galera:0 promotion score on galera-bundle-0: 100 ++galera:1 promotion score on galera-bundle-1: 100 ++galera:2 promotion score on galera-bundle-2: -1 ++native_color: galera-bundle-0 allocation score on node1: INFINITY ++native_color: galera-bundle-0 allocation score on node2: 0 ++native_color: galera-bundle-0 allocation score on node3: 0 ++native_color: galera-bundle-1 allocation score on node1: 0 ++native_color: galera-bundle-1 allocation score on node2: INFINITY ++native_color: galera-bundle-1 allocation score on node3: 0 ++native_color: galera-bundle-2 allocation score on node1: 0 ++native_color: galera-bundle-2 allocation score on node2: 0 ++native_color: galera-bundle-2 allocation score on node3: INFINITY ++native_color: galera-bundle-docker-0 allocation score on node1: INFINITY ++native_color: galera-bundle-docker-0 allocation score on node2: -INFINITY ++native_color: galera-bundle-docker-0 allocation score on node3: -INFINITY ++native_color: galera-bundle-docker-1 allocation score on node1: -INFINITY ++native_color: galera-bundle-docker-1 allocation score on node2: -INFINITY ++native_color: galera-bundle-docker-1 allocation score on node3: -INFINITY ++native_color: galera-bundle-docker-2 allocation score on node1: -INFINITY ++native_color: galera-bundle-docker-2 allocation score on node2: -INFINITY ++native_color: galera-bundle-docker-2 allocation score on node3: -INFINITY ++native_color: galera:0 allocation score on galera-bundle-0: INFINITY ++native_color: galera:1 allocation score on galera-bundle-1: INFINITY ++native_color: galera:2 allocation score on galera-bundle-2: INFINITY ++native_color: rabbitmq-bundle-0 allocation score on node1: INFINITY ++native_color: rabbitmq-bundle-0 allocation score on node2: 0 ++native_color: rabbitmq-bundle-0 allocation score on node3: 0 ++native_color: rabbitmq-bundle-1 allocation score on node1: 0 ++native_color: rabbitmq-bundle-1 allocation score on node2: INFINITY ++native_color: rabbitmq-bundle-1 allocation score on node3: 0 ++native_color: rabbitmq-bundle-2 allocation score on node1: 0 ++native_color: rabbitmq-bundle-2 allocation score on node2: 0 ++native_color: rabbitmq-bundle-2 allocation score on node3: INFINITY ++native_color: rabbitmq-bundle-docker-0 allocation score on node1: INFINITY ++native_color: rabbitmq-bundle-docker-0 allocation score on node2: -INFINITY ++native_color: rabbitmq-bundle-docker-0 allocation score on node3: -INFINITY ++native_color: rabbitmq-bundle-docker-1 allocation score on node1: -INFINITY ++native_color: rabbitmq-bundle-docker-1 allocation score on node2: -INFINITY ++native_color: rabbitmq-bundle-docker-1 allocation score on node3: -INFINITY ++native_color: rabbitmq-bundle-docker-2 allocation score on node1: -INFINITY ++native_color: rabbitmq-bundle-docker-2 allocation score on node2: -INFINITY ++native_color: rabbitmq-bundle-docker-2 allocation score on node3: -INFINITY ++native_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY ++native_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY ++native_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY ++native_color: stonith-fence_ipmilan-node1 allocation score on node1: -INFINITY ++native_color: stonith-fence_ipmilan-node1 allocation score on node2: INFINITY ++native_color: stonith-fence_ipmilan-node1 allocation score on node3: 0 ++native_color: stonith-fence_ipmilan-node2 allocation score on node1: 0 ++native_color: stonith-fence_ipmilan-node2 allocation score on node2: -INFINITY ++native_color: stonith-fence_ipmilan-node2 allocation score on node3: INFINITY ++native_color: stonith-fence_ipmilan-node3 allocation score on node1: 0 ++native_color: stonith-fence_ipmilan-node3 allocation score on node2: INFINITY ++native_color: stonith-fence_ipmilan-node3 allocation score on node3: -INFINITY +diff --git a/pengine/test10/guest-host-not-fenceable.summary b/pengine/test10/guest-host-not-fenceable.summary +new file mode 100644 +index 0000000..54a4d7b +--- /dev/null ++++ b/pengine/test10/guest-host-not-fenceable.summary +@@ -0,0 +1,87 @@ ++Using the original execution date of: 2019-08-26 04:52:42Z ++ ++Current cluster status: ++Node node2 (2): UNCLEAN (offline) ++Node node3 (3): UNCLEAN (offline) ++Online: [ node1 ] ++Containers: [ galera-bundle-0:galera-bundle-docker-0 rabbitmq-bundle-0:rabbitmq-bundle-docker-0 ] ++ ++ Docker container set: rabbitmq-bundle [192.168.122.139:8787/rhosp13/openstack-rabbitmq:pcmklatest] ++ rabbitmq-bundle-0 (ocf::heartbeat:rabbitmq-cluster): Started node1 ++ rabbitmq-bundle-1 (ocf::heartbeat:rabbitmq-cluster): FAILED node2 (UNCLEAN) ++ rabbitmq-bundle-2 (ocf::heartbeat:rabbitmq-cluster): FAILED node3 (UNCLEAN) ++ Docker container set: galera-bundle [192.168.122.139:8787/rhosp13/openstack-mariadb:pcmklatest] ++ galera-bundle-0 (ocf::heartbeat:galera): FAILED Master node1 ++ galera-bundle-1 (ocf::heartbeat:galera): FAILED Master node2 (UNCLEAN) ++ galera-bundle-2 (ocf::heartbeat:galera): FAILED Master node3 (UNCLEAN) ++ stonith-fence_ipmilan-node1 (stonith:fence_ipmilan): Started node2 (UNCLEAN) ++ stonith-fence_ipmilan-node3 (stonith:fence_ipmilan): Started node2 (UNCLEAN) ++ stonith-fence_ipmilan-node2 (stonith:fence_ipmilan): Started node3 (UNCLEAN) ++ ++Transition Summary: ++ * Stop rabbitmq-bundle-docker-0 ( node1 ) due to no quorum ++ * Stop rabbitmq-bundle-0 ( node1 ) due to no quorum ++ * Stop rabbitmq:0 ( rabbitmq-bundle-0 ) due to no quorum ++ * Stop rabbitmq-bundle-docker-1 ( node2 ) due to node availability (blocked) ++ * Stop rabbitmq-bundle-1 ( node2 ) due to no quorum (blocked) ++ * Stop rabbitmq:1 ( rabbitmq-bundle-1 ) due to no quorum (blocked) ++ * Stop rabbitmq-bundle-docker-2 ( node3 ) due to node availability (blocked) ++ * Stop rabbitmq-bundle-2 ( node3 ) due to no quorum (blocked) ++ * Stop rabbitmq:2 ( rabbitmq-bundle-2 ) due to no quorum (blocked) ++ * Stop galera-bundle-docker-0 ( node1 ) due to no quorum ++ * Stop galera-bundle-0 ( node1 ) due to no quorum ++ * Stop galera:0 ( Master galera-bundle-0 ) due to no quorum ++ * Stop galera-bundle-docker-1 ( node2 ) due to node availability (blocked) ++ * Stop galera-bundle-1 ( node2 ) due to no quorum (blocked) ++ * Stop galera:1 ( Master galera-bundle-1 ) due to no quorum (blocked) ++ * Stop galera-bundle-docker-2 ( node3 ) due to node availability (blocked) ++ * Stop galera-bundle-2 ( node3 ) due to no quorum (blocked) ++ * Stop galera:2 ( Master galera-bundle-2 ) due to no quorum (blocked) ++ * Stop stonith-fence_ipmilan-node1 ( node2 ) due to node availability (blocked) ++ * Stop stonith-fence_ipmilan-node3 ( node2 ) due to no quorum (blocked) ++ * Stop stonith-fence_ipmilan-node2 ( node3 ) due to no quorum (blocked) ++ ++Executing cluster transition: ++ * Pseudo action: rabbitmq-bundle-clone_pre_notify_stop_0 ++ * Pseudo action: galera-bundle_demote_0 ++ * Pseudo action: rabbitmq-bundle_stop_0 ++ * Resource action: rabbitmq notify on rabbitmq-bundle-0 ++ * Pseudo action: rabbitmq-bundle-clone_confirmed-pre_notify_stop_0 ++ * Pseudo action: rabbitmq-bundle-clone_stop_0 ++ * Pseudo action: galera-bundle-master_demote_0 ++ * Resource action: rabbitmq stop on rabbitmq-bundle-0 ++ * Pseudo action: rabbitmq-bundle-clone_stopped_0 ++ * Resource action: rabbitmq-bundle-0 stop on node1 ++ * Resource action: galera demote on galera-bundle-0 ++ * Pseudo action: galera-bundle-master_demoted_0 ++ * Pseudo action: galera-bundle_demoted_0 ++ * Pseudo action: galera-bundle_stop_0 ++ * Pseudo action: rabbitmq-bundle-clone_post_notify_stopped_0 ++ * Resource action: rabbitmq-bundle-docker-0 stop on node1 ++ * Pseudo action: galera-bundle-master_stop_0 ++ * Pseudo action: rabbitmq-bundle-clone_confirmed-post_notify_stopped_0 ++ * Resource action: galera stop on galera-bundle-0 ++ * Pseudo action: galera-bundle-master_stopped_0 ++ * Resource action: galera-bundle-0 stop on node1 ++ * Pseudo action: rabbitmq-bundle_stopped_0 ++ * Resource action: galera-bundle-docker-0 stop on node1 ++ * Pseudo action: galera-bundle_stopped_0 ++Using the original execution date of: 2019-08-26 04:52:42Z ++ ++Revised cluster status: ++Node node2 (2): UNCLEAN (offline) ++Node node3 (3): UNCLEAN (offline) ++Online: [ node1 ] ++ ++ Docker container set: rabbitmq-bundle [192.168.122.139:8787/rhosp13/openstack-rabbitmq:pcmklatest] ++ rabbitmq-bundle-0 (ocf::heartbeat:rabbitmq-cluster): Stopped ++ rabbitmq-bundle-1 (ocf::heartbeat:rabbitmq-cluster): FAILED node2 (UNCLEAN) ++ rabbitmq-bundle-2 (ocf::heartbeat:rabbitmq-cluster): FAILED node3 (UNCLEAN) ++ Docker container set: galera-bundle [192.168.122.139:8787/rhosp13/openstack-mariadb:pcmklatest] ++ galera-bundle-0 (ocf::heartbeat:galera): Stopped ++ galera-bundle-1 (ocf::heartbeat:galera): FAILED Master node2 (UNCLEAN) ++ galera-bundle-2 (ocf::heartbeat:galera): FAILED Master node3 (UNCLEAN) ++ stonith-fence_ipmilan-node1 (stonith:fence_ipmilan): Started node2 (UNCLEAN) ++ stonith-fence_ipmilan-node3 (stonith:fence_ipmilan): Started node2 (UNCLEAN) ++ stonith-fence_ipmilan-node2 (stonith:fence_ipmilan): Started node3 (UNCLEAN) ++ +diff --git a/pengine/test10/guest-host-not-fenceable.xml b/pengine/test10/guest-host-not-fenceable.xml +new file mode 100755 +index 0000000..a1ccdc8 +--- /dev/null ++++ b/pengine/test10/guest-host-not-fenceable.xml +@@ -0,0 +1,413 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +1.8.3.1 + diff --git a/SPECS/pacemaker.spec b/SPECS/pacemaker.spec index 1b30736..00339de 100644 --- a/SPECS/pacemaker.spec +++ b/SPECS/pacemaker.spec @@ -168,7 +168,7 @@ Name: pacemaker Summary: Scalable High-Availability cluster resource manager Version: %{pcmkversion} -Release: %{pcmk_release}%{?dist}.1 +Release: %{pcmk_release}%{?dist}.2 %if %{defined _unitdir} License: GPLv2+ and LGPLv2+ %else @@ -196,6 +196,8 @@ Patch9: 009-use-after-free.patch Patch10: 010-fork-callback.patch Patch11: 011-remote.patch Patch12: 012-tls-priorities.patch +Patch13: 013-guest-node.patch +Patch14: 014-guest-node-test.patch # patches that aren't from upstream Patch100: lrmd-protocol-version.patch @@ -214,7 +216,7 @@ Provides: pcmk-cluster-manager %{?systemd_requires} -ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm} +ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 # Pacemaker targets compatibility with python 2.6+ and 3.2+ Requires: python >= 2.6 @@ -883,6 +885,10 @@ exit 0 %attr(0644,root,root) %{_datadir}/pacemaker/nagios/plugins-metadata/* %changelog +* Mon Nov 11 2019 Ken Gaillot - 1.1.20-5.2 +- Avoid invalid transition when guest node's host is unclean but can't be fenced +- Resolves: rhbz#1770734 + * Tue Jul 23 2019 Ken Gaillot - 1.1.20-5.1 - Handle losing remote node while it is shutting down - Allow configurable GnuTLS cipher priorities and use stricter default