From 13f0520789036d7f93cf69a9abcfb398177f3928 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 31 2015 13:17:23 +0000 Subject: import pacemaker-1.1.12-22.el7_1.4 --- diff --git a/SOURCES/bz1117341-remote-imply-stop-on-fence.patch b/SOURCES/bz1117341-remote-imply-stop-on-fence.patch deleted file mode 100644 index 9b3676a..0000000 --- a/SOURCES/bz1117341-remote-imply-stop-on-fence.patch +++ /dev/null @@ -1,1399 +0,0 @@ -diff --git a/pengine/native.c b/pengine/native.c -index 62639d0..3f1807e 100644 ---- a/pengine/native.c -+++ b/pengine/native.c -@@ -2913,6 +2913,39 @@ native_start_constraints(resource_t * rsc, action_t * stonith_op, gboolean is_st - } - } - -+static GListPtr -+find_fence_target_node_actions(GListPtr search_list, const char *key, node_t *fence_target, pe_working_set_t *data_set) -+{ -+ GListPtr gIter = NULL; -+ GListPtr result_list = find_actions(search_list, key, fence_target); -+ -+ /* find stop actions for this rsc on any container nodes running on -+ * the fencing target node */ -+ for (gIter = fence_target->details->running_rsc; gIter != NULL; gIter = gIter->next) { -+ GListPtr iter = NULL; -+ GListPtr tmp_list = NULL; -+ resource_t *tmp_rsc = (resource_t *) gIter->data; -+ node_t *container_node = NULL; -+ -+ /* found a container node that lives on the host node -+ * that is getting fenced. Find stop for our rsc that live on -+ * the container node as well. These stop operations are also -+ * implied by fencing of the host cluster node. */ -+ if (tmp_rsc->is_remote_node && tmp_rsc->container != NULL) { -+ container_node = pe_find_node(data_set->nodes, tmp_rsc->id); -+ } -+ if (container_node) { -+ tmp_list = find_actions(search_list, key, container_node); -+ } -+ for (iter = tmp_list; iter != NULL; iter = iter->next) { -+ result_list = g_list_prepend(result_list, (action_t *) iter->data); -+ } -+ g_list_free(tmp_list); -+ } -+ -+ return result_list; -+} -+ - static void - native_stop_constraints(resource_t * rsc, action_t * stonith_op, gboolean is_stonith, - pe_working_set_t * data_set) -@@ -2923,7 +2956,7 @@ native_stop_constraints(resource_t * rsc, action_t * stonith_op, gboolean is_sto - resource_t *top = uber_parent(rsc); - - key = stop_key(rsc); -- action_list = find_actions(rsc->actions, key, stonith_op->node); -+ action_list = find_fence_target_node_actions(rsc->actions, key, stonith_op->node, data_set); - free(key); - - /* add the stonith OP as a stop pre-req and the mark the stop -@@ -3032,7 +3065,7 @@ native_stop_constraints(resource_t * rsc, action_t * stonith_op, gboolean is_sto - g_list_free(action_list); - - key = demote_key(rsc); -- action_list = find_actions(rsc->actions, key, stonith_op->node); -+ action_list = find_fence_target_node_actions(rsc->actions, key, stonith_op->node, data_set); - free(key); - - for (gIter = action_list; gIter != NULL; gIter = gIter->next) { -diff --git a/pengine/regression.sh b/pengine/regression.sh -index c2bc7fb..9172acb 100755 ---- a/pengine/regression.sh -+++ b/pengine/regression.sh -@@ -768,6 +768,7 @@ do_test whitebox-orphaned "Properly shutdown orphaned whitebox container" - do_test whitebox-orphan-ms "Properly tear down orphan ms resources on remote-nodes" - do_test whitebox-unexpectedly-running "Recover container nodes the cluster did not start." - do_test whitebox-migrate1 "Migrate both container and connection resource" -+do_test whitebox-imply-stop-on-fence "imply stop action on container node rsc when host node is fenced" - - echo "" - do_test remote-startup-probes "Baremetal remote-node startup probes" -diff --git a/pengine/test10/whitebox-imply-stop-on-fence.dot b/pengine/test10/whitebox-imply-stop-on-fence.dot -new file mode 100644 -index 0000000..66700b8 ---- /dev/null -+++ b/pengine/test10/whitebox-imply-stop-on-fence.dot -@@ -0,0 +1,93 @@ -+ digraph "g" { -+"R-lxc-01_kiff-01_monitor_10000 kiff-02" [ style=bold color="green" fontcolor="black"] -+"R-lxc-01_kiff-01_start_0 kiff-02" -> "R-lxc-01_kiff-01_monitor_10000 kiff-02" [ style = bold] -+"R-lxc-01_kiff-01_start_0 kiff-02" -> "lxc-01_kiff-01_start_0 kiff-02" [ style = bold] -+"R-lxc-01_kiff-01_start_0 kiff-02" [ style=bold color="green" fontcolor="black"] -+"R-lxc-01_kiff-01_stop_0 kiff-01" -> "R-lxc-01_kiff-01_start_0 kiff-02" [ style = bold] -+"R-lxc-01_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"R-lxc-01_kiff-01_stop_0 kiff-01" -> "shared0-clone_stop_0" [ style = bold] -+"R-lxc-01_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"R-lxc-02_kiff-01_monitor_10000 kiff-02" [ style=bold color="green" fontcolor="black"] -+"R-lxc-02_kiff-01_start_0 kiff-02" -> "R-lxc-02_kiff-01_monitor_10000 kiff-02" [ style = bold] -+"R-lxc-02_kiff-01_start_0 kiff-02" -> "lxc-02_kiff-01_start_0 kiff-02" [ style = bold] -+"R-lxc-02_kiff-01_start_0 kiff-02" [ style=bold color="green" fontcolor="black"] -+"R-lxc-02_kiff-01_stop_0 kiff-01" -> "R-lxc-02_kiff-01_start_0 kiff-02" [ style = bold] -+"R-lxc-02_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"R-lxc-02_kiff-01_stop_0 kiff-01" -> "shared0-clone_stop_0" [ style = bold] -+"R-lxc-02_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"clvmd-clone_stop_0" -> "clvmd-clone_stopped_0" [ style = bold] -+"clvmd-clone_stop_0" -> "clvmd_stop_0 kiff-01" [ style = bold] -+"clvmd-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"clvmd-clone_stopped_0" -> "dlm-clone_stop_0" [ style = bold] -+"clvmd-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"clvmd_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"clvmd_stop_0 kiff-01" -> "clvmd-clone_stopped_0" [ style = bold] -+"clvmd_stop_0 kiff-01" -> "dlm_stop_0 kiff-01" [ style = bold] -+"clvmd_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"dlm-clone_stop_0" -> "dlm-clone_stopped_0" [ style = bold] -+"dlm-clone_stop_0" -> "dlm_stop_0 kiff-01" [ style = bold] -+"dlm-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"dlm-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"dlm_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"dlm_stop_0 kiff-01" -> "dlm-clone_stopped_0" [ style = bold] -+"dlm_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"fence-kiff-02_monitor_60000 kiff-02" [ style=bold color="green" fontcolor="black"] -+"fence-kiff-02_start_0 kiff-02" -> "fence-kiff-02_monitor_60000 kiff-02" [ style = bold] -+"fence-kiff-02_start_0 kiff-02" [ style=bold color="green" fontcolor="black"] -+"fence-kiff-02_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"fence-kiff-02_stop_0 kiff-01" -> "fence-kiff-02_start_0 kiff-02" [ style = bold] -+"fence-kiff-02_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"lxc-01_kiff-01_monitor_30000 kiff-02" [ style=bold color="green" fontcolor="black"] -+"lxc-01_kiff-01_start_0 kiff-02" -> "lxc-01_kiff-01_monitor_30000 kiff-02" [ style = bold] -+"lxc-01_kiff-01_start_0 kiff-02" -> "vm-fs_monitor_20000 lxc-01_kiff-01" [ style = bold] -+"lxc-01_kiff-01_start_0 kiff-02" -> "vm-fs_start_0 lxc-01_kiff-01" [ style = bold] -+"lxc-01_kiff-01_start_0 kiff-02" [ style=bold color="green" fontcolor="black"] -+"lxc-01_kiff-01_stop_0 kiff-01" -> "R-lxc-01_kiff-01_stop_0 kiff-01" [ style = bold] -+"lxc-01_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"lxc-01_kiff-01_stop_0 kiff-01" -> "lxc-01_kiff-01_start_0 kiff-02" [ style = bold] -+"lxc-01_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"lxc-02_kiff-01_monitor_30000 kiff-02" [ style=bold color="green" fontcolor="black"] -+"lxc-02_kiff-01_start_0 kiff-02" -> "lxc-02_kiff-01_monitor_30000 kiff-02" [ style = bold] -+"lxc-02_kiff-01_start_0 kiff-02" [ style=bold color="green" fontcolor="black"] -+"lxc-02_kiff-01_stop_0 kiff-01" -> "R-lxc-02_kiff-01_stop_0 kiff-01" [ style = bold] -+"lxc-02_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"lxc-02_kiff-01_stop_0 kiff-01" -> "lxc-02_kiff-01_start_0 kiff-02" [ style = bold] -+"lxc-02_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"shared0-clone_stop_0" -> "shared0-clone_stopped_0" [ style = bold] -+"shared0-clone_stop_0" -> "shared0_stop_0 kiff-01" [ style = bold] -+"shared0-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"shared0-clone_stopped_0" -> "clvmd-clone_stop_0" [ style = bold] -+"shared0-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"shared0_stop_0 kiff-01" -> "all_stopped" [ style = bold] -+"shared0_stop_0 kiff-01" -> "clvmd_stop_0 kiff-01" [ style = bold] -+"shared0_stop_0 kiff-01" -> "shared0-clone_stopped_0" [ style = bold] -+"shared0_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] -+"stonith 'reboot' kiff-01" -> "R-lxc-01_kiff-01_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "R-lxc-02_kiff-01_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "clvmd-clone_stop_0" [ style = bold] -+"stonith 'reboot' kiff-01" -> "clvmd_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "dlm-clone_stop_0" [ style = bold] -+"stonith 'reboot' kiff-01" -> "dlm_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "fence-kiff-02_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "lxc-01_kiff-01_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "lxc-02_kiff-01_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "shared0-clone_stop_0" [ style = bold] -+"stonith 'reboot' kiff-01" -> "shared0_stop_0 kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" -> "stonith_complete" [ style = bold] -+"stonith 'reboot' kiff-01" -> "vm-fs_stop_0 lxc-01_kiff-01" [ style = bold] -+"stonith 'reboot' kiff-01" [ style=bold color="green" fontcolor="black"] -+"stonith_complete" -> "R-lxc-01_kiff-01_start_0 kiff-02" [ style = bold] -+"stonith_complete" -> "R-lxc-02_kiff-01_start_0 kiff-02" [ style = bold] -+"stonith_complete" -> "all_stopped" [ style = bold] -+"stonith_complete" -> "lxc-01_kiff-01_start_0 kiff-02" [ style = bold] -+"stonith_complete" -> "lxc-02_kiff-01_start_0 kiff-02" [ style = bold] -+"stonith_complete" -> "vm-fs_start_0 lxc-01_kiff-01" [ style = bold] -+"stonith_complete" [ style=bold color="green" fontcolor="orange"] -+"vm-fs_monitor_20000 lxc-01_kiff-01" [ style=bold color="green" fontcolor="black"] -+"vm-fs_start_0 lxc-01_kiff-01" -> "vm-fs_monitor_20000 lxc-01_kiff-01" [ style = bold] -+"vm-fs_start_0 lxc-01_kiff-01" [ style=bold color="green" fontcolor="black"] -+"vm-fs_stop_0 lxc-01_kiff-01" -> "all_stopped" [ style = bold] -+"vm-fs_stop_0 lxc-01_kiff-01" -> "vm-fs_start_0 lxc-01_kiff-01" [ style = bold] -+"vm-fs_stop_0 lxc-01_kiff-01" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/whitebox-imply-stop-on-fence.exp b/pengine/test10/whitebox-imply-stop-on-fence.exp -new file mode 100644 -index 0000000..d13c25f ---- /dev/null -+++ b/pengine/test10/whitebox-imply-stop-on-fence.exp -@@ -0,0 +1,466 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/whitebox-imply-stop-on-fence.scores b/pengine/test10/whitebox-imply-stop-on-fence.scores -new file mode 100644 -index 0000000..e50f077 ---- /dev/null -+++ b/pengine/test10/whitebox-imply-stop-on-fence.scores -@@ -0,0 +1,301 @@ -+Allocation scores: -+clone_color: clvmd-clone allocation score on kiff-01: 0 -+clone_color: clvmd-clone allocation score on kiff-02: 0 -+clone_color: clvmd-clone allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd-clone allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd-clone allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd-clone allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:0 allocation score on kiff-01: 1 -+clone_color: clvmd:0 allocation score on kiff-02: 0 -+clone_color: clvmd:0 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:0 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:0 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:0 allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:1 allocation score on kiff-01: 0 -+clone_color: clvmd:1 allocation score on kiff-02: 1 -+clone_color: clvmd:1 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:1 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:1 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:1 allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:2 allocation score on kiff-01: 0 -+clone_color: clvmd:2 allocation score on kiff-02: 0 -+clone_color: clvmd:2 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:2 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:2 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:2 allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:3 allocation score on kiff-01: 0 -+clone_color: clvmd:3 allocation score on kiff-02: 0 -+clone_color: clvmd:3 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:3 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:3 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:3 allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:4 allocation score on kiff-01: 0 -+clone_color: clvmd:4 allocation score on kiff-02: 0 -+clone_color: clvmd:4 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:4 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:4 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:4 allocation score on lxc-02_kiff-02: 0 -+clone_color: clvmd:5 allocation score on kiff-01: 0 -+clone_color: clvmd:5 allocation score on kiff-02: 0 -+clone_color: clvmd:5 allocation score on lxc-01_kiff-01: 0 -+clone_color: clvmd:5 allocation score on lxc-01_kiff-02: 0 -+clone_color: clvmd:5 allocation score on lxc-02_kiff-01: 0 -+clone_color: clvmd:5 allocation score on lxc-02_kiff-02: 0 -+clone_color: dlm-clone allocation score on kiff-01: 0 -+clone_color: dlm-clone allocation score on kiff-02: 0 -+clone_color: dlm-clone allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm-clone allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm-clone allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm-clone allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:0 allocation score on kiff-01: 1 -+clone_color: dlm:0 allocation score on kiff-02: 0 -+clone_color: dlm:0 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:0 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:0 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:0 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:1 allocation score on kiff-01: 0 -+clone_color: dlm:1 allocation score on kiff-02: 1 -+clone_color: dlm:1 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:1 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:1 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:1 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:2 allocation score on kiff-01: 0 -+clone_color: dlm:2 allocation score on kiff-02: 0 -+clone_color: dlm:2 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:2 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:2 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:2 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:3 allocation score on kiff-01: 0 -+clone_color: dlm:3 allocation score on kiff-02: 0 -+clone_color: dlm:3 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:3 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:3 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:3 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:4 allocation score on kiff-01: 0 -+clone_color: dlm:4 allocation score on kiff-02: 0 -+clone_color: dlm:4 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:4 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:4 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:4 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: dlm:5 allocation score on kiff-01: 0 -+clone_color: dlm:5 allocation score on kiff-02: 0 -+clone_color: dlm:5 allocation score on lxc-01_kiff-01: -INFINITY -+clone_color: dlm:5 allocation score on lxc-01_kiff-02: -INFINITY -+clone_color: dlm:5 allocation score on lxc-02_kiff-01: -INFINITY -+clone_color: dlm:5 allocation score on lxc-02_kiff-02: -INFINITY -+clone_color: shared0-clone allocation score on kiff-01: 0 -+clone_color: shared0-clone allocation score on kiff-02: 0 -+clone_color: shared0-clone allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0-clone allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0-clone allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0-clone allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:0 allocation score on kiff-01: 1 -+clone_color: shared0:0 allocation score on kiff-02: 0 -+clone_color: shared0:0 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:0 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:0 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:0 allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:1 allocation score on kiff-01: 0 -+clone_color: shared0:1 allocation score on kiff-02: 1 -+clone_color: shared0:1 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:1 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:1 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:1 allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:2 allocation score on kiff-01: 0 -+clone_color: shared0:2 allocation score on kiff-02: 0 -+clone_color: shared0:2 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:2 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:2 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:2 allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:3 allocation score on kiff-01: 0 -+clone_color: shared0:3 allocation score on kiff-02: 0 -+clone_color: shared0:3 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:3 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:3 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:3 allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:4 allocation score on kiff-01: 0 -+clone_color: shared0:4 allocation score on kiff-02: 0 -+clone_color: shared0:4 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:4 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:4 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:4 allocation score on lxc-02_kiff-02: 0 -+clone_color: shared0:5 allocation score on kiff-01: 0 -+clone_color: shared0:5 allocation score on kiff-02: 0 -+clone_color: shared0:5 allocation score on lxc-01_kiff-01: 0 -+clone_color: shared0:5 allocation score on lxc-01_kiff-02: 0 -+clone_color: shared0:5 allocation score on lxc-02_kiff-01: 0 -+clone_color: shared0:5 allocation score on lxc-02_kiff-02: 0 -+native_color: R-lxc-01_kiff-01 allocation score on kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-01 allocation score on kiff-02: 0 -+native_color: R-lxc-01_kiff-01 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-01 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: R-lxc-01_kiff-01 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-01 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: R-lxc-01_kiff-02 allocation score on kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-02 allocation score on kiff-02: 100 -+native_color: R-lxc-01_kiff-02 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-02 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: R-lxc-01_kiff-02 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: R-lxc-01_kiff-02 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: R-lxc-02_kiff-01 allocation score on kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-01 allocation score on kiff-02: 0 -+native_color: R-lxc-02_kiff-01 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-01 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: R-lxc-02_kiff-01 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-01 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: R-lxc-02_kiff-02 allocation score on kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-02 allocation score on kiff-02: 100 -+native_color: R-lxc-02_kiff-02 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-02 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: R-lxc-02_kiff-02 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: R-lxc-02_kiff-02 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:0 allocation score on kiff-01: -INFINITY -+native_color: clvmd:0 allocation score on kiff-02: -INFINITY -+native_color: clvmd:0 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:0 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:0 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:0 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:1 allocation score on kiff-01: -INFINITY -+native_color: clvmd:1 allocation score on kiff-02: 1 -+native_color: clvmd:1 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:1 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:1 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:1 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:2 allocation score on kiff-01: -INFINITY -+native_color: clvmd:2 allocation score on kiff-02: -INFINITY -+native_color: clvmd:2 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:2 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:2 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:2 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:3 allocation score on kiff-01: -INFINITY -+native_color: clvmd:3 allocation score on kiff-02: -INFINITY -+native_color: clvmd:3 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:3 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:3 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:3 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:4 allocation score on kiff-01: -INFINITY -+native_color: clvmd:4 allocation score on kiff-02: -INFINITY -+native_color: clvmd:4 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:4 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:4 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:4 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: clvmd:5 allocation score on kiff-01: -INFINITY -+native_color: clvmd:5 allocation score on kiff-02: -INFINITY -+native_color: clvmd:5 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: clvmd:5 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: clvmd:5 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: clvmd:5 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:0 allocation score on kiff-01: -INFINITY -+native_color: dlm:0 allocation score on kiff-02: -INFINITY -+native_color: dlm:0 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:0 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:0 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:0 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:1 allocation score on kiff-01: -INFINITY -+native_color: dlm:1 allocation score on kiff-02: 1 -+native_color: dlm:1 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:1 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:1 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:1 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:2 allocation score on kiff-01: -INFINITY -+native_color: dlm:2 allocation score on kiff-02: -INFINITY -+native_color: dlm:2 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:2 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:2 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:2 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:3 allocation score on kiff-01: -INFINITY -+native_color: dlm:3 allocation score on kiff-02: -INFINITY -+native_color: dlm:3 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:3 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:3 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:3 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:4 allocation score on kiff-01: -INFINITY -+native_color: dlm:4 allocation score on kiff-02: -INFINITY -+native_color: dlm:4 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:4 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:4 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:4 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: dlm:5 allocation score on kiff-01: -INFINITY -+native_color: dlm:5 allocation score on kiff-02: -INFINITY -+native_color: dlm:5 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: dlm:5 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: dlm:5 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: dlm:5 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: fence-kiff-01 allocation score on kiff-01: 0 -+native_color: fence-kiff-01 allocation score on kiff-02: 0 -+native_color: fence-kiff-01 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: fence-kiff-01 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: fence-kiff-01 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: fence-kiff-01 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: fence-kiff-02 allocation score on kiff-01: 0 -+native_color: fence-kiff-02 allocation score on kiff-02: 0 -+native_color: fence-kiff-02 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: fence-kiff-02 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: fence-kiff-02 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: fence-kiff-02 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: lxc-01_kiff-01 allocation score on kiff-01: -INFINITY -+native_color: lxc-01_kiff-01 allocation score on kiff-02: 0 -+native_color: lxc-01_kiff-01 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: lxc-01_kiff-01 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: lxc-01_kiff-01 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: lxc-01_kiff-01 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: lxc-01_kiff-02 allocation score on kiff-01: -INFINITY -+native_color: lxc-01_kiff-02 allocation score on kiff-02: 0 -+native_color: lxc-01_kiff-02 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: lxc-01_kiff-02 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: lxc-01_kiff-02 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: lxc-01_kiff-02 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: lxc-02_kiff-01 allocation score on kiff-01: -INFINITY -+native_color: lxc-02_kiff-01 allocation score on kiff-02: 0 -+native_color: lxc-02_kiff-01 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: lxc-02_kiff-01 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: lxc-02_kiff-01 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: lxc-02_kiff-01 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: lxc-02_kiff-02 allocation score on kiff-01: -INFINITY -+native_color: lxc-02_kiff-02 allocation score on kiff-02: 0 -+native_color: lxc-02_kiff-02 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: lxc-02_kiff-02 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: lxc-02_kiff-02 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: lxc-02_kiff-02 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:0 allocation score on kiff-01: -INFINITY -+native_color: shared0:0 allocation score on kiff-02: -INFINITY -+native_color: shared0:0 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:0 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:0 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:0 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:1 allocation score on kiff-01: -INFINITY -+native_color: shared0:1 allocation score on kiff-02: 1 -+native_color: shared0:1 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:1 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:1 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:1 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:2 allocation score on kiff-01: -INFINITY -+native_color: shared0:2 allocation score on kiff-02: -INFINITY -+native_color: shared0:2 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:2 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:2 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:2 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:3 allocation score on kiff-01: -INFINITY -+native_color: shared0:3 allocation score on kiff-02: -INFINITY -+native_color: shared0:3 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:3 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:3 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:3 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:4 allocation score on kiff-01: -INFINITY -+native_color: shared0:4 allocation score on kiff-02: -INFINITY -+native_color: shared0:4 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:4 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:4 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:4 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: shared0:5 allocation score on kiff-01: -INFINITY -+native_color: shared0:5 allocation score on kiff-02: -INFINITY -+native_color: shared0:5 allocation score on lxc-01_kiff-01: -INFINITY -+native_color: shared0:5 allocation score on lxc-01_kiff-02: -INFINITY -+native_color: shared0:5 allocation score on lxc-02_kiff-01: -INFINITY -+native_color: shared0:5 allocation score on lxc-02_kiff-02: -INFINITY -+native_color: vm-fs allocation score on kiff-01: 0 -+native_color: vm-fs allocation score on kiff-02: 0 -+native_color: vm-fs allocation score on lxc-01_kiff-01: 0 -+native_color: vm-fs allocation score on lxc-01_kiff-02: 0 -+native_color: vm-fs allocation score on lxc-02_kiff-01: 0 -+native_color: vm-fs allocation score on lxc-02_kiff-02: 0 -diff --git a/pengine/test10/whitebox-imply-stop-on-fence.summary b/pengine/test10/whitebox-imply-stop-on-fence.summary -new file mode 100644 -index 0000000..79e77de ---- /dev/null -+++ b/pengine/test10/whitebox-imply-stop-on-fence.summary -@@ -0,0 +1,88 @@ -+ -+Current cluster status: -+Node kiff-01 (1): UNCLEAN (offline) -+Online: [ kiff-02 ] -+Containers: [ lxc-01_kiff-01:R-lxc-01_kiff-01 lxc-01_kiff-02:R-lxc-01_kiff-02 lxc-02_kiff-01:R-lxc-02_kiff-01 lxc-02_kiff-02:R-lxc-02_kiff-02 ] -+ -+ fence-kiff-01 (stonith:fence_ipmilan): Started kiff-02 -+ fence-kiff-02 (stonith:fence_ipmilan): Started kiff-01 -+ Clone Set: dlm-clone [dlm] -+ Started: [ kiff-01 kiff-02 ] -+ Stopped: [ lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ Clone Set: clvmd-clone [clvmd] -+ Started: [ kiff-01 kiff-02 ] -+ Stopped: [ lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ Clone Set: shared0-clone [shared0] -+ Started: [ kiff-01 kiff-02 ] -+ Stopped: [ lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ R-lxc-01_kiff-01 (ocf::heartbeat:VirtualDomain): Started kiff-01 -+ R-lxc-02_kiff-01 (ocf::heartbeat:VirtualDomain): Started kiff-01 -+ R-lxc-01_kiff-02 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ R-lxc-02_kiff-02 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ vm-fs (ocf::heartbeat:Filesystem): Started lxc-01_kiff-01 -+ -+Transition Summary: -+ * Move fence-kiff-02 (Started kiff-01 -> kiff-02) -+ * Stop dlm:0 (kiff-01) -+ * Stop clvmd:0 (kiff-01) -+ * Stop shared0:0 (kiff-01) -+ * Move R-lxc-01_kiff-01 (Started kiff-01 -> kiff-02) -+ * Move R-lxc-02_kiff-01 (Started kiff-01 -> kiff-02) -+ * Restart vm-fs (Started lxc-01_kiff-01) -+ * Move lxc-01_kiff-01 (Started kiff-01 -> kiff-02) -+ * Move lxc-02_kiff-01 (Started kiff-01 -> kiff-02) -+ -+Executing cluster transition: -+ * Fencing kiff-01 (reboot) -+ * Pseudo action: stonith_complete -+ * Pseudo action: fence-kiff-02_stop_0 -+ * Pseudo action: vm-fs_stop_0 -+ * Pseudo action: lxc-01_kiff-01_stop_0 -+ * Pseudo action: lxc-02_kiff-01_stop_0 -+ * Resource action: fence-kiff-02 start on kiff-02 -+ * Pseudo action: R-lxc-01_kiff-01_stop_0 -+ * Pseudo action: R-lxc-02_kiff-01_stop_0 -+ * Resource action: fence-kiff-02 monitor=60000 on kiff-02 -+ * Pseudo action: shared0-clone_stop_0 -+ * Resource action: R-lxc-01_kiff-01 start on kiff-02 -+ * Resource action: R-lxc-02_kiff-01 start on kiff-02 -+ * Resource action: lxc-01_kiff-01 start on kiff-02 -+ * Resource action: lxc-02_kiff-01 start on kiff-02 -+ * Pseudo action: shared0_stop_0 -+ * Pseudo action: shared0-clone_stopped_0 -+ * Resource action: R-lxc-01_kiff-01 monitor=10000 on kiff-02 -+ * Resource action: R-lxc-02_kiff-01 monitor=10000 on kiff-02 -+ * Resource action: vm-fs start on lxc-01_kiff-01 -+ * Resource action: vm-fs monitor=20000 on lxc-01_kiff-01 -+ * Resource action: lxc-01_kiff-01 monitor=30000 on kiff-02 -+ * Resource action: lxc-02_kiff-01 monitor=30000 on kiff-02 -+ * Pseudo action: clvmd-clone_stop_0 -+ * Pseudo action: clvmd_stop_0 -+ * Pseudo action: clvmd-clone_stopped_0 -+ * Pseudo action: dlm-clone_stop_0 -+ * Pseudo action: dlm_stop_0 -+ * Pseudo action: dlm-clone_stopped_0 -+ * Pseudo action: all_stopped -+ -+Revised cluster status: -+Online: [ kiff-02 ] -+OFFLINE: [ kiff-01 ] -+Containers: [ lxc-01_kiff-01:R-lxc-01_kiff-01 lxc-01_kiff-02:R-lxc-01_kiff-02 lxc-02_kiff-01:R-lxc-02_kiff-01 lxc-02_kiff-02:R-lxc-02_kiff-02 ] -+ -+ fence-kiff-01 (stonith:fence_ipmilan): Started kiff-02 -+ fence-kiff-02 (stonith:fence_ipmilan): Started kiff-02 -+ Clone Set: dlm-clone [dlm] -+ Started: [ kiff-02 ] -+ Stopped: [ kiff-01 lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ Clone Set: clvmd-clone [clvmd] -+ Started: [ kiff-02 ] -+ Stopped: [ kiff-01 lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ Clone Set: shared0-clone [shared0] -+ Started: [ kiff-02 ] -+ Stopped: [ kiff-01 lxc-01_kiff-01 lxc-01_kiff-02 lxc-02_kiff-01 lxc-02_kiff-02 ] -+ R-lxc-01_kiff-01 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ R-lxc-02_kiff-01 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ R-lxc-01_kiff-02 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ R-lxc-02_kiff-02 (ocf::heartbeat:VirtualDomain): Started kiff-02 -+ vm-fs (ocf::heartbeat:Filesystem): Started lxc-01_kiff-01 -+ -diff --git a/pengine/test10/whitebox-imply-stop-on-fence.xml b/pengine/test10/whitebox-imply-stop-on-fence.xml -new file mode 100644 -index 0000000..609b281 ---- /dev/null -+++ b/pengine/test10/whitebox-imply-stop-on-fence.xml -@@ -0,0 +1,347 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ diff --git a/SOURCES/bz1162727-pcmk-membership-cleanup.patch b/SOURCES/bz1162727-pcmk-membership-cleanup.patch deleted file mode 100644 index 910b2d7..0000000 --- a/SOURCES/bz1162727-pcmk-membership-cleanup.patch +++ /dev/null @@ -1,897 +0,0 @@ -diff --git a/attrd/commands.c b/attrd/commands.c -index 12771ee..c5badc5 100644 ---- a/attrd/commands.c -+++ b/attrd/commands.c -@@ -377,7 +377,17 @@ attrd_peer_message(crm_node_t *peer, xmlNode *xml) - attrd_peer_sync(peer, xml); - - } else if(safe_str_eq(op, "peer-remove")) { -- attrd_peer_remove(0, host, TRUE, peer->uname); -+ int host_id = 0; -+ char *endptr = NULL; -+ -+ host_id = strtol(host, &endptr, 10); -+ if (errno != 0 || endptr == host || *endptr != '\0') { -+ host_id = 0; -+ } else { -+ host = NULL; -+ } -+ attrd_peer_remove(host_id, host, TRUE, peer->uname); -+ - - } else if(safe_str_eq(op, "sync-response") - && safe_str_neq(peer->uname, attrd_cluster->uname)) { -diff --git a/attrd/legacy.c b/attrd/legacy.c -index d4733ec..d7ed53e 100644 ---- a/attrd/legacy.c -+++ b/attrd/legacy.c -@@ -768,6 +768,9 @@ attrd_local_callback(xmlNode * msg) - crm_notice("Sending full refresh (origin=%s)", from); - g_hash_table_foreach(attr_hash, update_for_hash_entry, NULL); - return; -+ } else if(safe_str_eq(op, "peer-remove")) { -+ /* The legacy code didn't understand this command - swallow silently */ -+ return; - } - - if (host != NULL && safe_str_neq(host, attrd_uname)) { -diff --git a/cib/main.c b/cib/main.c -index 00fca9b..69a957c 100644 ---- a/cib/main.c -+++ b/cib/main.c -@@ -439,6 +439,11 @@ cib_peer_update_callback(enum crm_status_type type, crm_node_t * node, const voi - crm_info("No more peers"); - terminate_cib(__FUNCTION__, FALSE); - } -+ -+ if(type == crm_status_nstate && node->id && safe_str_eq(node->state, CRM_NODE_LOST)) { -+ /* Avoid conflicts, keep the membership list to active members */ -+ reap_crm_member(node->id, NULL); -+ } - } - - #if SUPPORT_HEARTBEAT -diff --git a/crmd/messages.c b/crmd/messages.c -index d38f2a3..eea4f7b 100644 ---- a/crmd/messages.c -+++ b/crmd/messages.c -@@ -39,6 +39,7 @@ - GListPtr fsa_message_queue = NULL; - extern void crm_shutdown(int nsig); - -+extern crm_ipc_t *attrd_ipc; - void handle_response(xmlNode * stored_msg); - enum crmd_fsa_input handle_request(xmlNode * stored_msg, enum crmd_fsa_cause cause); - enum crmd_fsa_input handle_shutdown_request(xmlNode * stored_msg); -diff --git a/doc/Clusters_from_Scratch/en-US/Ap-Configuration.txt b/doc/Clusters_from_Scratch/en-US/Ap-Configuration.txt -index 0cbfeec..5852e7e 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ap-Configuration.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ap-Configuration.txt -@@ -19,7 +19,7 @@ ifdef::pcs[] - Started: [ pcmk-1 pcmk-2 ] - Clone Set: WebSite-clone [WebSite] - Started: [ pcmk-1 pcmk-2 ] --# pcs resource defaults -+# pcs resource rsc defaults - resource-stickiness: 100 - # pcs resource op defaults - timeout: 240s -@@ -303,7 +303,7 @@ ifdef::pcs[] - * resource-stickiness - Specify the aversion to moving resources to other machines - [source,C] - ---- --# pcs resource defaults -+# pcs resource rsc defaults - resource-stickiness: 100 - ---- - endif::[] -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Active-Active.txt b/doc/Clusters_from_Scratch/en-US/Ch-Active-Active.txt -index 5943c19..714a0d3 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Active-Active.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Active-Active.txt -@@ -222,7 +222,7 @@ ifdef::pcs[] - WebFS (ocf::heartbeat:Filesystem) Stopped - Clone Set: dlm-clone [dlm] - Stopped: [ dlm:0 dlm:1 ] --# pcs cluster cib-push dlm_cfg -+# pcs cluster push cib dlm_cfg - CIB updated - # pcs status - -@@ -695,7 +695,7 @@ shell and watching the cluster's response - ifdef::pcs[] - [source,C] - ----- --# pcs cluster cib-push active_cfg -+# pcs cluster push cib active_cfg - # pcs resource enable WebFS - ----- - -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Active-Passive.txt b/doc/Clusters_from_Scratch/en-US/Ch-Active-Passive.txt -index c91647b..7da8fca 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Active-Passive.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Active-Passive.txt -@@ -656,8 +656,8 @@ resource, but it is often sufficient to change the default. - ifdef::pcs[] - [source,C] - ---- --# pcs resource defaults resource-stickiness=100 --# pcs resource defaults -+# pcs resource rsc defaults resource-stickiness=100 -+# pcs resource rsc defaults - resource-stickiness: 100 - ---- - endif::[] -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Apache.txt b/doc/Clusters_from_Scratch/en-US/Ch-Apache.txt -index 71777db..236bb77 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Apache.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Apache.txt -@@ -125,7 +125,7 @@ it fails, the resource agent used by Pacemaker assumes the server-status - URL is available. Look for the following in '/etc/httpd/conf/httpd.conf' - and make sure it is not disabled or commented out: - --[source,Apache Configuration] -+[source,C] - ----- - - SetHandler server-status -@@ -601,7 +601,7 @@ WebSite will be forced to move to pcmk-1. - [source,C] - ----- - # pcs constraint location WebSite prefers pcmk-1=INFINITY --# pcs constraint --full -+# pcs constraint all - Location Constraints: - Resource: WebSite - Enabled on: pcmk-1 (score:INFINITY) (id:location-WebSite-pcmk-1-INFINITY) -@@ -708,7 +708,7 @@ Ordering Constraints: - start ClusterIP then start WebSite (Mandatory) (id:order-ClusterIP-WebSite-mandatory) - Colocation Constraints: - WebSite with ClusterIP (INFINITY) (id:colocation-WebSite-ClusterIP-INFINITY) --# pcs constraint remove location-WebSite-pcmk-1-INFINITY -+# pcs constraint rm location-WebSite-pcmk-1-INFINITY - # pcs constraint - Location Constraints: - Ordering Constraints: -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Installation.txt b/doc/Clusters_from_Scratch/en-US/Ch-Installation.txt -index cf47602..aa0b4b9 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Installation.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Installation.txt -@@ -210,11 +210,23 @@ outside world. - ---- - # setenforce 0 - # sed -i.bak "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config -+# systemctl disable firewalld.service -+# systemctl stop firewalld.service -+---- -+ -+or (on older Fedora) -+ -+[source,C] -+---- -+# setenforce 0 -+# sed -i.bak "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config - # systemctl disable iptables.service - # rm '/etc/systemd/system/basic.target.wants/iptables.service' - # systemctl stop iptables.service - ---- - -+ -+ - === Short Node Names === - - During installation, we filled in the machine's fully qualified domain -@@ -538,7 +550,7 @@ Password: - pcmk-1: Authorized - pcmk-2: Authorized - --# pcs cluster setup --name mycluster pcmk-1 pcmk-2 -+# pcs cluster setup mycluster pcmk-1 pcmk-2 - pcmk-1: Succeeded - pcmk-2: Succeeded - ---- -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Shared-Storage.txt b/doc/Clusters_from_Scratch/en-US/Ch-Shared-Storage.txt -index cc2cec6..f6b50d9 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Shared-Storage.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Shared-Storage.txt -@@ -334,7 +334,7 @@ cib. - - [source,C] - ---- --# pcs cluster cib-push drbd_cfg -+# pcs cluster push cib drbd_cfg - CIB updated - - # pcs status -@@ -594,7 +594,7 @@ cluster put it into effect. - ifdef::pcs[] - [source,C] - ---- --# pcs cluster cib-push fs_cfg -+# pcs cluster push cib fs_cfg - CIB updated - # pcs status - Last updated: Fri Aug 10 12:47:01 2012 -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Stonith.txt b/doc/Clusters_from_Scratch/en-US/Ch-Stonith.txt -index 9518fc2..123bd4b 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Stonith.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Stonith.txt -@@ -81,7 +81,7 @@ ifdef::crmsh[] - endif::[] - - ifdef::pcs[] --. Commit the new configuration. +pcs cluster cib-push stonith_cfg+ -+. Commit the new configuration. +pcs cluster push cib stonith_cfg+ - endif::[] - - . Once the stonith resource is running, you can test it by executing: -@@ -261,7 +261,7 @@ Now push the configuration into the cluster. - ifdef::pcs[] - [source,C] - ---- --# pcs cluster cib-push stonith_cfg -+# pcs cluster push cib stonith_cfg - ---- - endif::[] - -diff --git a/doc/Clusters_from_Scratch/en-US/Ch-Verification.txt b/doc/Clusters_from_Scratch/en-US/Ch-Verification.txt -index 530e37b..c62cae4 100644 ---- a/doc/Clusters_from_Scratch/en-US/Ch-Verification.txt -+++ b/doc/Clusters_from_Scratch/en-US/Ch-Verification.txt -@@ -217,6 +217,13 @@ Next, check for any ERRORs during startup - there shouldn't be any. - # grep -i error /var/log/messages - ---- - -+or (on Fedora 20) -+ -+[source,C] -+---- -+# journalctl | grep -i error -+---- -+ - Repeat these checks on the other node. The results should be the same. - - endif::[] -diff --git a/doc/Clusters_from_Scratch/zh-CN/Ch-Active-Passive.po b/doc/Clusters_from_Scratch/zh-CN/Ch-Active-Passive.po -index f9cc723..daefc41 100644 ---- a/doc/Clusters_from_Scratch/zh-CN/Ch-Active-Passive.po -+++ b/doc/Clusters_from_Scratch/zh-CN/Ch-Active-Passive.po -@@ -379,7 +379,7 @@ msgstr "当有半数以上的节点在线时,这个集群就认为自己拥有 - #. Tag: literallayout - #, no-c-format - msgid "total_nodes < 2 * active_nodes" --msgstr "总节点数 < 2 * 活跃节点数" -+msgstr "" - - #. Tag: para - #, no-c-format -diff --git a/doc/Pacemaker_Explained/en-US/Ch-Constraints.txt b/doc/Pacemaker_Explained/en-US/Ch-Constraints.txt -index 8498ce0..b4eaf49 100644 ---- a/doc/Pacemaker_Explained/en-US/Ch-Constraints.txt -+++ b/doc/Pacemaker_Explained/en-US/Ch-Constraints.txt -@@ -36,28 +36,33 @@ nothing able to run anywhere and selectively enable allowed nodes. - === Options === - - .Options for Simple Location Constraints --[width="95%",cols="2m,5<",options="header",align="center"] -+[width="95%",cols="2m,1,5<",options="header",align="center"] - |========================================================= - - |Field -+|Default - |Description - - |id -+| - |A unique name for the constraint - indexterm:[id,Location Constraints] - indexterm:[Constraints,Location,id] - - |rsc -+| - |A resource name - indexterm:[rsc,Location Constraints] - indexterm:[Constraints,Location,rsc] - - |node -+| - |A node's name - indexterm:[node,Location Constraints] - indexterm:[Constraints,Location,node] - - |score -+| - |Positive values indicate the resource should run on this - node. Negative values indicate the resource should not run on this - node. -@@ -67,6 +72,30 @@ indexterm:[Constraints,Location,node] - indexterm:[score,Location Constraints] - indexterm:[Constraints,Location,score] - -+|resource-discovery -+|+always+ -+|Indicates whether or not Pacemaker should perform resource discovery -+on this node for the specified resource. Limiting resource discovery to -+a subset of nodes the resource is physically capable of running on -+can significantly boost performance when a large set of nodes are preset. -+When pacemaker_remote is in use to expand the node count into the 100s of -+nodes range, this option should be considered. -+ -+* 'always' - Always perform resource discovery for the specified resource on this node. -+ -+* 'never' - Never perform resource discovery for the specified resource on this node. -+ This option should generally be used with a -INFINITY score. Although that is not strictly -+ required. -+ -+* 'exclusive' - Only perform resource discovery for the specified resource on this node. Multiple -+ location constraints using 'exclusive' discovery for the same resource across different nodes -+ creates a subset of nodes resource-discovery is exclusive to. If a resource is marked -+ for 'exclusive' discovery on one or more nodes, that resource is only allowed to be placed -+ within that subset of nodes. -+ -+indexterm:[Resource Discovery,Location Constraints] -+indexterm:[Constraints,Location,Resource Discovery] -+ - |========================================================= - - === Asymmetrical "Opt-In" Clusters === -diff --git a/fencing/commands.c b/fencing/commands.c -index 577ea95..c193a9d 100644 ---- a/fencing/commands.c -+++ b/fencing/commands.c -@@ -2109,6 +2109,14 @@ handle_request(crm_client_t * client, uint32_t id, uint32_t flags, xmlNode * req - free_async_command(cmd); - free_xml(reply); - -+ } else if(safe_str_eq(op, CRM_OP_RM_NODE_CACHE)) { -+ int id = 0; -+ const char *name = NULL; -+ -+ crm_element_value_int(request, XML_ATTR_ID, &id); -+ name = crm_element_value(request, XML_ATTR_UNAME); -+ reap_crm_member(id, name); -+ - } else { - crm_err("Unknown %s from %s", op, client ? client->name : remote_peer); - crm_log_xml_warn(request, "UnknownOp"); -diff --git a/fencing/main.c b/fencing/main.c -index 2694452..70b5bde 100644 ---- a/fencing/main.c -+++ b/fencing/main.c -@@ -97,6 +97,7 @@ st_ipc_dispatch(qb_ipcs_connection_t * qbc, void *data, size_t size) - int call_options = 0; - xmlNode *request = NULL; - crm_client_t *c = crm_client_get(qbc); -+ const char *op = NULL; - - if (c == NULL) { - crm_info("Invalid client: %p", qbc); -@@ -109,6 +110,20 @@ st_ipc_dispatch(qb_ipcs_connection_t * qbc, void *data, size_t size) - return 0; - } - -+ -+ op = crm_element_value(request, F_CRM_TASK); -+ if(safe_str_eq(op, CRM_OP_RM_NODE_CACHE)) { -+ crm_xml_add(request, F_TYPE, T_STONITH_NG); -+ crm_xml_add(request, F_STONITH_OPERATION, op); -+ crm_xml_add(request, F_STONITH_CLIENTID, c->id); -+ crm_xml_add(request, F_STONITH_CLIENTNAME, crm_client_name(c)); -+ crm_xml_add(request, F_STONITH_CLIENTNODE, stonith_our_uname); -+ -+ send_cluster_message(NULL, crm_msg_stonith_ng, request, FALSE); -+ free_xml(request); -+ return 0; -+ } -+ - if (c->name == NULL) { - const char *value = crm_element_value(request, F_STONITH_CLIENTNAME); - -@@ -1099,6 +1114,7 @@ stonith_cleanup(void) - static struct crm_option long_options[] = { - {"stand-alone", 0, 0, 's'}, - {"stand-alone-w-cpg", 0, 0, 'c'}, -+ {"logfile", 1, 0, 'l'}, - {"verbose", 0, 0, 'V'}, - {"version", 0, 0, '$'}, - {"help", 0, 0, '?'}, -@@ -1200,6 +1216,9 @@ main(int argc, char **argv) - case 'V': - crm_bump_log_level(argc, argv); - break; -+ case 'l': -+ crm_add_logfile(optarg); -+ break; - case 's': - stand_alone = TRUE; - break; -diff --git a/fencing/regression.py.in b/fencing/regression.py.in -index c4cb2d8..fe6d418 100644 ---- a/fencing/regression.py.in -+++ b/fencing/regression.py.in -@@ -82,24 +82,34 @@ class Test: - test.wait() - - if self.verbose: -+ self.stonith_options = self.stonith_options + " -V" - print "Starting stonithd with %s" % self.stonith_options - -+ if os.path.exists("/tmp/stonith-regression.log"): -+ os.remove('/tmp/stonith-regression.log') -+ - self.stonith_process = subprocess.Popen( -- shlex.split("@CRM_DAEMON_DIR@/stonithd %s -V" % self.stonith_options), -- stdout=subprocess.PIPE, -- stderr=subprocess.PIPE) -+ shlex.split("@CRM_DAEMON_DIR@/stonithd %s -l /tmp/stonith-regression.log" % self.stonith_options)) - - time.sleep(1) - - def clean_environment(self): - if self.stonith_process: - self.stonith_process.terminate() -+ self.stonith_process.wait() - -- self.stonith_output = self.stonith_process.communicate()[1] -+ self.stonith_output = "" - self.stonith_process = None - -+ f = open('/tmp/stonith-regression.log', 'r') -+ for line in f.readlines(): -+ self.stonith_output = self.stonith_output + line -+ - if self.verbose: -+ print "Daemon Output Start" - print self.stonith_output -+ print "Daemon Output End" -+ os.remove('/tmp/stonith-regression.log') - - def add_stonith_log_pattern(self, pattern): - self.stonith_patterns.append(pattern) -@@ -953,7 +963,7 @@ if __name__ == "__main__": - self.stop_corosync() - - if self.verbose and os.path.exists('/var/log/corosync.log'): -- print "Daemon output" -+ print "Corosync output" - f = open('/var/log/corosync.log', 'r') - for line in f.readlines(): - print line.strip() -diff --git a/lib/cib/cib_remote.c b/lib/cib/cib_remote.c -index d9dde9b..9b98892 100644 ---- a/lib/cib/cib_remote.c -+++ b/lib/cib/cib_remote.c -@@ -226,6 +226,8 @@ cib_tls_signon(cib_t * cib, crm_remote_t * connection, gboolean event_channel) - return -ENOTCONN; - } - -+ connection->tcp_socket = sock; -+ - if (private->encrypted) { - /* initialize GnuTls lib */ - #ifdef HAVE_GNUTLS_GNUTLS_H -@@ -250,8 +252,6 @@ cib_tls_signon(cib_t * cib, crm_remote_t * connection, gboolean event_channel) - #else - return -EPROTONOSUPPORT; - #endif -- } else { -- connection->tcp_socket = sock; - } - - /* login to server */ -diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c -index 24700e5..70a0321 100644 ---- a/lib/cluster/membership.c -+++ b/lib/cluster/membership.c -@@ -389,9 +389,15 @@ crm_find_peer(unsigned int id, const char *uname) - } - - } else if(uname && by_id->uname) { -- crm_dump_peer_hash(LOG_INFO, __FUNCTION__); -- crm_warn("Node '%s' and '%s' share the same cluster nodeid: %u %s", by_id->uname, by_name->uname, id, uname); -- crm_abort(__FILE__, __FUNCTION__, __LINE__, "member weirdness", TRUE, TRUE); -+ if(safe_str_eq(uname, by_id->uname)) { -+ crm_notice("Node '%s' has changed its ID from %u to %u", by_id->uname, by_name->id, by_id->id); -+ g_hash_table_foreach_remove(crm_peer_cache, crm_hash_find_by_data, by_name); -+ -+ } else { -+ crm_warn("Node '%s' and '%s' share the same cluster nodeid: %u %s", by_id->uname, by_name->uname, id, uname); -+ crm_dump_peer_hash(LOG_INFO, __FUNCTION__); -+ crm_abort(__FILE__, __FUNCTION__, __LINE__, "member weirdness", TRUE, TRUE); -+ } - - } else if(id && by_name->id) { - crm_warn("Node %u and %u share the same name: '%s'", by_id->id, by_name->id, uname); -diff --git a/lib/common/remote.c b/lib/common/remote.c -index e2492b9..f11ebcd 100644 ---- a/lib/common/remote.c -+++ b/lib/common/remote.c -@@ -308,13 +308,16 @@ crm_remote_sendv(crm_remote_t * remote, struct iovec * iov, int iovs) - int rc = -ESOCKTNOSUPPORT; - - for(; lpc < iovs; lpc++) { -- if (remote->tcp_socket) { -- rc = crm_send_plaintext(remote->tcp_socket, iov[lpc].iov_base, iov[lpc].iov_len); --#ifdef HAVE_GNUTLS_GNUTLS_H - -- } else if (remote->tls_session) { -+#ifdef HAVE_GNUTLS_GNUTLS_H -+ if (remote->tls_session) { - rc = crm_send_tls(remote->tls_session, iov[lpc].iov_base, iov[lpc].iov_len); -+ } else if (remote->tcp_socket) { -+#else -+ if (remote->tcp_socket) { - #endif -+ rc = crm_send_plaintext(remote->tcp_socket, iov[lpc].iov_base, iov[lpc].iov_len); -+ - } else { - crm_err("Unsupported connection type"); - } -@@ -448,14 +451,16 @@ crm_remote_ready(crm_remote_t * remote, int timeout /* ms */ ) - int rc = 0; - time_t start; - -- if (remote->tcp_socket) { -- sock = remote->tcp_socket; - #ifdef HAVE_GNUTLS_GNUTLS_H -- } else if (remote->tls_session) { -+ if (remote->tls_session) { - void *sock_ptr = gnutls_transport_get_ptr(*remote->tls_session); - - sock = GPOINTER_TO_INT(sock_ptr); -+ } else if (remote->tcp_socket) { -+#else -+ if (remote->tcp_socket) { - #endif -+ sock = remote->tcp_socket; - } else { - crm_err("Unsupported connection type"); - } -@@ -519,17 +524,8 @@ crm_remote_recv_once(crm_remote_t * remote) - CRM_ASSERT(remote->buffer != NULL); - } - -- if (remote->tcp_socket) { -- errno = 0; -- rc = read(remote->tcp_socket, -- remote->buffer + remote->buffer_offset, -- remote->buffer_size - remote->buffer_offset); -- if(rc < 0) { -- rc = -errno; -- } -- - #ifdef HAVE_GNUTLS_GNUTLS_H -- } else if (remote->tls_session) { -+ if (remote->tls_session) { - rc = gnutls_record_recv(*(remote->tls_session), - remote->buffer + remote->buffer_offset, - remote->buffer_size - remote->buffer_offset); -@@ -541,7 +537,18 @@ crm_remote_recv_once(crm_remote_t * remote) - crm_debug("TLS receive failed: %s (%d)", gnutls_strerror(rc), rc); - rc = -pcmk_err_generic; - } -+ } else if (remote->tcp_socket) { -+#else -+ if (remote->tcp_socket) { - #endif -+ errno = 0; -+ rc = read(remote->tcp_socket, -+ remote->buffer + remote->buffer_offset, -+ remote->buffer_size - remote->buffer_offset); -+ if(rc < 0) { -+ rc = -errno; -+ } -+ - } else { - crm_err("Unsupported connection type"); - return -ESOCKTNOSUPPORT; -diff --git a/lib/common/xml.c b/lib/common/xml.c -index 58d0a00..e63a582 100644 ---- a/lib/common/xml.c -+++ b/lib/common/xml.c -@@ -1281,7 +1281,10 @@ __xml_build_changes(xmlNode * xml, xmlNode *patchset) - for (pIter = crm_first_attr(xml); pIter != NULL; pIter = pIter->next) { - const char *value = crm_element_value(xml, (const char *)pIter->name); - -- crm_xml_add(result, (const char *)pIter->name, value); -+ p = pIter->_private; -+ if (is_not_set(p->flags, xpf_deleted)) { -+ crm_xml_add(result, (const char *)pIter->name, value); -+ } - } - } - -@@ -5715,7 +5718,7 @@ update_validation(xmlNode ** xml_blob, int *best, int max, gboolean transform, g - } - - } else { -- crm_notice("Upgrading %s-style configuration to %s with %s", -+ crm_debug("Upgrading %s-style configuration to %s with %s", - known_schemas[lpc].name, known_schemas[next].name, - known_schemas[lpc].transform ? known_schemas[lpc].transform : "no-op"); - -@@ -5746,7 +5749,7 @@ update_validation(xmlNode ** xml_blob, int *best, int max, gboolean transform, g - } - - if (*best > match) { -- crm_notice("%s the configuration from %s to %s", -+ crm_info("%s the configuration from %s to %s", - transform?"Transformed":"Upgraded", - value ? value : "", known_schemas[*best].name); - crm_xml_add(xml, XML_ATTR_VALIDATION, known_schemas[*best].name); -diff --git a/lib/services/services.c b/lib/services/services.c -index 582fbe1..c7b6c89 100644 ---- a/lib/services/services.c -+++ b/lib/services/services.c -@@ -305,6 +305,7 @@ services_action_create_generic(const char *exec, const char *args[]) - void - services_action_cleanup(svc_action_t * op) - { -+#if SUPPORT_DBUS - if(op->opaque->timerid != 0) { - crm_trace("Removing timer for call %s to %s", op->action, op->rsc); - g_source_remove(op->opaque->timerid); -@@ -330,6 +331,7 @@ services_action_cleanup(svc_action_t * op) - mainloop_del_fd(op->opaque->stdout_gsource); - op->opaque->stdout_gsource = NULL; - } -+#endif - } - - void -diff --git a/lrmd/regression.py.in b/lrmd/regression.py.in -index 649c984..50e975e 100755 ---- a/lrmd/regression.py.in -+++ b/lrmd/regression.py.in -@@ -435,14 +435,13 @@ if __name__ == "__main__": - os.system("cp %s/extra/resources/%s @OCF_RA_DIR@/pacemaker/%s" % (build_dir, ra, ra)) - os.system("chmod a+x @OCF_RA_DIR@/pacemaker/%s" % (ra)) - -- else: -- # Assume it's installed -- print "Using @datadir@/@PACKAGE@/tests/cts/LSBDummy" -- os.system("cp @datadir@/@PACKAGE@/tests/cts/LSBDummy /etc/init.d/LSBDummy") -- -- os.system("chmod a+x /etc/init.d/LSBDummy") -- os.system("ls -al /etc/init.d/LSBDummy") -+ else: -+ # Assume it's installed -+ print "Using @datadir@/@PACKAGE@/tests/cts/LSBDummy" -+ os.system("cp @datadir@/@PACKAGE@/tests/cts/LSBDummy /etc/init.d/LSBDummy") - -+ os.system("chmod a+x /etc/init.d/LSBDummy") -+ os.system("ls -al /etc/init.d/LSBDummy") - os.system("mkdir -p @CRM_CORE_DIR@/root") - - if os.path.exists("/bin/systemctl"): -diff --git a/pengine/constraints.c b/pengine/constraints.c -index 88e382b..a2ce9c4 100644 ---- a/pengine/constraints.c -+++ b/pengine/constraints.c -@@ -52,6 +52,8 @@ enum pe_order_kind { - enum pe_ordering get_flags(const char *id, enum pe_order_kind kind, - const char *action_first, const char *action_then, gboolean invert); - enum pe_ordering get_asymmetrical_flags(enum pe_order_kind kind); -+static rsc_to_node_t *generate_location_rule(resource_t * rsc, xmlNode * rule_xml, -+ const char *discovery, pe_working_set_t * data_set); - - gboolean - unpack_constraints(xmlNode * xml_constraints, pe_working_set_t * data_set) -@@ -687,7 +689,7 @@ unpack_rsc_location(xmlNode * xml_obj, resource_t * rsc_lh, const char * role, - if (crm_str_eq((const char *)rule_xml->name, XML_TAG_RULE, TRUE)) { - empty = FALSE; - crm_trace("Unpacking %s/%s", id, ID(rule_xml)); -- generate_location_rule(rsc_lh, rule_xml, data_set); -+ generate_location_rule(rsc_lh, rule_xml, discovery, data_set); - } - } - -@@ -917,8 +919,8 @@ get_node_score(const char *rule, const char *score, gboolean raw, node_t * node) - return score_f; - } - --rsc_to_node_t * --generate_location_rule(resource_t * rsc, xmlNode * rule_xml, pe_working_set_t * data_set) -+static rsc_to_node_t * -+generate_location_rule(resource_t * rsc, xmlNode * rule_xml, const char *discovery, pe_working_set_t * data_set) - { - const char *rule_id = NULL; - const char *score = NULL; -@@ -960,7 +962,7 @@ generate_location_rule(resource_t * rsc, xmlNode * rule_xml, pe_working_set_t * - do_and = FALSE; - } - -- location_rule = rsc2node_new(rule_id, rsc, 0, NULL, NULL, data_set); -+ location_rule = rsc2node_new(rule_id, rsc, 0, discovery, NULL, data_set); - - if (location_rule == NULL) { - return NULL; -diff --git a/pengine/test10/resource-discovery.xml b/pengine/test10/resource-discovery.xml -index 8b517df..1692cdb 100644 ---- a/pengine/test10/resource-discovery.xml -+++ b/pengine/test10/resource-discovery.xml -@@ -97,7 +97,13 @@ - - - -- -+ -+ -+ -+ -+ -+ -+ - - - -diff --git a/pengine/utils.h b/pengine/utils.h -index 5142e68..270d32a 100644 ---- a/pengine/utils.h -+++ b/pengine/utils.h -@@ -39,9 +39,6 @@ extern gboolean rsc_ticket_new(const char *id, resource_t * rsc_lh, ticket_t * t - const char *state_lh, const char *loss_policy, - pe_working_set_t * data_set); - --extern rsc_to_node_t *generate_location_rule(resource_t * rsc, xmlNode * location_rule, -- pe_working_set_t * data_set); -- - extern gint sort_node_weight(gconstpointer a, gconstpointer b, gpointer data_set); - - extern gboolean can_run_resources(const node_t * node); -diff --git a/tools/crm_node.c b/tools/crm_node.c -index 98847f3..5932f98 100644 ---- a/tools/crm_node.c -+++ b/tools/crm_node.c -@@ -34,6 +34,7 @@ - #include - #include - #include -+#include - - int command = 0; - int ccm_fd = 0; -@@ -92,7 +93,7 @@ cib_remove_node(uint32_t id, const char *name) - crm_trace("Removing %s from the CIB", name); - - /* TODO: Use 'id' instead */ -- if(name == NULL) { -+ if(name == NULL && id == 0) { - return -ENOTUNIQ; - } - -@@ -101,17 +102,24 @@ cib_remove_node(uint32_t id, const char *name) - - crm_xml_add(node, XML_ATTR_UNAME, name); - crm_xml_add(node_state, XML_ATTR_UNAME, name); -+ if(id) { -+ char buffer[64]; -+ if(snprintf(buffer, 63, "%u", id) > 0) { -+ crm_xml_add(node, XML_ATTR_ID, buffer); -+ crm_xml_add(node_state, XML_ATTR_ID, buffer); -+ } -+ } - - cib = cib_new(); - cib->cmds->signon(cib, crm_system_name, cib_command); - - rc = cib->cmds->delete(cib, XML_CIB_TAG_NODES, node, cib_sync_call); - if (rc != pcmk_ok) { -- printf("Could not remove %s from " XML_CIB_TAG_NODES ": %s", name, pcmk_strerror(rc)); -+ printf("Could not remove %s/%u from " XML_CIB_TAG_NODES ": %s", name, id, pcmk_strerror(rc)); - } - rc = cib->cmds->delete(cib, XML_CIB_TAG_STATUS, node_state, cib_sync_call); - if (rc != pcmk_ok) { -- printf("Could not remove %s from " XML_CIB_TAG_STATUS ": %s", name, pcmk_strerror(rc)); -+ printf("Could not remove %s/%u from " XML_CIB_TAG_STATUS ": %s", name, id, pcmk_strerror(rc)); - } - - cib->cmds->signoff(cib); -@@ -156,6 +164,7 @@ int tools_remove_node_cache(const char *node, const char *target) - } - } - -+ - errno = 0; - n = strtol(node, &endptr, 10); - if (errno != 0 || endptr == node || *endptr != '\0') { -@@ -166,21 +175,39 @@ int tools_remove_node_cache(const char *node, const char *target) - name = get_node_name(n); - } - -- crm_trace("Removing %s aka. %s from the membership cache", name, node); -+ crm_trace("Removing %s aka. %s (%u) from the membership cache", name, node, n); - -- cmd = create_request(CRM_OP_RM_NODE_CACHE, -- NULL, NULL, target, "crm_node", admin_uuid); -+ if(safe_str_eq(target, T_ATTRD)) { -+ cmd = create_xml_node(NULL, __FUNCTION__); - -- if (n) { -- char buffer[64]; -+ crm_xml_add(cmd, F_TYPE, T_ATTRD); -+ crm_xml_add(cmd, F_ORIG, crm_system_name); - -- if(snprintf(buffer, 63, "%u", n) > 0) { -- crm_xml_add(cmd, XML_ATTR_ID, buffer); -+ crm_xml_add(cmd, F_ATTRD_TASK, "peer-remove"); -+ crm_xml_add(cmd, F_ATTRD_HOST, name); -+ -+ if (n) { -+ char buffer[64]; -+ if(snprintf(buffer, 63, "%u", n) > 0) { -+ crm_xml_add(cmd, F_ATTRD_HOST_ID, buffer); -+ } -+ } -+ -+ } else { -+ cmd = create_request(CRM_OP_RM_NODE_CACHE, -+ NULL, NULL, target, crm_system_name, admin_uuid); -+ if (n) { -+ char buffer[64]; -+ if(snprintf(buffer, 63, "%u", n) > 0) { -+ crm_xml_add(cmd, XML_ATTR_ID, buffer); -+ } - } -+ crm_xml_add(cmd, XML_ATTR_UNAME, name); - } -- crm_xml_add(cmd, XML_ATTR_UNAME, name); - - rc = crm_ipc_send(conn, cmd, 0, 0, NULL); -+ crm_debug("%s peer cache cleanup for %s (%u): %d", target, name, n, rc); -+ - if (rc > 0) { - rc = cib_remove_node(n, name); - } -@@ -189,8 +216,8 @@ int tools_remove_node_cache(const char *node, const char *target) - crm_ipc_close(conn); - crm_ipc_destroy(conn); - } -- free_xml(cmd); - free(admin_uuid); -+ free_xml(cmd); - free(name); - return rc > 0 ? 0 : rc; - } -@@ -649,6 +676,12 @@ try_corosync(int command, enum cluster_type_e stack) - - mainloop_io_t *ipc = NULL; - GMainLoop *amainloop = NULL; -+ const char *daemons[] = { -+ CRM_SYSTEM_CRMD, -+ "stonith-ng", -+ T_ATTRD, -+ CRM_SYSTEM_MCP, -+ }; - - struct ipc_client_callbacks node_callbacks = { - .dispatch = node_mcp_dispatch, -@@ -657,13 +690,11 @@ try_corosync(int command, enum cluster_type_e stack) - - switch (command) { - case 'R': -- if (tools_remove_node_cache(target_uname, CRM_SYSTEM_CRMD)) { -- crm_err("Failed to connect to "CRM_SYSTEM_CRMD" to remove node '%s'", target_uname); -- crm_exit(pcmk_err_generic); -- } -- if (tools_remove_node_cache(target_uname, CRM_SYSTEM_MCP)) { -- crm_err("Failed to connect to "CRM_SYSTEM_MCP" to remove node '%s'", target_uname); -- crm_exit(pcmk_err_generic); -+ for(rc = 0; rc < DIMOF(daemons); rc++) { -+ if (tools_remove_node_cache(target_uname, daemons[rc])) { -+ crm_err("Failed to connect to %s to remove node '%s'", daemons[rc], target_uname); -+ crm_exit(pcmk_err_generic); -+ } - } - crm_exit(pcmk_ok); - break; -@@ -834,8 +865,8 @@ main(int argc, char **argv) - force_flag = TRUE; - break; - case 'R': -- dangerous_cmd = TRUE; - command = flag; -+ dangerous_cmd = TRUE; - target_uname = optarg; - break; - case 'N': diff --git a/SOURCES/bz1165423-pcmk-coverity.patch b/SOURCES/bz1165423-pcmk-coverity.patch deleted file mode 100644 index 7207679..0000000 --- a/SOURCES/bz1165423-pcmk-coverity.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/lib/common/xml.c b/lib/common/xml.c -index 0effd47..f7779f5 100644 ---- a/lib/common/xml.c -+++ b/lib/common/xml.c -@@ -2759,7 +2759,7 @@ create_xml_node(xmlNode * parent, const char *name) - xmlNode *node = NULL; - - if (name == NULL || name[0] == 0) { -- CRM_CHECK(name != NULL || name[0] == 0, return NULL); -+ CRM_CHECK(name != NULL && name[0] == 0, return NULL); - return NULL; - } - -diff --git a/tools/crm_resource.c b/tools/crm_resource.c -index 236d43c..968683a 100644 ---- a/tools/crm_resource.c -+++ b/tools/crm_resource.c -@@ -1430,7 +1430,6 @@ update_dataset(cib_t *cib, pe_working_set_t * data_set, bool simulate) - goto cleanup; - } - -- free(pid); - rc = write_xml_file(cib_xml_copy, shadow_file, FALSE); - - if (rc < 0) { diff --git a/SOURCES/bz1165423-pcmk-long-systemd-stop.patch b/SOURCES/bz1165423-pcmk-long-systemd-stop.patch deleted file mode 100644 index 0a22ae9..0000000 --- a/SOURCES/bz1165423-pcmk-long-systemd-stop.patch +++ /dev/null @@ -1,709 +0,0 @@ -diff --git a/GNUmakefile b/GNUmakefile -index f28dea8..7a4c929 100644 ---- a/GNUmakefile -+++ b/GNUmakefile -@@ -325,7 +325,7 @@ clang: - test -e $(CLANG_analyzer) - scan-build $(CLANG_checkers:%=-enable-checker %) make - --# V3 = scandir unsetenv alphasort -+# V3 = scandir unsetenv alphasort xalloc - # V2 = setenv strerror strchrnul strndup - # http://www.gnu.org/software/gnulib/manual/html_node/Initial-import.html#Initial-import - GNU_MODS = crypto/md5 -diff --git a/crmd/lrm.c b/crmd/lrm.c -index b68f657..8315f6f 100644 ---- a/crmd/lrm.c -+++ b/crmd/lrm.c -@@ -630,7 +630,7 @@ append_restart_list(lrmd_rsc_info_t * rsc, lrmd_event_data_t * op, xmlNode * upd - crm_xml_add(restart, param, value); - } - len += strlen(param) + 2; -- list = realloc(list, len + 1); -+ list = realloc_safe(list, len + 1); - sprintf(list + start, " %s ", param); - } - -diff --git a/cts/CIB.py b/cts/CIB.py -index d26efdb..7922d8b 100644 ---- a/cts/CIB.py -+++ b/cts/CIB.py -@@ -298,7 +298,28 @@ class CIB11(ConfigBase): - # Group Resource - g = Group(self.Factory, "group-1") - g.add_child(self.NewIP()) -- g.add_child(self.NewIP()) -+ -+ if self.CM.Env["have_systemd"]: -+ dummy_service_file = """ -+[Unit] -+Description=Dummy resource that takes a while to start -+ -+[Service] -+Type=notify -+ExecStart=/usr/bin/python -c 'import time; import systemd.daemon;time.sleep(10); systemd.daemon.notify("READY=1"); time.sleep(3600)' -+ExecStop=sleep 10 -+ExecStop=/bin/kill -KILL $MAINPID -+""" -+ -+ os.system("cat <<-END >/tmp/DummySD.service\n%s\nEND" % (dummy_service_file)) -+ -+ self.CM.install_helper("DummySD.service", destdir="/usr/lib/systemd/system/", sourcedir="/tmp") -+ sysd = Resource(self.Factory, "petulant", "DummySD", "service") -+ sysd.add_op("monitor", "P10S") -+ g.add_child(sysd) -+ else: -+ g.add_child(self.NewIP()) -+ - g.add_child(self.NewIP()) - - # Group with the master -diff --git a/cts/environment.py b/cts/environment.py -index d741452..2b2a343 100644 ---- a/cts/environment.py -+++ b/cts/environment.py -@@ -283,9 +283,9 @@ class Environment: - break; - self["cts-master"] = master - -- if self.has_key("have_systemd"): -- self["have_systemd"] = not rsh(discover, "systemctl list-units") -- -+ if not self.has_key("have_systemd"): -+ self["have_systemd"] = not self.rsh(self.target, "systemctl list-units") -+ - self.detect_syslog() - self.detect_at_boot() - self.detect_ip_offset() -diff --git a/fencing/standalone_config.c b/fencing/standalone_config.c -index 01c22b6..4319c4a 100644 ---- a/fencing/standalone_config.c -+++ b/fencing/standalone_config.c -@@ -170,7 +170,7 @@ standalone_cfg_add_node(const char *node, const char *device, const char *ports) - - if (tmp) { - offset = strlen(tmp); -- tmp = realloc(tmp, len + offset + 1); -+ tmp = realloc_safe(tmp, len + offset + 1); - } else { - tmp = malloc(len); - } -diff --git a/include/crm_internal.h b/include/crm_internal.h -index 3eb88de..169d6d3 100644 ---- a/include/crm_internal.h -+++ b/include/crm_internal.h -@@ -341,4 +341,16 @@ void cib_ipc_servers_destroy(qb_ipcs_service_t *ipcs_ro, - qb_ipcs_service_t *ipcs_rw, - qb_ipcs_service_t *ipcs_shm); - -+static inline void *realloc_safe(void *ptr, size_t size) -+{ -+ void *ret = realloc(ptr, size); -+ -+ if(ret == NULL) { -+ abort(); -+ } -+ -+ return ret; -+} -+ -+ - #endif /* CRM_INTERNAL__H */ -diff --git a/lib/ais/plugin.c b/lib/ais/plugin.c -index 3d4f369..ab534fa 100644 ---- a/lib/ais/plugin.c -+++ b/lib/ais/plugin.c -@@ -1214,7 +1214,7 @@ pcmk_generate_membership_data(void) - - g_hash_table_foreach(membership_list, member_loop_fn, &data); - size = strlen(data.string); -- data.string = realloc(data.string, size + 9); /* 9 = + nul */ -+ data.string = realloc_safe(data.string, size + 9); /* 9 = + nul */ - sprintf(data.string + size, ""); - return data.string; - } -diff --git a/lib/ais/utils.c b/lib/ais/utils.c -index e56fb6d..94a2505 100644 ---- a/lib/ais/utils.c -+++ b/lib/ais/utils.c -@@ -409,7 +409,7 @@ append_member(char *data, crm_node_t * node) - if (node->version) { - size += (9 + strlen(node->version)); - } -- data = realloc(data, size); -+ data = realloc_safe(data, size); - - offset += snprintf(data + offset, size - offset, "id); - if (node->uname) { -diff --git a/lib/cluster/cpg.c b/lib/cluster/cpg.c -index 6c86e83..cda6326 100644 ---- a/lib/cluster/cpg.c -+++ b/lib/cluster/cpg.c -@@ -584,7 +584,7 @@ send_cluster_text(int class, const char *data, - msg->header.size = sizeof(AIS_Message) + msg->size; - - if (msg->size < CRM_BZ2_THRESHOLD) { -- msg = realloc(msg, msg->header.size); -+ msg = realloc_safe(msg, msg->header.size); - memcpy(msg->data, data, msg->size); - - } else { -@@ -595,14 +595,14 @@ send_cluster_text(int class, const char *data, - if (crm_compress_string(uncompressed, msg->size, 0, &compressed, &new_size)) { - - msg->header.size = sizeof(AIS_Message) + new_size; -- msg = realloc(msg, msg->header.size); -+ msg = realloc_safe(msg, msg->header.size); - memcpy(msg->data, compressed, new_size); - - msg->is_compressed = TRUE; - msg->compressed_size = new_size; - - } else { -- msg = realloc(msg, msg->header.size); -+ msg = realloc_safe(msg, msg->header.size); - memcpy(msg->data, data, msg->size); - } - -diff --git a/lib/cluster/heartbeat.c b/lib/cluster/heartbeat.c -index a801c8e..6f6a388 100644 ---- a/lib/cluster/heartbeat.c -+++ b/lib/cluster/heartbeat.c -@@ -106,7 +106,7 @@ convert_ha_field(xmlNode * parent, void *msg_v, int lpc) - - crm_trace("Trying to decompress %d bytes", (int)orig_len); - retry: -- uncompressed = realloc(uncompressed, size); -+ uncompressed = realloc_safe(uncompressed, size); - memset(uncompressed, 0, size); - used = size - 1; /* always leave room for a trailing '\0' - * BZ2_bzBuffToBuffDecompress wont say anything if -diff --git a/lib/common/logging.c b/lib/common/logging.c -index d64b77a..f211d80 100644 ---- a/lib/common/logging.c -+++ b/lib/common/logging.c -@@ -956,7 +956,7 @@ crm_log_args(int argc, char **argv) - } - - len = 2 + strlen(argv[lpc]); /* +1 space, +1 EOS */ -- arg_string = realloc(arg_string, len + existing_len); -+ arg_string = realloc_safe(arg_string, len + existing_len); - existing_len += sprintf(arg_string + existing_len, "%s ", argv[lpc]); - } - -diff --git a/lib/common/remote.c b/lib/common/remote.c -index f11ebcd..2a5b449 100644 ---- a/lib/common/remote.c -+++ b/lib/common/remote.c -@@ -520,7 +520,7 @@ crm_remote_recv_once(crm_remote_t * remote) - remote->buffer_size = 2 * read_len; - crm_trace("Expanding buffer to %u bytes", remote->buffer_size); - -- remote->buffer = realloc(remote->buffer, remote->buffer_size + 1); -+ remote->buffer = realloc_safe(remote->buffer, remote->buffer_size + 1); - CRM_ASSERT(remote->buffer != NULL); - } - -diff --git a/lib/common/utils.c b/lib/common/utils.c -index eacd8e9..d70778d 100644 ---- a/lib/common/utils.c -+++ b/lib/common/utils.c -@@ -1712,7 +1712,7 @@ crm_create_long_opts(struct crm_option *long_options) - * This dummy entry allows us to differentiate between the two in crm_get_option() - * and exit with the correct error code - */ -- long_opts = realloc(long_opts, (index + 1) * sizeof(struct option)); -+ long_opts = realloc_safe(long_opts, (index + 1) * sizeof(struct option)); - long_opts[index].name = "__dummmy__"; - long_opts[index].has_arg = 0; - long_opts[index].flag = 0; -@@ -1724,7 +1724,7 @@ crm_create_long_opts(struct crm_option *long_options) - continue; - } - -- long_opts = realloc(long_opts, (index + 1) * sizeof(struct option)); -+ long_opts = realloc_safe(long_opts, (index + 1) * sizeof(struct option)); - /*fprintf(stderr, "Creating %d %s = %c\n", index, - * long_options[lpc].name, long_options[lpc].val); */ - long_opts[index].name = long_options[lpc].name; -@@ -1735,7 +1735,7 @@ crm_create_long_opts(struct crm_option *long_options) - } - - /* Now create the list terminator */ -- long_opts = realloc(long_opts, (index + 1) * sizeof(struct option)); -+ long_opts = realloc_safe(long_opts, (index + 1) * sizeof(struct option)); - long_opts[index].name = NULL; - long_opts[index].has_arg = 0; - long_opts[index].flag = 0; -@@ -1759,7 +1759,7 @@ crm_set_options(const char *short_options, const char *app_usage, struct crm_opt - - for (lpc = 0; long_options[lpc].name != NULL; lpc++) { - if (long_options[lpc].val && long_options[lpc].val != '-' && long_options[lpc].val < UCHAR_MAX) { -- local_short_options = realloc(local_short_options, opt_string_len + 4); -+ local_short_options = realloc_safe(local_short_options, opt_string_len + 4); - local_short_options[opt_string_len++] = long_options[lpc].val; - /* getopt(3) says: Two colons mean an option takes an optional arg; */ - if (long_options[lpc].has_arg == optional_argument) { -@@ -2517,7 +2517,7 @@ add_list_element(char *list, const char *value) - } - len = last + 2; /* +1 space, +1 EOS */ - len += strlen(value); -- list = realloc(list, len); -+ list = realloc_safe(list, len); - sprintf(list + last, " %s", value); - return list; - } -diff --git a/lib/common/xml.c b/lib/common/xml.c -index e63a582..0effd47 100644 ---- a/lib/common/xml.c -+++ b/lib/common/xml.c -@@ -206,7 +206,7 @@ static inline bool TRACKING_CHANGES(xmlNode *xml) - } else if(rc >= ((max) - (offset))) { \ - char *tmp = NULL; \ - (max) = QB_MAX(CHUNK_SIZE, (max) * 2); \ -- tmp = realloc((buffer), (max) + 1); \ -+ tmp = realloc_safe((buffer), (max) + 1); \ - CRM_ASSERT(tmp); \ - (buffer) = tmp; \ - } else { \ -@@ -223,7 +223,7 @@ insert_prefix(int options, char **buffer, int *offset, int *max, int depth) - - if ((*buffer) == NULL || spaces >= ((*max) - (*offset))) { - (*max) = QB_MAX(CHUNK_SIZE, (*max) * 2); -- (*buffer) = realloc((*buffer), (*max) + 1); -+ (*buffer) = realloc_safe((*buffer), (*max) + 1); - } - memset((*buffer) + (*offset), ' ', spaces); - (*offset) += spaces; -@@ -305,7 +305,7 @@ static void __xml_schema_add( - int last = xml_schema_max; - - xml_schema_max++; -- known_schemas = realloc(known_schemas, xml_schema_max*sizeof(struct schema_s)); -+ known_schemas = realloc_safe(known_schemas, xml_schema_max*sizeof(struct schema_s)); - CRM_ASSERT(known_schemas != NULL); - memset(known_schemas+last, 0, sizeof(struct schema_s)); - known_schemas[last].type = type; -@@ -2759,6 +2759,7 @@ create_xml_node(xmlNode * parent, const char *name) - xmlNode *node = NULL; - - if (name == NULL || name[0] == 0) { -+ CRM_CHECK(name != NULL || name[0] == 0, return NULL); - return NULL; - } - -@@ -2905,7 +2906,7 @@ crm_xml_err(void *ctx, const char *msg, ...) - buf = NULL; - - } else { -- buffer = realloc(buffer, 1 + buffer_len + len); -+ buffer = realloc_safe(buffer, 1 + buffer_len + len); - memcpy(buffer + buffer_len, buf, len); - buffer_len += len; - buffer[buffer_len] = 0; -@@ -2997,7 +2998,7 @@ stdin2xml(void) - break; - } - -- xml_buffer = realloc(xml_buffer, next); -+ xml_buffer = realloc_safe(xml_buffer, next); - read_chars = fread(xml_buffer + data_length, 1, XML_BUFFER_SIZE, stdin); - data_length += read_chars; - } while (read_chars > 0); -@@ -3043,7 +3044,7 @@ decompress_file(const char *filename) - - rc = BZ_OK; - while (rc == BZ_OK) { -- buffer = realloc(buffer, XML_BUFFER_SIZE + length + 1); -+ buffer = realloc_safe(buffer, XML_BUFFER_SIZE + length + 1); - read_len = BZ2_bzRead(&rc, bz_file, buffer + length, XML_BUFFER_SIZE); - - crm_trace("Read %ld bytes from file: %d", (long)read_len, rc); -@@ -3301,7 +3302,7 @@ crm_xml_escape_shuffle(char *text, int start, int *length, const char *replace) - int offset = strlen(replace) - 1; /* We have space for 1 char already */ - - *length += offset; -- text = realloc(text, *length); -+ text = realloc_safe(text, *length); - - for (lpc = (*length) - 1; lpc > (start + offset); lpc--) { - text[lpc] = text[lpc - offset]; -@@ -5369,7 +5370,7 @@ crm_xml_init(void) - if(init) { - init = FALSE; - /* The default allocator XML_BUFFER_ALLOC_EXACT does far too many -- * realloc()s and it can take upwards of 18 seconds (yes, seconds) -+ * realloc_safe()s and it can take upwards of 18 seconds (yes, seconds) - * to dump a 28kb tree which XML_BUFFER_ALLOC_DOUBLEIT can do in - * less than 1 second. - */ -@@ -5987,7 +5988,7 @@ get_xpath_object_relative(const char *xpath, xmlNode * xml_obj, int error_level) - len += strlen(xpath); - - xpath_full = strdup(xpath_prefix); -- xpath_full = realloc(xpath_full, len + 1); -+ xpath_full = realloc_safe(xpath_full, len + 1); - strncat(xpath_full, xpath, len); - - result = get_xpath_object(xpath_full, xml_obj, error_level); -diff --git a/lib/fencing/st_client.c b/lib/fencing/st_client.c -index 06b9492..e51d673 100644 ---- a/lib/fencing/st_client.c -+++ b/lib/fencing/st_client.c -@@ -308,7 +308,7 @@ append_arg(gpointer key, gpointer value, gpointer user_data) - last = strlen(*args); - } - -- *args = realloc(*args, last + len); -+ *args = realloc_safe(*args, last + len); - crm_trace("Appending: %s=%s", (char *)key, (char *)value); - sprintf((*args) + last, "%s=%s\n", (char *)key, (char *)value); - } -@@ -627,7 +627,7 @@ read_output(int fd) - * 'more' is always less than our buffer size - */ - crm_trace("Got %d more bytes: %.200s...", more, buffer); -- output = realloc(output, len + more + 1); -+ output = realloc_safe(output, len + more + 1); - snprintf(output + len, more + 1, "%s", buffer); - len += more; - } -diff --git a/lib/services/services_linux.c b/lib/services/services_linux.c -index 8d6f450..de29706 100644 ---- a/lib/services/services_linux.c -+++ b/lib/services/services_linux.c -@@ -94,7 +94,7 @@ svc_read_output(int fd, svc_action_t * op, bool is_stderr) - if (rc > 0) { - crm_trace("Got %d characters starting with %.20s", rc, buf); - buf[rc] = 0; -- data = realloc(data, len + rc + 1); -+ data = realloc_safe(data, len + rc + 1); - len += sprintf(data + len, "%s", buf); - - } else if (errno != EINTR) { -diff --git a/lib/services/systemd.c b/lib/services/systemd.c -index a8bf1b4..c0a1721 100644 ---- a/lib/services/systemd.c -+++ b/lib/services/systemd.c -@@ -462,10 +462,11 @@ systemd_async_dispatch(DBusPendingCall *pending, void *user_data) - if(op) { - crm_trace("Got result: %p for %p for %s, %s", reply, pending, op->rsc, op->action); - op->opaque->pending = NULL; -+ systemd_exec_result(reply, op); -+ - } else { - crm_trace("Got result: %p for %p", reply, pending); - } -- systemd_exec_result(reply, op); - - if(pending) { - dbus_pending_call_unref(pending); -@@ -491,6 +492,8 @@ systemd_unit_check(const char *name, const char *state, void *userdata) - op->rc = PCMK_OCF_OK; - } else if (g_strcmp0(state, "activating") == 0) { - op->rc = PCMK_OCF_PENDING; -+ } else if (g_strcmp0(state, "deactivating") == 0) { -+ op->rc = PCMK_OCF_PENDING; - } else { - op->rc = PCMK_OCF_NOT_RUNNING; - } -diff --git a/lrmd/lrmd.c b/lrmd/lrmd.c -index d3ede18..0f5f529 100644 ---- a/lrmd/lrmd.c -+++ b/lrmd/lrmd.c -@@ -790,10 +790,30 @@ action_complete(svc_action_t * action) - cmd->real_action = cmd->action; - cmd->action = strdup("monitor"); - -+ } else if(cmd->exec_rc == PCMK_OCF_OK && safe_str_eq(cmd->action, "stop")) { -+ goagain = true; -+ cmd->real_action = cmd->action; -+ cmd->action = strdup("monitor"); -+ - } else if(cmd->real_action) { - /* Ok, so this is the follow up monitor action to check if start actually completed */ - if(cmd->lrmd_op_status == PCMK_LRM_OP_DONE && cmd->exec_rc == PCMK_OCF_PENDING) { - goagain = true; -+ -+ } else { -+ int time_sum = 0; -+ int timeout_left = 0; -+ struct timeb now = { 0, }; -+ -+ ftime(&now); -+ time_sum = time_diff_ms(&now, &cmd->t_first_run); -+ timeout_left = cmd->timeout_orig - time_sum; -+ crm_debug("%s %s is now complete (elapsed=%dms, remaining=%dms): %s (%d)", -+ cmd->rsc_id, cmd->real_action, time_sum, timeout_left, services_ocf_exitcode_str(cmd->exec_rc), cmd->exec_rc); -+ -+ if(cmd->lrmd_op_status == PCMK_LRM_OP_DONE && cmd->exec_rc == PCMK_OCF_NOT_RUNNING && safe_str_eq(cmd->real_action, "stop")) { -+ cmd->exec_rc = PCMK_OCF_OK; -+ } - } - } - } -@@ -827,13 +847,22 @@ action_complete(svc_action_t * action) - delay = timeout_left/2; - } - -+ delay = QB_MIN(2000, delay); - if (delay < timeout_left) { - cmd->start_delay = delay; - cmd->timeout = timeout_left; - -- if(cmd->exec_rc != PCMK_OCF_OK) { -- crm_info("%s %s failed (rc=%d): re-scheduling (elapsed=%dms, remaining=%dms, start_delay=%dms)", -- cmd->rsc_id, cmd->action, cmd->exec_rc, time_sum, timeout_left, delay); -+ if(cmd->exec_rc == PCMK_OCF_OK) { -+ crm_debug("%s %s may still be in progress: re-scheduling (elapsed=%dms, remaining=%dms, start_delay=%dms)", -+ cmd->rsc_id, cmd->real_action, time_sum, timeout_left, delay); -+ -+ } else if(cmd->exec_rc == PCMK_OCF_PENDING) { -+ crm_info("%s %s is still in progress: re-scheduling (elapsed=%dms, remaining=%dms, start_delay=%dms)", -+ cmd->rsc_id, cmd->action, time_sum, timeout_left, delay); -+ -+ } else { -+ crm_notice("%s %s failed '%s' (%d): re-scheduling (elapsed=%dms, remaining=%dms, start_delay=%dms)", -+ cmd->rsc_id, cmd->action, services_ocf_exitcode_str(cmd->exec_rc), cmd->exec_rc, time_sum, timeout_left, delay); - } - - cmd_reset(cmd); -diff --git a/pengine/allocate.c b/pengine/allocate.c -index 45e2212..748ca54 100644 ---- a/pengine/allocate.c -+++ b/pengine/allocate.c -@@ -1913,7 +1913,7 @@ expand_list(GListPtr list, char **rsc_list, char **node_list) - } - - crm_trace("Adding %s (%dc) at offset %d", rsc_id, len - 2, existing_len); -- *rsc_list = realloc(*rsc_list, len + existing_len); -+ *rsc_list = realloc_safe(*rsc_list, len + existing_len); - sprintf(*rsc_list + existing_len, "%s ", rsc_id); - } - -@@ -1930,7 +1930,7 @@ expand_list(GListPtr list, char **rsc_list, char **node_list) - } - - crm_trace("Adding %s (%dc) at offset %d", uname, len - 2, existing_len); -- *node_list = realloc(*node_list, len + existing_len); -+ *node_list = realloc_safe(*node_list, len + existing_len); - sprintf(*node_list + existing_len, "%s ", uname); - } - } -diff --git a/replace/scandir.c b/replace/scandir.c -index 7a8efea..0011630 100644 ---- a/replace/scandir.c -+++ b/replace/scandir.c -@@ -202,7 +202,7 @@ scandir(const char *directory_name, - if (counter + 1 == allocated) { - allocated <<= 1; - array = (struct dirent **) -- realloc((char *)array, allocated * sizeof(struct dirent *)); -+ realloc_safe((char *)array, allocated * sizeof(struct dirent *)); - if (array == NULL) { - closedir(directory); - free(array); -diff --git a/tools/crm_resource.c b/tools/crm_resource.c -index 6e510e1..236d43c 100644 ---- a/tools/crm_resource.c -+++ b/tools/crm_resource.c -@@ -1399,16 +1399,20 @@ static void display_list(GList *items, const char *tag) - static int - update_dataset(cib_t *cib, pe_working_set_t * data_set, bool simulate) - { -+ char *pid = NULL; -+ char *shadow_file = NULL; -+ cib_t *shadow_cib = NULL; - xmlNode *cib_xml_copy = NULL; - int rc = cib->cmds->query(cib, NULL, &cib_xml_copy, cib_scope_local | cib_sync_call); - - if(rc != pcmk_ok) { - fprintf(stdout, "Could not obtain the current CIB: %s (%d)\n", pcmk_strerror(rc), rc); -- return crm_exit(rc); -+ goto cleanup; - - } else if (cli_config_update(&cib_xml_copy, NULL, FALSE) == FALSE) { - fprintf(stderr, "Could not upgrade the current CIB\n"); -- return -ENOKEY; -+ rc = -ENOKEY; -+ goto cleanup; - } - - set_working_set_defaults(data_set); -@@ -1416,70 +1420,103 @@ update_dataset(cib_t *cib, pe_working_set_t * data_set, bool simulate) - data_set->now = crm_time_new(NULL); - - if(simulate) { -- char *pid = crm_itoa(getpid()); -- cib_t *shadow_cib = cib_shadow_new(pid); -- char *shadow_file = get_shadow_file(pid); -+ pid = crm_itoa(getpid()); -+ shadow_cib = cib_shadow_new(pid); -+ shadow_file = get_shadow_file(pid); - - if (shadow_cib == NULL) { - fprintf(stderr, "Could not create shadow cib: '%s'\n", pid); -- crm_exit(-ENXIO); -+ rc = -ENXIO; -+ goto cleanup; - } - -+ free(pid); - rc = write_xml_file(cib_xml_copy, shadow_file, FALSE); - - if (rc < 0) { - fprintf(stderr, "Could not populate shadow cib: %s (%d)\n", pcmk_strerror(rc), rc); -- free_xml(cib_xml_copy); -- return rc; -+ goto cleanup; - } - - rc = shadow_cib->cmds->signon(shadow_cib, crm_system_name, cib_command); - if(rc != pcmk_ok) { - fprintf(stderr, "Could not connect to shadow cib: %s (%d)\n", pcmk_strerror(rc), rc); -- free_xml(cib_xml_copy); -- return rc; -+ goto cleanup; - } - - do_calculations(data_set, cib_xml_copy, NULL); - run_simulation(data_set, shadow_cib, NULL, TRUE); - rc = update_dataset(shadow_cib, data_set, FALSE); - -- cib_delete(shadow_cib); -- /* unlink(shadow_file); */ -- free(shadow_file); -- - } else { - cluster_status(data_set); - } - -+ cleanup: -+ cib_delete(shadow_cib); -+ free_xml(cib_xml_copy); -+ free(pid); -+ -+ if(shadow_file) { -+ unlink(shadow_file); -+ free(shadow_file); -+ } -+ - return rc; - } - - static int --max_delay_in(pe_working_set_t * data_set, GList *resources) -+max_delay_for_resource(pe_working_set_t * data_set, resource_t *rsc) - { -+ int delay = 0; - int max_delay = 0; -- GList *item = NULL; - -- for (item = resources; item != NULL; item = item->next) { -- resource_t *rsc = pe_find_resource(data_set->resources, (const char *)item->data); -+ if(rsc && rsc->children) { -+ GList *iter = NULL; - -- if(rsc) { -- char *key = g_strdup_printf("%s_%s_0", rsc->id, RSC_STOP); -- action_t *stop = custom_action(rsc, key, RSC_STOP, NULL, TRUE, FALSE, data_set); -- const char *value = g_hash_table_lookup(stop->meta, XML_ATTR_TIMEOUT); -- int delay = crm_int_helper(value, NULL); -+ for(iter = rsc->children; iter; iter = iter->next) { -+ resource_t *child = (resource_t *)iter->data; - -+ delay = max_delay_for_resource(data_set, child); - if(delay > max_delay) { -- crm_trace("Calculated new delay of %s ms due to %s", value, rsc->id); -+ double seconds = delay / 1000; -+ crm_trace("Calculated new delay of %.1fs due to %s", seconds, child->id); - max_delay = delay; - } -- -- pe_free_action(stop); - } -+ -+ } else if(rsc) { -+ char *key = g_strdup_printf("%s_%s_0", rsc->id, RSC_STOP); -+ action_t *stop = custom_action(rsc, key, RSC_STOP, NULL, TRUE, FALSE, data_set); -+ const char *value = g_hash_table_lookup(stop->meta, XML_ATTR_TIMEOUT); -+ -+ max_delay = crm_int_helper(value, NULL); -+ pe_free_action(stop); - } - - -+ return max_delay; -+} -+ -+static int -+max_delay_in(pe_working_set_t * data_set, GList *resources) -+{ -+ int max_delay = 0; -+ GList *item = NULL; -+ -+ for (item = resources; item != NULL; item = item->next) { -+ int delay = 0; -+ resource_t *rsc = pe_find_resource(data_set->resources, (const char *)item->data); -+ -+ delay = max_delay_for_resource(data_set, rsc); -+ -+ if(delay > max_delay) { -+ double seconds = delay / 1000; -+ crm_trace("Calculated new delay of %.1fs due to %s", seconds, rsc->id); -+ max_delay = delay; -+ } -+ } -+ - return 5 + (max_delay / 1000); - } - -@@ -1507,7 +1544,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - return -ENXIO; - } - -- -+ attr_set_type = XML_TAG_META_SETS; - rsc_id = strdup(rsc->id); - if(rsc->variant > pe_group) { - is_clone = TRUE; -@@ -1536,6 +1573,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - rc = update_dataset(cib, &data_set, FALSE); - if(rc != pcmk_ok) { - fprintf(stdout, "Could not get new resource list: %s (%d)\n", pcmk_strerror(rc), rc); -+ free(rsc_id); - return rc; - } - -@@ -1553,6 +1591,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - } - if(rc != pcmk_ok) { - fprintf(stderr, "Could not set target-role for %s: %s (%d)\n", rsc_id, pcmk_strerror(rc), rc); -+ free(rsc_id); - return crm_exit(rc); - } - -@@ -1615,6 +1654,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - - if(rc != pcmk_ok) { - fprintf(stderr, "Could not unset target-role for %s: %s (%d)\n", rsc_id, pcmk_strerror(rc), rc); -+ free(rsc_id); - return crm_exit(rc); - } - -@@ -1659,6 +1699,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - - } while(g_list_length(list_delta) > 0); - -+ free(rsc_id); - return pcmk_ok; - - failure: -@@ -1668,6 +1709,7 @@ resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib - } else { - delete_resource_attr(rsc_id, NULL, NULL, XML_RSC_ATTR_TARGET_ROLE, cib, &data_set); - } -+ free(rsc_id); - return rc; - } - diff --git a/SOURCES/bz1176210-handle-orphaned-remote-nodes.patch b/SOURCES/bz1176210-handle-orphaned-remote-nodes.patch deleted file mode 100644 index 9331bab..0000000 --- a/SOURCES/bz1176210-handle-orphaned-remote-nodes.patch +++ /dev/null @@ -1,816 +0,0 @@ -diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c -index bdd6450..39756b1 100644 ---- a/lib/pengine/unpack.c -+++ b/lib/pengine/unpack.c -@@ -1828,7 +1828,7 @@ process_rsc_state(resource_t * rsc, node_t * node, - - should_fence = TRUE; - } else if (is_set(data_set->flags, pe_flag_stonith_enabled)) { -- if (is_baremetal_remote_node(node) && is_not_set(node->details->remote_rsc->flags, pe_rsc_failed)) { -+ if (is_baremetal_remote_node(node) && node->details->remote_rsc && is_not_set(node->details->remote_rsc->flags, pe_rsc_failed)) { - /* setting unseen = true means that fencing of the remote node will - * only occur if the connection resource is not going to start somewhere. - * This allows connection resources on a failed cluster-node to move to -diff --git a/pengine/allocate.c b/pengine/allocate.c -index 3241273..7dd70f1 100644 ---- a/pengine/allocate.c -+++ b/pengine/allocate.c -@@ -1636,6 +1636,7 @@ apply_remote_node_ordering(pe_working_set_t *data_set) - - if (action->node == NULL || - is_remote_node(action->node) == FALSE || -+ action->node->details->remote_rsc == NULL || - action->rsc == NULL || - is_set(action->flags, pe_action_pseudo)) { - continue; -diff --git a/pengine/regression.sh b/pengine/regression.sh -index 9172acb..93d4de1 100755 ---- a/pengine/regression.sh -+++ b/pengine/regression.sh -@@ -778,6 +778,7 @@ do_test remote-fence-unclean2 "Fence baremetal remote-node after cluster node f - do_test remote-move "Move remote-node connection resource" - do_test remote-disable "Disable a baremetal remote-node" - do_test remote-orphaned "Properly shutdown orphaned connection resource" -+do_test remote-orphaned2 "verify we can handle orphaned remote connections with active resources on the remote" - do_test remote-recover "Recover connection resource after cluster-node fails." - do_test remote-stale-node-entry "Make sure we properly handle leftover remote-node entries in the node section" - do_test remote-partial-migrate "Make sure partial migrations are handled before ops on the remote node." -diff --git a/pengine/test10/remote-orphaned2.dot b/pengine/test10/remote-orphaned2.dot -new file mode 100644 -index 0000000..d8f1c9f ---- /dev/null -+++ b/pengine/test10/remote-orphaned2.dot -@@ -0,0 +1,2 @@ -+ digraph "g" { -+} -diff --git a/pengine/test10/remote-orphaned2.exp b/pengine/test10/remote-orphaned2.exp -new file mode 100644 -index 0000000..56e315f ---- /dev/null -+++ b/pengine/test10/remote-orphaned2.exp -@@ -0,0 +1 @@ -+ -diff --git a/pengine/test10/remote-orphaned2.scores b/pengine/test10/remote-orphaned2.scores -new file mode 100644 -index 0000000..98853b1 ---- /dev/null -+++ b/pengine/test10/remote-orphaned2.scores -@@ -0,0 +1 @@ -+Allocation scores: -diff --git a/pengine/test10/remote-orphaned2.summary b/pengine/test10/remote-orphaned2.summary -new file mode 100644 -index 0000000..f4e5e17 ---- /dev/null -+++ b/pengine/test10/remote-orphaned2.summary -@@ -0,0 +1,27 @@ -+ -+Current cluster status: -+RemoteNode mrg-02: UNCLEAN (offline) -+RemoteNode mrg-03: UNCLEAN (offline) -+RemoteNode mrg-04: UNCLEAN (offline) -+Online: [ host-026 host-027 host-028 ] -+ -+ neutron-openvswitch-agent-compute (ocf::heartbeat:Dummy): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ libvirtd-compute (systemd:libvirtd): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ ceilometer-compute (systemd:openstack-ceilometer-compute): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ nova-compute (systemd:openstack-nova-compute): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ -+Transition Summary: -+ -+Executing cluster transition: -+ -+Revised cluster status: -+RemoteNode mrg-02: UNCLEAN (offline) -+RemoteNode mrg-03: UNCLEAN (offline) -+RemoteNode mrg-04: UNCLEAN (offline) -+Online: [ host-026 host-027 host-028 ] -+ -+ neutron-openvswitch-agent-compute (ocf::heartbeat:Dummy): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ libvirtd-compute (systemd:libvirtd): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ ceilometer-compute (systemd:openstack-ceilometer-compute): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ nova-compute (systemd:openstack-nova-compute): ORPHANED Started [ mrg-03 mrg-02 mrg-04 ] -+ -diff --git a/pengine/test10/remote-orphaned2.xml b/pengine/test10/remote-orphaned2.xml -new file mode 100644 -index 0000000..0bf6d33 ---- /dev/null -+++ b/pengine/test10/remote-orphaned2.xml -@@ -0,0 +1,718 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ diff --git a/SOURCES/bz1176210-require-all.patch b/SOURCES/bz1176210-require-all.patch deleted file mode 100644 index 21fbac5..0000000 --- a/SOURCES/bz1176210-require-all.patch +++ /dev/null @@ -1,5799 +0,0 @@ -diff --git a/include/crm/crm.h b/include/crm/crm.h -index 41279b0..37bc5ce 100644 ---- a/include/crm/crm.h -+++ b/include/crm/crm.h -@@ -133,6 +133,7 @@ extern char *crm_system_name; - # define CRM_OP_REPROBE "probe_again" - # define CRM_OP_CLEAR_FAILCOUNT "clear_failcount" - # define CRM_OP_RELAXED_SET "one-or-more" -+# define CRM_OP_RELAXED_CLONE "clone-one-or-more" - # define CRM_OP_RM_NODE_CACHE "rm_node_cache" - - # define CRMD_JOINSTATE_DOWN "down" -diff --git a/pengine/constraints.c b/pengine/constraints.c -index a2ce9c4..7054a8e 100644 ---- a/pengine/constraints.c -+++ b/pengine/constraints.c -@@ -255,6 +255,7 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set) - resource_t *rsc_then = NULL; - resource_t *rsc_first = NULL; - gboolean invert_bool = TRUE; -+ gboolean require_all = TRUE; - enum pe_order_kind kind = pe_order_kind_mandatory; - enum pe_ordering cons_weight = pe_order_optional; - -@@ -264,6 +265,7 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set) - const char *action_first = NULL; - const char *instance_then = NULL; - const char *instance_first = NULL; -+ const char *require_all_s = NULL; - - const char *id = crm_element_value(xml_obj, XML_ATTR_ID); - const char *invert = crm_element_value(xml_obj, XML_CONS_ATTR_SYMMETRICAL); -@@ -343,6 +345,14 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set) - } - } - -+ require_all_s = crm_element_value(xml_obj, "require-all"); -+ if (require_all_s -+ && crm_is_true(require_all_s) == FALSE -+ && rsc_first->variant >= pe_clone) { -+ -+ require_all = FALSE; -+ } -+ - cons_weight = pe_order_optional; - kind = get_ordering_type(xml_obj); - -@@ -356,7 +366,29 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set) - } else { - cons_weight |= get_flags(id, kind, action_first, action_then, FALSE); - } -- order_id = new_rsc_order(rsc_first, action_first, rsc_then, action_then, cons_weight, data_set); -+ -+ if (require_all == FALSE) { -+ GListPtr rIter = NULL; -+ char *task = crm_concat(CRM_OP_RELAXED_CLONE, id, ':'); -+ action_t *unordered_action = get_pseudo_op(task, data_set); -+ free(task); -+ -+ update_action_flags(unordered_action, pe_action_requires_any); -+ -+ for (rIter = rsc_first->children; id && rIter; rIter = rIter->next) { -+ resource_t *child = rIter->data; -+ -+ custom_action_order(child, generate_op_key(child->id, action_first, 0), NULL, -+ NULL, NULL, unordered_action, -+ pe_order_one_or_more | pe_order_implies_then_printed, data_set); -+ } -+ -+ order_id = custom_action_order(NULL, NULL, unordered_action, -+ rsc_then, generate_op_key(rsc_then->id, action_then, 0), NULL, -+ cons_weight | pe_order_runnable_left, data_set); -+ } else { -+ order_id = new_rsc_order(rsc_first, action_first, rsc_then, action_then, cons_weight, data_set); -+ } - - pe_rsc_trace(rsc_first, "order-%d (%s): %s_%s before %s_%s flags=0x%.6x", - order_id, id, rsc_first->id, action_first, rsc_then->id, action_then, cons_weight); -@@ -387,6 +419,7 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set) - } - - cons_weight |= get_flags(id, kind, action_first, action_then, TRUE); -+ - order_id = new_rsc_order(rsc_then, action_then, rsc_first, action_first, cons_weight, data_set); - - pe_rsc_trace(rsc_then, "order-%d (%s): %s_%s before %s_%s flags=0x%.6x", -diff --git a/pengine/regression.sh b/pengine/regression.sh -index 3a244d7..c2bc7fb 100755 ---- a/pengine/regression.sh -+++ b/pengine/regression.sh -@@ -126,6 +126,16 @@ do_test one-or-more-5 "Start A and F even though C and D are stopped" - do_test one-or-more-6 "Leave A running even though B is stopped" - do_test one-or-more-7 "Leave A running even though C is stopped" - do_test bug-5140-require-all-false "Allow basegrp:0 to stop" -+do_test clone-require-all-1 "clone B starts node 3 and 4" -+do_test clone-require-all-2 "clone B remains stopped everywhere" -+do_test clone-require-all-3 "clone B stops everywhere because A stops everywhere" -+do_test clone-require-all-4 "clone B remains on node 3 and 4 with only one instance of A remaining." -+do_test clone-require-all-5 "clone B starts on node 1 3 and 4" -+do_test clone-require-all-6 "clone B remains active after shutting down instances of A" -+do_test clone-require-all-7 "clone A and B both start at the same time. all instances of A start before B." -+do_test clone-require-all-no-interleave-1 "C starts everywhere after A and B" -+do_test clone-require-all-no-interleave-2 "C starts on nodes 1, 2, and 4 with only one active instance of B" -+do_test clone-require-all-no-interleave-3 "C remains active when instance of B is stopped on one node and started on another." - - echo "" - do_test order1 "Order start 1 " -diff --git a/pengine/test10/clone-require-all-1.dot b/pengine/test10/clone-require-all-1.dot -new file mode 100644 -index 0000000..9856969 ---- /dev/null -+++ b/pengine/test10/clone-require-all-1.dot -@@ -0,0 +1,15 @@ -+ digraph "g" { -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B:1_start_0 rhel7-auto4" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B:1_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B:1_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold] -+"B:1_start_0 rhel7-auto4" -> "B:1_monitor_10000 rhel7-auto4" [ style = bold] -+"B:1_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold] -+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+} -diff --git a/pengine/test10/clone-require-all-1.exp b/pengine/test10/clone-require-all-1.exp -new file mode 100644 -index 0000000..c2d1abd ---- /dev/null -+++ b/pengine/test10/clone-require-all-1.exp -@@ -0,0 +1,80 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-1.scores b/pengine/test10/clone-require-all-1.scores -new file mode 100644 -index 0000000..fe3ce21 ---- /dev/null -+++ b/pengine/test10/clone-require-all-1.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 1 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: 1 -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: 0 -+native_color: A:1 allocation score on rhel7-auto2: 1 -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: 0 -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-1.summary b/pengine/test10/clone-require-all-1.summary -new file mode 100644 -index 0000000..2cbb97d ---- /dev/null -+++ b/pengine/test10/clone-require-all-1.summary -@@ -0,0 +1,34 @@ -+ -+Current cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Start B:0 (rhel7-auto3) -+ * Start B:1 (rhel7-auto4) -+ -+Executing cluster transition: -+ * Pseudo action: B-clone_start_0 -+ * Resource action: B start on rhel7-auto3 -+ * Resource action: B start on rhel7-auto4 -+ * Pseudo action: B-clone_running_0 -+ * Resource action: B monitor=10000 on rhel7-auto3 -+ * Resource action: B monitor=10000 on rhel7-auto4 -+ -+Revised cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 ] -+ -diff --git a/pengine/test10/clone-require-all-1.xml b/pengine/test10/clone-require-all-1.xml -new file mode 100644 -index 0000000..724fac1 ---- /dev/null -+++ b/pengine/test10/clone-require-all-1.xml -@@ -0,0 +1,152 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-2.dot b/pengine/test10/clone-require-all-2.dot -new file mode 100644 -index 0000000..4f830ce ---- /dev/null -+++ b/pengine/test10/clone-require-all-2.dot -@@ -0,0 +1,42 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=dashed color="red" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = dashed] -+"A-clone_start_0" -> "A_start_0 " [ style = dashed] -+"A-clone_start_0" [ style=dashed color="red" fontcolor="orange"] -+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto2" [ style = bold] -+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stopped_0" -> "A-clone_start_0" [ style = dashed] -+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"A_start_0 " -> "A-clone_running_0" [ style = dashed] -+"A_start_0 " [ style=dashed color="red" fontcolor="black"] -+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto1" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"A_stop_0 rhel7-auto2" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto2" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto2" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=dashed color="red" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = dashed] -+"B-clone_start_0" -> "B:1_start_0 rhel7-auto3" [ style = dashed] -+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = dashed] -+"B-clone_start_0" [ style=dashed color="red" fontcolor="orange"] -+"B:1_monitor_10000 rhel7-auto3" [ style=dashed color="red" fontcolor="black"] -+"B:1_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = dashed] -+"B:1_start_0 rhel7-auto3" -> "B:1_monitor_10000 rhel7-auto3" [ style = dashed] -+"B:1_start_0 rhel7-auto3" [ style=dashed color="red" fontcolor="black"] -+"B_monitor_10000 rhel7-auto4" [ style=dashed color="red" fontcolor="black"] -+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = dashed] -+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = dashed] -+"B_start_0 rhel7-auto4" [ style=dashed color="red" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"shooter_monitor_60000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"shooter_start_0 rhel7-auto3" -> "shooter_monitor_60000 rhel7-auto3" [ style = bold] -+"shooter_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto3" [ style = bold] -+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+} -diff --git a/pengine/test10/clone-require-all-2.exp b/pengine/test10/clone-require-all-2.exp -new file mode 100644 -index 0000000..a5ad63f ---- /dev/null -+++ b/pengine/test10/clone-require-all-2.exp -@@ -0,0 +1,107 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-2.scores b/pengine/test10/clone-require-all-2.scores -new file mode 100644 -index 0000000..cdbf611 ---- /dev/null -+++ b/pengine/test10/clone-require-all-2.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 1 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: 0 -+native_color: B:1 allocation score on rhel7-auto4: -INFINITY -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-2.summary b/pengine/test10/clone-require-all-2.summary -new file mode 100644 -index 0000000..d4b2519 ---- /dev/null -+++ b/pengine/test10/clone-require-all-2.summary -@@ -0,0 +1,41 @@ -+ -+Current cluster status: -+Node rhel7-auto1 (1): standby -+Node rhel7-auto2 (2): standby -+Online: [ rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Move shooter (Started rhel7-auto1 -> rhel7-auto3) -+ * Stop A:0 (rhel7-auto1) -+ * Stop A:1 (rhel7-auto2) -+ * Start B:0 (rhel7-auto4 - blocked) -+ * Start B:1 (rhel7-auto3 - blocked) -+ -+Executing cluster transition: -+ * Resource action: shooter stop on rhel7-auto1 -+ * Pseudo action: A-clone_stop_0 -+ * Resource action: shooter start on rhel7-auto3 -+ * Resource action: A stop on rhel7-auto1 -+ * Resource action: A stop on rhel7-auto2 -+ * Pseudo action: A-clone_stopped_0 -+ * Pseudo action: all_stopped -+ * Resource action: shooter monitor=60000 on rhel7-auto3 -+ -+Revised cluster status: -+Node rhel7-auto1 (1): standby -+Node rhel7-auto2 (2): standby -+Online: [ rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto3 -+ Clone Set: A-clone [A] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -diff --git a/pengine/test10/clone-require-all-2.xml b/pengine/test10/clone-require-all-2.xml -new file mode 100644 -index 0000000..1fd9576 ---- /dev/null -+++ b/pengine/test10/clone-require-all-2.xml -@@ -0,0 +1,160 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-3.dot b/pengine/test10/clone-require-all-3.dot -new file mode 100644 -index 0000000..d93693d ---- /dev/null -+++ b/pengine/test10/clone-require-all-3.dot -@@ -0,0 +1,57 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=dashed color="red" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = dashed] -+"A-clone_start_0" -> "A_start_0 " [ style = dashed] -+"A-clone_start_0" [ style=dashed color="red" fontcolor="orange"] -+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto2" [ style = bold] -+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stopped_0" -> "A-clone_start_0" [ style = dashed] -+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"A_start_0 " -> "A-clone_running_0" [ style = dashed] -+"A_start_0 " [ style=dashed color="red" fontcolor="black"] -+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto1" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"A_stop_0 rhel7-auto2" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto2" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto2" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=dashed color="red" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = dashed] -+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = dashed] -+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = dashed] -+"B-clone_start_0" [ style=dashed color="red" fontcolor="orange"] -+"B-clone_stop_0" -> "B-clone_stopped_0" [ style = bold] -+"B-clone_stop_0" -> "B_stop_0 rhel7-auto3" [ style = bold] -+"B-clone_stop_0" -> "B_stop_0 rhel7-auto4" [ style = bold] -+"B-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_stopped_0" -> "A-clone_stop_0" [ style = bold] -+"B-clone_stopped_0" -> "B-clone_start_0" [ style = dashed] -+"B-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"B_monitor_10000 rhel7-auto3" [ style=dashed color="red" fontcolor="black"] -+"B_monitor_10000 rhel7-auto4" [ style=dashed color="red" fontcolor="black"] -+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = dashed] -+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = dashed] -+"B_start_0 rhel7-auto3" [ style=dashed color="red" fontcolor="black"] -+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = dashed] -+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = dashed] -+"B_start_0 rhel7-auto4" [ style=dashed color="red" fontcolor="black"] -+"B_stop_0 rhel7-auto3" -> "B-clone_stopped_0" [ style = bold] -+"B_stop_0 rhel7-auto3" -> "B_start_0 rhel7-auto3" [ style = dashed] -+"B_stop_0 rhel7-auto3" -> "all_stopped" [ style = bold] -+"B_stop_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_stop_0 rhel7-auto4" -> "B-clone_stopped_0" [ style = bold] -+"B_stop_0 rhel7-auto4" -> "B_start_0 rhel7-auto4" [ style = dashed] -+"B_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold] -+"B_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"shooter_monitor_60000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"shooter_start_0 rhel7-auto3" -> "shooter_monitor_60000 rhel7-auto3" [ style = bold] -+"shooter_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto3" [ style = bold] -+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+} -diff --git a/pengine/test10/clone-require-all-3.exp b/pengine/test10/clone-require-all-3.exp -new file mode 100644 -index 0000000..02eea7a ---- /dev/null -+++ b/pengine/test10/clone-require-all-3.exp -@@ -0,0 +1,169 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-3.scores b/pengine/test10/clone-require-all-3.scores -new file mode 100644 -index 0000000..814a972 ---- /dev/null -+++ b/pengine/test10/clone-require-all-3.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 1 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 1 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 1 -+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 1 -+native_color: B:0 allocation score on rhel7-auto4: -INFINITY -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: 0 -+native_color: B:1 allocation score on rhel7-auto4: 1 -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-3.summary b/pengine/test10/clone-require-all-3.summary -new file mode 100644 -index 0000000..68191b1 ---- /dev/null -+++ b/pengine/test10/clone-require-all-3.summary -@@ -0,0 +1,46 @@ -+ -+Current cluster status: -+Node rhel7-auto1 (1): standby -+Node rhel7-auto2 (2): standby -+Online: [ rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 ] -+ -+Transition Summary: -+ * Move shooter (Started rhel7-auto1 -> rhel7-auto3) -+ * Stop A:0 (rhel7-auto1) -+ * Stop A:1 (rhel7-auto2) -+ * Stop B:0 (Started rhel7-auto3) -+ * Stop B:1 (Started rhel7-auto4) -+ -+Executing cluster transition: -+ * Resource action: shooter stop on rhel7-auto1 -+ * Pseudo action: B-clone_stop_0 -+ * Resource action: shooter start on rhel7-auto3 -+ * Resource action: B stop on rhel7-auto3 -+ * Resource action: B stop on rhel7-auto4 -+ * Pseudo action: B-clone_stopped_0 -+ * Resource action: shooter monitor=60000 on rhel7-auto3 -+ * Pseudo action: A-clone_stop_0 -+ * Resource action: A stop on rhel7-auto1 -+ * Resource action: A stop on rhel7-auto2 -+ * Pseudo action: A-clone_stopped_0 -+ * Pseudo action: all_stopped -+ -+Revised cluster status: -+Node rhel7-auto1 (1): standby -+Node rhel7-auto2 (2): standby -+Online: [ rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto3 -+ Clone Set: A-clone [A] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -diff --git a/pengine/test10/clone-require-all-3.xml b/pengine/test10/clone-require-all-3.xml -new file mode 100644 -index 0000000..b04f0e2 ---- /dev/null -+++ b/pengine/test10/clone-require-all-3.xml -@@ -0,0 +1,160 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-4.dot b/pengine/test10/clone-require-all-4.dot -new file mode 100644 -index 0000000..4b9521f ---- /dev/null -+++ b/pengine/test10/clone-require-all-4.dot -@@ -0,0 +1,24 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 " [ style = dashed] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold] -+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold] -+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"A_start_0 " -> "A-clone_running_0" [ style = dashed] -+"A_start_0 " [ style=dashed color="red" fontcolor="black"] -+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto1" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"shooter_monitor_60000 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"shooter_start_0 rhel7-auto2" -> "shooter_monitor_60000 rhel7-auto2" [ style = bold] -+"shooter_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto2" [ style = bold] -+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+} -diff --git a/pengine/test10/clone-require-all-4.exp b/pengine/test10/clone-require-all-4.exp -new file mode 100644 -index 0000000..53c1529 ---- /dev/null -+++ b/pengine/test10/clone-require-all-4.exp -@@ -0,0 +1,112 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-4.scores b/pengine/test10/clone-require-all-4.scores -new file mode 100644 -index 0000000..c602a1d ---- /dev/null -+++ b/pengine/test10/clone-require-all-4.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 1 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 1 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 1 -+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: 1 -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 1 -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: 1 -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-4.summary b/pengine/test10/clone-require-all-4.summary -new file mode 100644 -index 0000000..49ae3bd ---- /dev/null -+++ b/pengine/test10/clone-require-all-4.summary -@@ -0,0 +1,40 @@ -+ -+Current cluster status: -+Node rhel7-auto1 (1): standby -+Online: [ rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 ] -+ -+Transition Summary: -+ * Move shooter (Started rhel7-auto1 -> rhel7-auto2) -+ * Stop A:0 (rhel7-auto1) -+ -+Executing cluster transition: -+ * Resource action: shooter stop on rhel7-auto1 -+ * Pseudo action: A-clone_stop_0 -+ * Resource action: shooter start on rhel7-auto2 -+ * Resource action: A stop on rhel7-auto1 -+ * Pseudo action: A-clone_stopped_0 -+ * Pseudo action: A-clone_start_0 -+ * Pseudo action: all_stopped -+ * Resource action: shooter monitor=60000 on rhel7-auto2 -+ * Pseudo action: A-clone_running_0 -+ -+Revised cluster status: -+Node rhel7-auto1 (1): standby -+Online: [ rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto2 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto2 ] -+ Stopped: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 ] -+ -diff --git a/pengine/test10/clone-require-all-4.xml b/pengine/test10/clone-require-all-4.xml -new file mode 100644 -index 0000000..8bfd27f ---- /dev/null -+++ b/pengine/test10/clone-require-all-4.xml -@@ -0,0 +1,156 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-5.dot b/pengine/test10/clone-require-all-5.dot -new file mode 100644 -index 0000000..ce5a593 ---- /dev/null -+++ b/pengine/test10/clone-require-all-5.dot -@@ -0,0 +1,31 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold] -+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold] -+"A_start_0 rhel7-auto3" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold] -+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B:1_start_0 rhel7-auto3" [ style = bold] -+"B-clone_start_0" -> "B:2_start_0 rhel7-auto1" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B:1_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B:1_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold] -+"B:1_start_0 rhel7-auto3" -> "B:1_monitor_10000 rhel7-auto3" [ style = bold] -+"B:1_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B:2_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"B:2_start_0 rhel7-auto1" -> "B-clone_running_0" [ style = bold] -+"B:2_start_0 rhel7-auto1" -> "B:2_monitor_10000 rhel7-auto1" [ style = bold] -+"B:2_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"B_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = bold] -+"B_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"clone-one-or-more:order-A-clone-B-clone-mandatory" -> "B-clone_start_0" [ style = bold] -+"clone-one-or-more:order-A-clone-B-clone-mandatory" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-5.exp b/pengine/test10/clone-require-all-5.exp -new file mode 100644 -index 0000000..abb4d25 ---- /dev/null -+++ b/pengine/test10/clone-require-all-5.exp -@@ -0,0 +1,174 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-5.scores b/pengine/test10/clone-require-all-5.scores -new file mode 100644 -index 0000000..cca6739 ---- /dev/null -+++ b/pengine/test10/clone-require-all-5.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: 0 -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 1 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: 0 -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: 0 -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: 0 -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: 0 -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: 0 -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: 0 -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: 0 -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: 0 -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: 0 -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: 1 -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: 0 -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: 0 -+native_color: A:1 allocation score on rhel7-auto2: 1 -+native_color: A:1 allocation score on rhel7-auto3: 0 -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: 0 -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: 0 -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: 0 -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: 0 -+native_color: B:1 allocation score on rhel7-auto4: -INFINITY -+native_color: B:2 allocation score on rhel7-auto1: 0 -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-5.summary b/pengine/test10/clone-require-all-5.summary -new file mode 100644 -index 0000000..2820093 ---- /dev/null -+++ b/pengine/test10/clone-require-all-5.summary -@@ -0,0 +1,43 @@ -+ -+Current cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Start A:2 (rhel7-auto3) -+ * Start B:0 (rhel7-auto4) -+ * Start B:1 (rhel7-auto3) -+ * Start B:2 (rhel7-auto1) -+ -+Executing cluster transition: -+ * Pseudo action: A-clone_start_0 -+ * Resource action: A start on rhel7-auto3 -+ * Pseudo action: A-clone_running_0 -+ * Pseudo action: clone-one-or-more:order-A-clone-B-clone-mandatory -+ * Resource action: A monitor=10000 on rhel7-auto3 -+ * Pseudo action: B-clone_start_0 -+ * Resource action: B start on rhel7-auto4 -+ * Resource action: B start on rhel7-auto3 -+ * Resource action: B start on rhel7-auto1 -+ * Pseudo action: B-clone_running_0 -+ * Resource action: B monitor=10000 on rhel7-auto4 -+ * Resource action: B monitor=10000 on rhel7-auto3 -+ * Resource action: B monitor=10000 on rhel7-auto1 -+ -+Revised cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Stopped: [ rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto2 ] -+ -diff --git a/pengine/test10/clone-require-all-5.xml b/pengine/test10/clone-require-all-5.xml -new file mode 100644 -index 0000000..1079dae ---- /dev/null -+++ b/pengine/test10/clone-require-all-5.xml -@@ -0,0 +1,150 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-6.dot b/pengine/test10/clone-require-all-6.dot -new file mode 100644 -index 0000000..3ee5c89 ---- /dev/null -+++ b/pengine/test10/clone-require-all-6.dot -@@ -0,0 +1,23 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 " [ style = dashed] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto3" [ style = bold] -+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold] -+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"A_start_0 " -> "A-clone_running_0" [ style = dashed] -+"A_start_0 " [ style=dashed color="red" fontcolor="black"] -+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto1" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"A_stop_0 rhel7-auto3" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto3" -> "A_start_0 " [ style = dashed] -+"A_stop_0 rhel7-auto3" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-6.exp b/pengine/test10/clone-require-all-6.exp -new file mode 100644 -index 0000000..8cc4c57 ---- /dev/null -+++ b/pengine/test10/clone-require-all-6.exp -@@ -0,0 +1,93 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-6.scores b/pengine/test10/clone-require-all-6.scores -new file mode 100644 -index 0000000..4e8ee5a ---- /dev/null -+++ b/pengine/test10/clone-require-all-6.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto2: 1 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: 0 -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: 1 -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: 0 -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 1 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: 0 -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 1 -+clone_color: B:3 allocation score on rhel7-auto1: 0 -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: 1 -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: 1 -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: -INFINITY -+native_color: B:0 allocation score on rhel7-auto4: -INFINITY -+native_color: B:1 allocation score on rhel7-auto1: 0 -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: 1 -+native_color: B:1 allocation score on rhel7-auto4: 0 -+native_color: B:2 allocation score on rhel7-auto1: 0 -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: 1 -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-6.summary b/pengine/test10/clone-require-all-6.summary -new file mode 100644 -index 0000000..6561ea3 ---- /dev/null -+++ b/pengine/test10/clone-require-all-6.summary -@@ -0,0 +1,36 @@ -+ -+Current cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Stopped: [ rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto2 ] -+ -+Transition Summary: -+ * Stop A:0 (rhel7-auto1) -+ * Stop A:2 (rhel7-auto3) -+ -+Executing cluster transition: -+ * Pseudo action: A-clone_stop_0 -+ * Resource action: A stop on rhel7-auto1 -+ * Resource action: A stop on rhel7-auto3 -+ * Pseudo action: A-clone_stopped_0 -+ * Pseudo action: A-clone_start_0 -+ * Pseudo action: all_stopped -+ * Pseudo action: A-clone_running_0 -+ -+Revised cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto2 ] -+ Stopped: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto2 ] -+ -diff --git a/pengine/test10/clone-require-all-6.xml b/pengine/test10/clone-require-all-6.xml -new file mode 100644 -index 0000000..5222b33 ---- /dev/null -+++ b/pengine/test10/clone-require-all-6.xml -@@ -0,0 +1,153 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-7.dot b/pengine/test10/clone-require-all-7.dot -new file mode 100644 -index 0000000..baa87a2 ---- /dev/null -+++ b/pengine/test10/clone-require-all-7.dot -@@ -0,0 +1,51 @@ -+ digraph "g" { -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A:0_start_0 rhel7-auto2" [ style = bold] -+"A-clone_start_0" -> "A:1_start_0 rhel7-auto1" [ style = bold] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A:0_monitor_0 rhel7-auto2" -> "probe_complete rhel7-auto2" [ style = bold] -+"A:0_monitor_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"A:0_monitor_0 rhel7-auto3" -> "probe_complete rhel7-auto3" [ style = bold] -+"A:0_monitor_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"A:0_monitor_0 rhel7-auto4" -> "probe_complete rhel7-auto4" [ style = bold] -+"A:0_monitor_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"A:0_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"A:0_start_0 rhel7-auto2" -> "A-clone_running_0" [ style = bold] -+"A:0_start_0 rhel7-auto2" -> "A:0_monitor_10000 rhel7-auto2" [ style = bold] -+"A:0_start_0 rhel7-auto2" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold] -+"A:0_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"A:1_monitor_0 rhel7-auto1" -> "probe_complete rhel7-auto1" [ style = bold] -+"A:1_monitor_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"A:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"A:1_start_0 rhel7-auto1" -> "A-clone_running_0" [ style = bold] -+"A:1_start_0 rhel7-auto1" -> "A:1_monitor_10000 rhel7-auto1" [ style = bold] -+"A:1_start_0 rhel7-auto1" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold] -+"A:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B:1_start_0 rhel7-auto4" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B:1_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B:1_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold] -+"B:1_start_0 rhel7-auto4" -> "B:1_monitor_10000 rhel7-auto4" [ style = bold] -+"B:1_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold] -+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"clone-one-or-more:order-A-clone-B-clone-mandatory" -> "B-clone_start_0" [ style = bold] -+"clone-one-or-more:order-A-clone-B-clone-mandatory" [ style=bold color="green" fontcolor="orange"] -+"probe_complete rhel7-auto1" -> "probe_complete" [ style = bold] -+"probe_complete rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"probe_complete rhel7-auto2" -> "probe_complete" [ style = bold] -+"probe_complete rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"probe_complete rhel7-auto3" -> "probe_complete" [ style = bold] -+"probe_complete rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"probe_complete rhel7-auto4" -> "probe_complete" [ style = bold] -+"probe_complete rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"probe_complete" -> "A:0_start_0 rhel7-auto2" [ style = bold] -+"probe_complete" -> "A:1_start_0 rhel7-auto1" [ style = bold] -+"probe_complete" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-7.exp b/pengine/test10/clone-require-all-7.exp -new file mode 100644 -index 0000000..d37a82f ---- /dev/null -+++ b/pengine/test10/clone-require-all-7.exp -@@ -0,0 +1,288 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-7.scores b/pengine/test10/clone-require-all-7.scores -new file mode 100644 -index 0000000..8c61fd1 ---- /dev/null -+++ b/pengine/test10/clone-require-all-7.scores -@@ -0,0 +1,77 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: 0 -+clone_color: A-clone allocation score on rhel7-auto2: 0 -+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto1: 0 -+clone_color: A:0 allocation score on rhel7-auto2: 0 -+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto1: 0 -+clone_color: A:1 allocation score on rhel7-auto2: 0 -+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto1: 0 -+clone_color: A:2 allocation score on rhel7-auto2: 0 -+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto1: 0 -+clone_color: A:3 allocation score on rhel7-auto2: 0 -+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: 0 -+native_color: A:0 allocation score on rhel7-auto2: 0 -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: 0 -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: 0 -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-7.summary b/pengine/test10/clone-require-all-7.summary -new file mode 100644 -index 0000000..411f738 ---- /dev/null -+++ b/pengine/test10/clone-require-all-7.summary -@@ -0,0 +1,47 @@ -+ -+Current cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Start A:0 (rhel7-auto2) -+ * Start A:1 (rhel7-auto1) -+ * Start B:0 (rhel7-auto3) -+ * Start B:1 (rhel7-auto4) -+ -+Executing cluster transition: -+ * Resource action: A:0 monitor on rhel7-auto4 -+ * Resource action: A:0 monitor on rhel7-auto3 -+ * Resource action: A:0 monitor on rhel7-auto2 -+ * Resource action: A:1 monitor on rhel7-auto1 -+ * Pseudo action: A-clone_start_0 -+ * Pseudo action: probe_complete -+ * Resource action: A:0 start on rhel7-auto2 -+ * Resource action: A:1 start on rhel7-auto1 -+ * Pseudo action: A-clone_running_0 -+ * Pseudo action: clone-one-or-more:order-A-clone-B-clone-mandatory -+ * Resource action: A:0 monitor=10000 on rhel7-auto2 -+ * Resource action: A:1 monitor=10000 on rhel7-auto1 -+ * Pseudo action: B-clone_start_0 -+ * Resource action: B start on rhel7-auto3 -+ * Resource action: B start on rhel7-auto4 -+ * Pseudo action: B-clone_running_0 -+ * Resource action: B monitor=10000 on rhel7-auto3 -+ * Resource action: B monitor=10000 on rhel7-auto4 -+ -+Revised cluster status: -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto1 rhel7-auto2 ] -+ Stopped: [ rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 ] -+ -diff --git a/pengine/test10/clone-require-all-7.xml b/pengine/test10/clone-require-all-7.xml -new file mode 100644 -index 0000000..6aea47b ---- /dev/null -+++ b/pengine/test10/clone-require-all-7.xml -@@ -0,0 +1,138 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-1.dot b/pengine/test10/clone-require-all-no-interleave-1.dot -new file mode 100644 -index 0000000..d03703b ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-1.dot -@@ -0,0 +1,40 @@ -+ digraph "g" { -+"A-clone_running_0" -> "B-clone_start_0" [ style = bold] -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold] -+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold] -+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold] -+"B_start_0 rhel7-auto3" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold] -+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"C-clone_start_0" -> "C-clone_running_0" [ style = bold] -+"C-clone_start_0" -> "C:1_start_0 rhel7-auto1" [ style = bold] -+"C-clone_start_0" -> "C:2_start_0 rhel7-auto3" [ style = bold] -+"C-clone_start_0" -> "C_start_0 rhel7-auto2" [ style = bold] -+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"C:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"C:1_start_0 rhel7-auto1" -> "C-clone_running_0" [ style = bold] -+"C:1_start_0 rhel7-auto1" -> "C:1_monitor_10000 rhel7-auto1" [ style = bold] -+"C:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"C:2_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"C:2_start_0 rhel7-auto3" -> "C-clone_running_0" [ style = bold] -+"C:2_start_0 rhel7-auto3" -> "C:2_monitor_10000 rhel7-auto3" [ style = bold] -+"C:2_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"C_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"C_start_0 rhel7-auto2" -> "C-clone_running_0" [ style = bold] -+"C_start_0 rhel7-auto2" -> "C_monitor_10000 rhel7-auto2" [ style = bold] -+"C_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-no-interleave-1.exp b/pengine/test10/clone-require-all-no-interleave-1.exp -new file mode 100644 -index 0000000..7048f51 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-1.exp -@@ -0,0 +1,227 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-1.scores b/pengine/test10/clone-require-all-no-interleave-1.scores -new file mode 100644 -index 0000000..f6d3232 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-1.scores -@@ -0,0 +1,113 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto3: 0 -+clone_color: A-clone allocation score on rhel7-auto4: 0 -+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto3: 0 -+clone_color: A:0 allocation score on rhel7-auto4: 0 -+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto3: 0 -+clone_color: A:1 allocation score on rhel7-auto4: 0 -+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto3: 0 -+clone_color: A:2 allocation score on rhel7-auto4: 0 -+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto3: 0 -+clone_color: A:3 allocation score on rhel7-auto4: 0 -+clone_color: B-clone allocation score on rhel7-auto1: 0 -+clone_color: B-clone allocation score on rhel7-auto2: 0 -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: 0 -+clone_color: B:0 allocation score on rhel7-auto2: 0 -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: 0 -+clone_color: B:1 allocation score on rhel7-auto2: 0 -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: 0 -+clone_color: B:2 allocation score on rhel7-auto2: 0 -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: 0 -+clone_color: B:3 allocation score on rhel7-auto2: 0 -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+clone_color: C-clone allocation score on rhel7-auto1: 0 -+clone_color: C-clone allocation score on rhel7-auto2: 0 -+clone_color: C-clone allocation score on rhel7-auto3: 0 -+clone_color: C-clone allocation score on rhel7-auto4: 0 -+clone_color: C:0 allocation score on rhel7-auto1: 0 -+clone_color: C:0 allocation score on rhel7-auto2: 0 -+clone_color: C:0 allocation score on rhel7-auto3: 0 -+clone_color: C:0 allocation score on rhel7-auto4: 0 -+clone_color: C:1 allocation score on rhel7-auto1: 0 -+clone_color: C:1 allocation score on rhel7-auto2: 0 -+clone_color: C:1 allocation score on rhel7-auto3: 0 -+clone_color: C:1 allocation score on rhel7-auto4: 0 -+clone_color: C:2 allocation score on rhel7-auto1: 0 -+clone_color: C:2 allocation score on rhel7-auto2: 0 -+clone_color: C:2 allocation score on rhel7-auto3: 0 -+clone_color: C:2 allocation score on rhel7-auto4: 0 -+clone_color: C:3 allocation score on rhel7-auto1: 0 -+clone_color: C:3 allocation score on rhel7-auto2: 0 -+clone_color: C:3 allocation score on rhel7-auto3: 0 -+clone_color: C:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: 0 -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: -INFINITY -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: -INFINITY -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: C:0 allocation score on rhel7-auto1: 0 -+native_color: C:0 allocation score on rhel7-auto2: 0 -+native_color: C:0 allocation score on rhel7-auto3: 0 -+native_color: C:0 allocation score on rhel7-auto4: -INFINITY -+native_color: C:1 allocation score on rhel7-auto1: 0 -+native_color: C:1 allocation score on rhel7-auto2: -INFINITY -+native_color: C:1 allocation score on rhel7-auto3: 0 -+native_color: C:1 allocation score on rhel7-auto4: -INFINITY -+native_color: C:2 allocation score on rhel7-auto1: -INFINITY -+native_color: C:2 allocation score on rhel7-auto2: -INFINITY -+native_color: C:2 allocation score on rhel7-auto3: 0 -+native_color: C:2 allocation score on rhel7-auto4: -INFINITY -+native_color: C:3 allocation score on rhel7-auto1: -INFINITY -+native_color: C:3 allocation score on rhel7-auto2: -INFINITY -+native_color: C:3 allocation score on rhel7-auto3: -INFINITY -+native_color: C:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-no-interleave-1.summary b/pengine/test10/clone-require-all-no-interleave-1.summary -new file mode 100644 -index 0000000..dd4bc99 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-1.summary -@@ -0,0 +1,54 @@ -+ -+Current cluster status: -+Node rhel7-auto4 (4): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: C-clone [C] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Start A:0 (rhel7-auto3) -+ * Start B:0 (rhel7-auto3) -+ * Start C:0 (rhel7-auto2) -+ * Start C:1 (rhel7-auto1) -+ * Start C:2 (rhel7-auto3) -+ -+Executing cluster transition: -+ * Pseudo action: A-clone_start_0 -+ * Resource action: A start on rhel7-auto3 -+ * Pseudo action: A-clone_running_0 -+ * Pseudo action: B-clone_start_0 -+ * Resource action: A monitor=10000 on rhel7-auto3 -+ * Resource action: B start on rhel7-auto3 -+ * Pseudo action: B-clone_running_0 -+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory -+ * Resource action: B monitor=10000 on rhel7-auto3 -+ * Pseudo action: C-clone_start_0 -+ * Resource action: C start on rhel7-auto2 -+ * Resource action: C start on rhel7-auto1 -+ * Resource action: C start on rhel7-auto3 -+ * Pseudo action: C-clone_running_0 -+ * Resource action: C monitor=10000 on rhel7-auto2 -+ * Resource action: C monitor=10000 on rhel7-auto1 -+ * Resource action: C monitor=10000 on rhel7-auto3 -+ -+Revised cluster status: -+Node rhel7-auto4 (4): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto3 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Clone Set: C-clone [C] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Stopped: [ rhel7-auto4 ] -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-1.xml b/pengine/test10/clone-require-all-no-interleave-1.xml -new file mode 100644 -index 0000000..4630f96 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-1.xml -@@ -0,0 +1,177 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-2.dot b/pengine/test10/clone-require-all-no-interleave-2.dot -new file mode 100644 -index 0000000..1d7f8be ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-2.dot -@@ -0,0 +1,40 @@ -+ digraph "g" { -+"A-clone_running_0" -> "B-clone_start_0" [ style = bold] -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 rhel7-auto4" [ style = bold] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"A_start_0 rhel7-auto4" -> "A-clone_running_0" [ style = bold] -+"A_start_0 rhel7-auto4" -> "A_monitor_10000 rhel7-auto4" [ style = bold] -+"A_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = bold] -+"B_start_0 rhel7-auto4" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold] -+"B_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"C-clone_start_0" -> "C-clone_running_0" [ style = bold] -+"C-clone_start_0" -> "C:1_start_0 rhel7-auto1" [ style = bold] -+"C-clone_start_0" -> "C:2_start_0 rhel7-auto4" [ style = bold] -+"C-clone_start_0" -> "C_start_0 rhel7-auto2" [ style = bold] -+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"C:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"C:1_start_0 rhel7-auto1" -> "C-clone_running_0" [ style = bold] -+"C:1_start_0 rhel7-auto1" -> "C:1_monitor_10000 rhel7-auto1" [ style = bold] -+"C:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"] -+"C:2_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"C:2_start_0 rhel7-auto4" -> "C-clone_running_0" [ style = bold] -+"C:2_start_0 rhel7-auto4" -> "C:2_monitor_10000 rhel7-auto4" [ style = bold] -+"C:2_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"C_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"C_start_0 rhel7-auto2" -> "C-clone_running_0" [ style = bold] -+"C_start_0 rhel7-auto2" -> "C_monitor_10000 rhel7-auto2" [ style = bold] -+"C_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-no-interleave-2.exp b/pengine/test10/clone-require-all-no-interleave-2.exp -new file mode 100644 -index 0000000..35a2df6 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-2.exp -@@ -0,0 +1,227 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-2.scores b/pengine/test10/clone-require-all-no-interleave-2.scores -new file mode 100644 -index 0000000..50e054e ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-2.scores -@@ -0,0 +1,113 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto3: 0 -+clone_color: A-clone allocation score on rhel7-auto4: 0 -+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto3: 0 -+clone_color: A:0 allocation score on rhel7-auto4: 0 -+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto3: 0 -+clone_color: A:1 allocation score on rhel7-auto4: 0 -+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto3: 0 -+clone_color: A:2 allocation score on rhel7-auto4: 0 -+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto3: 0 -+clone_color: A:3 allocation score on rhel7-auto4: 0 -+clone_color: B-clone allocation score on rhel7-auto1: 0 -+clone_color: B-clone allocation score on rhel7-auto2: 0 -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: 0 -+clone_color: B:0 allocation score on rhel7-auto2: 0 -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 0 -+clone_color: B:1 allocation score on rhel7-auto1: 0 -+clone_color: B:1 allocation score on rhel7-auto2: 0 -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: 0 -+clone_color: B:2 allocation score on rhel7-auto2: 0 -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: 0 -+clone_color: B:3 allocation score on rhel7-auto2: 0 -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+clone_color: C-clone allocation score on rhel7-auto1: 0 -+clone_color: C-clone allocation score on rhel7-auto2: 0 -+clone_color: C-clone allocation score on rhel7-auto3: 0 -+clone_color: C-clone allocation score on rhel7-auto4: 0 -+clone_color: C:0 allocation score on rhel7-auto1: 0 -+clone_color: C:0 allocation score on rhel7-auto2: 0 -+clone_color: C:0 allocation score on rhel7-auto3: 0 -+clone_color: C:0 allocation score on rhel7-auto4: 0 -+clone_color: C:1 allocation score on rhel7-auto1: 0 -+clone_color: C:1 allocation score on rhel7-auto2: 0 -+clone_color: C:1 allocation score on rhel7-auto3: 0 -+clone_color: C:1 allocation score on rhel7-auto4: 0 -+clone_color: C:2 allocation score on rhel7-auto1: 0 -+clone_color: C:2 allocation score on rhel7-auto2: 0 -+clone_color: C:2 allocation score on rhel7-auto3: 0 -+clone_color: C:2 allocation score on rhel7-auto4: 0 -+clone_color: C:3 allocation score on rhel7-auto1: 0 -+clone_color: C:3 allocation score on rhel7-auto2: 0 -+clone_color: C:3 allocation score on rhel7-auto3: 0 -+clone_color: C:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: -INFINITY -+native_color: A:0 allocation score on rhel7-auto4: 0 -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: -INFINITY -+native_color: B:0 allocation score on rhel7-auto4: 0 -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: -INFINITY -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: C:0 allocation score on rhel7-auto1: 0 -+native_color: C:0 allocation score on rhel7-auto2: 0 -+native_color: C:0 allocation score on rhel7-auto3: -INFINITY -+native_color: C:0 allocation score on rhel7-auto4: 0 -+native_color: C:1 allocation score on rhel7-auto1: 0 -+native_color: C:1 allocation score on rhel7-auto2: -INFINITY -+native_color: C:1 allocation score on rhel7-auto3: -INFINITY -+native_color: C:1 allocation score on rhel7-auto4: 0 -+native_color: C:2 allocation score on rhel7-auto1: -INFINITY -+native_color: C:2 allocation score on rhel7-auto2: -INFINITY -+native_color: C:2 allocation score on rhel7-auto3: -INFINITY -+native_color: C:2 allocation score on rhel7-auto4: 0 -+native_color: C:3 allocation score on rhel7-auto1: -INFINITY -+native_color: C:3 allocation score on rhel7-auto2: -INFINITY -+native_color: C:3 allocation score on rhel7-auto3: -INFINITY -+native_color: C:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-no-interleave-2.summary b/pengine/test10/clone-require-all-no-interleave-2.summary -new file mode 100644 -index 0000000..f16be9b ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-2.summary -@@ -0,0 +1,54 @@ -+ -+Current cluster status: -+Node rhel7-auto3 (3): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ Clone Set: C-clone [C] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ] -+ -+Transition Summary: -+ * Start A:0 (rhel7-auto4) -+ * Start B:0 (rhel7-auto4) -+ * Start C:0 (rhel7-auto2) -+ * Start C:1 (rhel7-auto1) -+ * Start C:2 (rhel7-auto4) -+ -+Executing cluster transition: -+ * Pseudo action: A-clone_start_0 -+ * Resource action: A start on rhel7-auto4 -+ * Pseudo action: A-clone_running_0 -+ * Pseudo action: B-clone_start_0 -+ * Resource action: A monitor=10000 on rhel7-auto4 -+ * Resource action: B start on rhel7-auto4 -+ * Pseudo action: B-clone_running_0 -+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory -+ * Resource action: B monitor=10000 on rhel7-auto4 -+ * Pseudo action: C-clone_start_0 -+ * Resource action: C start on rhel7-auto2 -+ * Resource action: C start on rhel7-auto1 -+ * Resource action: C start on rhel7-auto4 -+ * Pseudo action: C-clone_running_0 -+ * Resource action: C monitor=10000 on rhel7-auto2 -+ * Resource action: C monitor=10000 on rhel7-auto1 -+ * Resource action: C monitor=10000 on rhel7-auto4 -+ -+Revised cluster status: -+Node rhel7-auto3 (3): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Clone Set: C-clone [C] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Stopped: [ rhel7-auto3 ] -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-2.xml b/pengine/test10/clone-require-all-no-interleave-2.xml -new file mode 100644 -index 0000000..214a7c7 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-2.xml -@@ -0,0 +1,179 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-3.dot b/pengine/test10/clone-require-all-no-interleave-3.dot -new file mode 100644 -index 0000000..58f97a5 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-3.dot -@@ -0,0 +1,60 @@ -+ digraph "g" { -+"A-clone_running_0" -> "B-clone_start_0" [ style = bold] -+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_start_0" -> "A-clone_running_0" [ style = bold] -+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold] -+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold] -+"A-clone_stop_0" -> "A_stop_0 rhel7-auto4" [ style = bold] -+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold] -+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold] -+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold] -+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"A_stop_0 rhel7-auto4" -> "A-clone_stopped_0" [ style = bold] -+"A_stop_0 rhel7-auto4" -> "A_start_0 rhel7-auto3" [ style = bold] -+"A_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold] -+"A_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_start_0" -> "B-clone_running_0" [ style = bold] -+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold] -+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_stop_0" -> "B-clone_stopped_0" [ style = bold] -+"B-clone_stop_0" -> "B_stop_0 rhel7-auto4" [ style = bold] -+"B-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"B-clone_stopped_0" -> "A-clone_stop_0" [ style = bold] -+"B-clone_stopped_0" -> "B-clone_start_0" [ style = bold] -+"B-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold] -+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold] -+"B_start_0 rhel7-auto3" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold] -+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"B_stop_0 rhel7-auto4" -> "B-clone_stopped_0" [ style = bold] -+"B_stop_0 rhel7-auto4" -> "B_start_0 rhel7-auto3" [ style = bold] -+"B_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold] -+"B_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"] -+"C-clone_start_0" -> "C-clone_running_0" [ style = bold] -+"C-clone_start_0" -> "C_start_0 rhel7-auto3" [ style = bold] -+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"] -+"C-clone_stop_0" -> "C-clone_stopped_0" [ style = bold] -+"C-clone_stop_0" -> "C_stop_0 rhel7-auto4" [ style = bold] -+"C-clone_stop_0" [ style=bold color="green" fontcolor="orange"] -+"C-clone_stopped_0" -> "B-clone_stop_0" [ style = bold] -+"C-clone_stopped_0" -> "C-clone_start_0" [ style = bold] -+"C-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] -+"C_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"C_start_0 rhel7-auto3" -> "C-clone_running_0" [ style = bold] -+"C_start_0 rhel7-auto3" -> "C_monitor_10000 rhel7-auto3" [ style = bold] -+"C_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"] -+"C_stop_0 rhel7-auto4" -> "C-clone_stopped_0" [ style = bold] -+"C_stop_0 rhel7-auto4" -> "C_start_0 rhel7-auto3" [ style = bold] -+"C_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold] -+"C_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold] -+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"] -+} -diff --git a/pengine/test10/clone-require-all-no-interleave-3.exp b/pengine/test10/clone-require-all-no-interleave-3.exp -new file mode 100644 -index 0000000..8aba35e ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-3.exp -@@ -0,0 +1,322 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-3.scores b/pengine/test10/clone-require-all-no-interleave-3.scores -new file mode 100644 -index 0000000..70dd2d1 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-3.scores -@@ -0,0 +1,113 @@ -+Allocation scores: -+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY -+clone_color: A-clone allocation score on rhel7-auto3: 0 -+clone_color: A-clone allocation score on rhel7-auto4: 0 -+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:0 allocation score on rhel7-auto3: 0 -+clone_color: A:0 allocation score on rhel7-auto4: 1 -+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:1 allocation score on rhel7-auto3: 0 -+clone_color: A:1 allocation score on rhel7-auto4: 0 -+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:2 allocation score on rhel7-auto3: 0 -+clone_color: A:2 allocation score on rhel7-auto4: 0 -+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY -+clone_color: A:3 allocation score on rhel7-auto3: 0 -+clone_color: A:3 allocation score on rhel7-auto4: 0 -+clone_color: B-clone allocation score on rhel7-auto1: 0 -+clone_color: B-clone allocation score on rhel7-auto2: 0 -+clone_color: B-clone allocation score on rhel7-auto3: 0 -+clone_color: B-clone allocation score on rhel7-auto4: 0 -+clone_color: B:0 allocation score on rhel7-auto1: 0 -+clone_color: B:0 allocation score on rhel7-auto2: 0 -+clone_color: B:0 allocation score on rhel7-auto3: 0 -+clone_color: B:0 allocation score on rhel7-auto4: 1 -+clone_color: B:1 allocation score on rhel7-auto1: 0 -+clone_color: B:1 allocation score on rhel7-auto2: 0 -+clone_color: B:1 allocation score on rhel7-auto3: 0 -+clone_color: B:1 allocation score on rhel7-auto4: 0 -+clone_color: B:2 allocation score on rhel7-auto1: 0 -+clone_color: B:2 allocation score on rhel7-auto2: 0 -+clone_color: B:2 allocation score on rhel7-auto3: 0 -+clone_color: B:2 allocation score on rhel7-auto4: 0 -+clone_color: B:3 allocation score on rhel7-auto1: 0 -+clone_color: B:3 allocation score on rhel7-auto2: 0 -+clone_color: B:3 allocation score on rhel7-auto3: 0 -+clone_color: B:3 allocation score on rhel7-auto4: 0 -+clone_color: C-clone allocation score on rhel7-auto1: 0 -+clone_color: C-clone allocation score on rhel7-auto2: 0 -+clone_color: C-clone allocation score on rhel7-auto3: 0 -+clone_color: C-clone allocation score on rhel7-auto4: 0 -+clone_color: C:0 allocation score on rhel7-auto1: 0 -+clone_color: C:0 allocation score on rhel7-auto2: 0 -+clone_color: C:0 allocation score on rhel7-auto3: 0 -+clone_color: C:0 allocation score on rhel7-auto4: 1 -+clone_color: C:1 allocation score on rhel7-auto1: 1 -+clone_color: C:1 allocation score on rhel7-auto2: 0 -+clone_color: C:1 allocation score on rhel7-auto3: 0 -+clone_color: C:1 allocation score on rhel7-auto4: 0 -+clone_color: C:2 allocation score on rhel7-auto1: 0 -+clone_color: C:2 allocation score on rhel7-auto2: 1 -+clone_color: C:2 allocation score on rhel7-auto3: 0 -+clone_color: C:2 allocation score on rhel7-auto4: 0 -+clone_color: C:3 allocation score on rhel7-auto1: 0 -+clone_color: C:3 allocation score on rhel7-auto2: 0 -+clone_color: C:3 allocation score on rhel7-auto3: 0 -+clone_color: C:3 allocation score on rhel7-auto4: 0 -+native_color: A:0 allocation score on rhel7-auto1: -INFINITY -+native_color: A:0 allocation score on rhel7-auto2: -INFINITY -+native_color: A:0 allocation score on rhel7-auto3: 0 -+native_color: A:0 allocation score on rhel7-auto4: -INFINITY -+native_color: A:1 allocation score on rhel7-auto1: -INFINITY -+native_color: A:1 allocation score on rhel7-auto2: -INFINITY -+native_color: A:1 allocation score on rhel7-auto3: -INFINITY -+native_color: A:1 allocation score on rhel7-auto4: -INFINITY -+native_color: A:2 allocation score on rhel7-auto1: -INFINITY -+native_color: A:2 allocation score on rhel7-auto2: -INFINITY -+native_color: A:2 allocation score on rhel7-auto3: -INFINITY -+native_color: A:2 allocation score on rhel7-auto4: -INFINITY -+native_color: A:3 allocation score on rhel7-auto1: -INFINITY -+native_color: A:3 allocation score on rhel7-auto2: -INFINITY -+native_color: A:3 allocation score on rhel7-auto3: -INFINITY -+native_color: A:3 allocation score on rhel7-auto4: -INFINITY -+native_color: B:0 allocation score on rhel7-auto1: -INFINITY -+native_color: B:0 allocation score on rhel7-auto2: -INFINITY -+native_color: B:0 allocation score on rhel7-auto3: 0 -+native_color: B:0 allocation score on rhel7-auto4: -INFINITY -+native_color: B:1 allocation score on rhel7-auto1: -INFINITY -+native_color: B:1 allocation score on rhel7-auto2: -INFINITY -+native_color: B:1 allocation score on rhel7-auto3: -INFINITY -+native_color: B:1 allocation score on rhel7-auto4: -INFINITY -+native_color: B:2 allocation score on rhel7-auto1: -INFINITY -+native_color: B:2 allocation score on rhel7-auto2: -INFINITY -+native_color: B:2 allocation score on rhel7-auto3: -INFINITY -+native_color: B:2 allocation score on rhel7-auto4: -INFINITY -+native_color: B:3 allocation score on rhel7-auto1: -INFINITY -+native_color: B:3 allocation score on rhel7-auto2: -INFINITY -+native_color: B:3 allocation score on rhel7-auto3: -INFINITY -+native_color: B:3 allocation score on rhel7-auto4: -INFINITY -+native_color: C:0 allocation score on rhel7-auto1: -INFINITY -+native_color: C:0 allocation score on rhel7-auto2: -INFINITY -+native_color: C:0 allocation score on rhel7-auto3: 0 -+native_color: C:0 allocation score on rhel7-auto4: -INFINITY -+native_color: C:1 allocation score on rhel7-auto1: 1 -+native_color: C:1 allocation score on rhel7-auto2: -INFINITY -+native_color: C:1 allocation score on rhel7-auto3: 0 -+native_color: C:1 allocation score on rhel7-auto4: -INFINITY -+native_color: C:2 allocation score on rhel7-auto1: 0 -+native_color: C:2 allocation score on rhel7-auto2: 1 -+native_color: C:2 allocation score on rhel7-auto3: 0 -+native_color: C:2 allocation score on rhel7-auto4: -INFINITY -+native_color: C:3 allocation score on rhel7-auto1: -INFINITY -+native_color: C:3 allocation score on rhel7-auto2: -INFINITY -+native_color: C:3 allocation score on rhel7-auto3: -INFINITY -+native_color: C:3 allocation score on rhel7-auto4: -INFINITY -+native_color: shooter allocation score on rhel7-auto1: 0 -+native_color: shooter allocation score on rhel7-auto2: 0 -+native_color: shooter allocation score on rhel7-auto3: 0 -+native_color: shooter allocation score on rhel7-auto4: 0 -diff --git a/pengine/test10/clone-require-all-no-interleave-3.summary b/pengine/test10/clone-require-all-no-interleave-3.summary -new file mode 100644 -index 0000000..4379644 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-3.summary -@@ -0,0 +1,61 @@ -+ -+Current cluster status: -+Node rhel7-auto4 (4): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto4 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Clone Set: C-clone [C] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Stopped: [ rhel7-auto3 ] -+ -+Transition Summary: -+ * Move A:0 (Started rhel7-auto4 -> rhel7-auto3) -+ * Move B:0 (Started rhel7-auto4 -> rhel7-auto3) -+ * Move C:0 (Started rhel7-auto4 -> rhel7-auto3) -+ -+Executing cluster transition: -+ * Pseudo action: C-clone_stop_0 -+ * Resource action: C stop on rhel7-auto4 -+ * Pseudo action: C-clone_stopped_0 -+ * Pseudo action: B-clone_stop_0 -+ * Resource action: B stop on rhel7-auto4 -+ * Pseudo action: B-clone_stopped_0 -+ * Pseudo action: A-clone_stop_0 -+ * Resource action: A stop on rhel7-auto4 -+ * Pseudo action: A-clone_stopped_0 -+ * Pseudo action: A-clone_start_0 -+ * Pseudo action: all_stopped -+ * Resource action: A start on rhel7-auto3 -+ * Pseudo action: A-clone_running_0 -+ * Pseudo action: B-clone_start_0 -+ * Resource action: A monitor=10000 on rhel7-auto3 -+ * Resource action: B start on rhel7-auto3 -+ * Pseudo action: B-clone_running_0 -+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory -+ * Resource action: B monitor=10000 on rhel7-auto3 -+ * Pseudo action: C-clone_start_0 -+ * Resource action: C start on rhel7-auto3 -+ * Pseudo action: C-clone_running_0 -+ * Resource action: C monitor=10000 on rhel7-auto3 -+ -+Revised cluster status: -+Node rhel7-auto4 (4): standby -+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ -+ shooter (stonith:fence_xvm): Started rhel7-auto1 -+ Clone Set: A-clone [A] -+ Started: [ rhel7-auto3 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Clone Set: B-clone [B] -+ Started: [ rhel7-auto3 ] -+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ] -+ Clone Set: C-clone [C] -+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] -+ Stopped: [ rhel7-auto4 ] -+ -diff --git a/pengine/test10/clone-require-all-no-interleave-3.xml b/pengine/test10/clone-require-all-no-interleave-3.xml -new file mode 100644 -index 0000000..8a9bea8 ---- /dev/null -+++ b/pengine/test10/clone-require-all-no-interleave-3.xml -@@ -0,0 +1,179 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/xml/constraints-2.3.rng b/xml/constraints-2.3.rng -new file mode 100644 -index 0000000..d9a4701 ---- /dev/null -+++ b/xml/constraints-2.3.rng -@@ -0,0 +1,252 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ group -+ listed -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ stop -+ demote -+ fence -+ freeze -+ -+ -+ -+ -+ -+ -+ -+ -+ always -+ never -+ exclusive -+ -+ -+ -+ -+ -+ start -+ promote -+ demote -+ stop -+ -+ -+ -+ -+ -+ Stopped -+ Started -+ Master -+ Slave -+ -+ -+ -+ -+ -+ Optional -+ Mandatory -+ Serialize -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/xml/constraints-next.rng b/xml/constraints-next.rng -index 0defe8f..9d11003 100644 ---- a/xml/constraints-next.rng -+++ b/xml/constraints-next.rng -@@ -154,6 +154,9 @@ - - - -+ -+ -+ - - - diff --git a/SOURCES/bz1198886-0315c57-ask-dbus-not-to-kill-on-shutdown-2.patch b/SOURCES/bz1198886-0315c57-ask-dbus-not-to-kill-on-shutdown-2.patch deleted file mode 100644 index c315029..0000000 --- a/SOURCES/bz1198886-0315c57-ask-dbus-not-to-kill-on-shutdown-2.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0315c578905378726787c695d7d07188ba97f892 Mon Sep 17 00:00:00 2001 -From: Andrew Beekhof -Date: Tue, 24 Mar 2015 07:48:51 +1100 -Subject: [PATCH] Fix: systemd: Kindly ask dbus NOT to kill the process if the - dbus connection fails - ---- - lib/services/dbus.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/services/dbus.c b/lib/services/dbus.c -index f44b590..0623168 100644 ---- a/lib/services/dbus.c -+++ b/lib/services/dbus.c -@@ -533,6 +533,7 @@ pcmk_dbus_timeout_toggle(DBusTimeout *timeout, void *data){ - /* Inspired by http://www.kolej.mff.cuni.cz/~vesej3am/devel/dbus-select.c */ - - void pcmk_dbus_connection_setup_with_select(DBusConnection *c){ -+ dbus_connection_set_exit_on_disconnect (c, FALSE); - dbus_connection_set_timeout_functions( - c, pcmk_dbus_timeout_add, pcmk_dbus_timeout_remove, pcmk_dbus_timeout_toggle, NULL, NULL); - dbus_connection_set_watch_functions(c, pcmk_dbus_watch_add, pcmk_dbus_watch_remove, pcmk_dbus_watch_toggle, NULL, NULL); --- -1.8.4.2 - diff --git a/SOURCES/bz1198886-2ab97ec-systemd-stop-1.patch b/SOURCES/bz1198886-2ab97ec-systemd-stop-1.patch deleted file mode 100644 index 2159a43..0000000 --- a/SOURCES/bz1198886-2ab97ec-systemd-stop-1.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/lib/services/systemd.c b/lib/services/systemd.c -index 10c605a..c797c47 100644 ---- a/lib/services/systemd.c -+++ b/lib/services/systemd.c -@@ -545,15 +545,27 @@ systemd_unit_exec_with_unit(svc_action_t * op, const char *unit) - - } else if (g_strcmp0(method, "start") == 0) { - FILE *file_strm = NULL; -- char *override_dir = g_strdup_printf("%s/%s", SYSTEMD_OVERRIDE_ROOT, unit); -- char *override_file = g_strdup_printf("%s/%s/50-pacemaker.conf", SYSTEMD_OVERRIDE_ROOT, unit); -+ char *override_dir = g_strdup_printf("%s/%s.service.d", SYSTEMD_OVERRIDE_ROOT, op->agent); -+ char *override_file = g_strdup_printf("%s/%s.service.d/50-pacemaker.conf", SYSTEMD_OVERRIDE_ROOT, op->agent); - - method = "StartUnit"; - crm_build_path(override_dir, 0755); - - file_strm = fopen(override_file, "w"); - if (file_strm != NULL) { -- int rc = fprintf(file_strm, "[Service]\nRestart=no"); -+ /* TODO: Insert the start timeout in too */ -+ char *override = g_strdup_printf( -+ "[Unit]\n" -+ "Description=Cluster Controlled %s\n" -+ "Before=pacemaker.service\n" -+ "\n" -+ "[Service]\n" -+ "Restart=no\n", -+ op->agent); -+ -+ int rc = fprintf(file_strm, "%s\n", override); -+ -+ free(override); - if (rc < 0) { - crm_perror(LOG_ERR, "Cannot write to systemd override file %s", override_file); - } -@@ -571,7 +583,7 @@ systemd_unit_exec_with_unit(svc_action_t * op, const char *unit) - free(override_dir); - - } else if (g_strcmp0(method, "stop") == 0) { -- char *override_file = g_strdup_printf("%s/%s/50-pacemaker.conf", SYSTEMD_OVERRIDE_ROOT, unit); -+ char *override_file = g_strdup_printf("%s/%s.service.d/50-pacemaker.conf", SYSTEMD_OVERRIDE_ROOT, op->agent); - - method = "StopUnit"; - unlink(override_file); diff --git a/SOURCES/bz1198886-382efe0-hint-lrmd-sd-notify-not-required-4.patch b/SOURCES/bz1198886-382efe0-hint-lrmd-sd-notify-not-required-4.patch deleted file mode 100644 index 2e073c1..0000000 --- a/SOURCES/bz1198886-382efe0-hint-lrmd-sd-notify-not-required-4.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 382efe0f55e9accb30193cbbb80d7c9d423bea25 Mon Sep 17 00:00:00 2001 -From: Andrew Beekhof -Date: Tue, 21 Apr 2015 08:04:10 +1000 -Subject: [PATCH] Fix: lrmd: Hint to child processes that using sd_notify is - not required - ---- - lrmd/main.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/lrmd/main.c b/lrmd/main.c -index 4c588be..636cf44 100644 ---- a/lrmd/main.c -+++ b/lrmd/main.c -@@ -312,6 +312,12 @@ main(int argc, char **argv) - } - } - -+ /* The presence of this variable allegedly controls whether child -+ * processes like httpd will try and use Systemd's sd_notify -+ * API -+ */ -+ unsetenv("NOTIFY_SOCKET"); -+ - /* Used by RAs - Leave owned by root */ - crm_build_path(CRM_RSCTMP_DIR, 0755); - --- -1.8.4.2 - diff --git a/SOURCES/bz1198886-90d725d-dbus-after-pcmk-shutdown-3.patch b/SOURCES/bz1198886-90d725d-dbus-after-pcmk-shutdown-3.patch deleted file mode 100644 index 052431a..0000000 --- a/SOURCES/bz1198886-90d725d-dbus-after-pcmk-shutdown-3.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 90d725d8d8f535a55dde405877a028782b727cec Mon Sep 17 00:00:00 2001 -From: Andrew Beekhof -Date: Mon, 23 Mar 2015 14:43:27 +1100 -Subject: [PATCH] Fix: systemd: Tell systemd not to take DBus down from - underneath us - ---- - mcp/pacemaker.service.in | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/mcp/pacemaker.service.in b/mcp/pacemaker.service.in -index 7871167..3562608 100644 ---- a/mcp/pacemaker.service.in -+++ b/mcp/pacemaker.service.in -@@ -1,10 +1,13 @@ - [Unit] - Description=Pacemaker High Availability Cluster Manager - -+After=dbus.service - After=basic.target -+After=syslog.service - After=network.target - After=corosync.service - -+Requires=dbus.service - Requires=basic.target - Requires=network.target - Requires=corosync.service --- -1.8.4.2 - diff --git a/SOURCES/pacemaker-094c0ea-to-d9a51c6.patch b/SOURCES/pacemaker-094c0ea-to-d9a51c6.patch deleted file mode 100644 index d166559..0000000 --- a/SOURCES/pacemaker-094c0ea-to-d9a51c6.patch +++ /dev/null @@ -1,8513 +0,0 @@ -diff --git a/crmd/crmd_lrm.h b/crmd/crmd_lrm.h -index 46cddc2..3a08392 100644 ---- a/crmd/crmd_lrm.h -+++ b/crmd/crmd_lrm.h -@@ -71,6 +71,12 @@ struct pending_deletion_op_s { - xmlNode *do_lrm_query_internal(lrm_state_t * lrm_state, gboolean is_replace); - - /*! -+ * \brief Is this the local ipc connection to the lrmd -+ */ -+gboolean -+lrm_state_is_local(lrm_state_t *lrm_state); -+ -+/*! - * \brief Clear all state information from a single state entry. - * \note This does not close the lrmd connection - */ -diff --git a/crmd/lrm.c b/crmd/lrm.c -index b68f657..5bff4d5 100644 ---- a/crmd/lrm.c -+++ b/crmd/lrm.c -@@ -1163,7 +1163,12 @@ get_lrm_resource(lrm_state_t * lrm_state, xmlNode * resource, xmlNode * op_msg, - fsa_data_t *msg_data = NULL; - - crm_err("Could not add resource %s to LRM %s", id, lrm_state->node_name); -- register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL); -+ /* only register this as a internal error if this involves the local -+ * lrmd. Otherwise we're likely dealing with an unresponsive remote-node -+ * which is not a FSA failure. */ -+ if (lrm_state_is_local(lrm_state) == TRUE) { -+ register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL); -+ } - } - } - -@@ -1211,6 +1216,28 @@ delete_resource(lrm_state_t * lrm_state, - delete_rsc_entry(lrm_state, request, id, gIter, rc, user); - } - -+static int -+get_fake_call_id(lrm_state_t *lrm_state, const char *rsc_id) -+{ -+ int call_id = 0; -+ rsc_history_t *entry = NULL; -+ -+ entry = g_hash_table_lookup(lrm_state->resource_history, rsc_id); -+ -+ /* Make sure the call id is greater than the last successful operation, -+ * otherwise the failure will not result in a possible recovery of the resource -+ * as it could appear the failure occurred before the successful start */ -+ if (entry) { -+ call_id = entry->last_callid + 1; -+ } -+ -+ if (call_id < 0) { -+ call_id = 1; -+ } -+ return call_id; -+} -+ -+ - /* A_LRM_INVOKE */ - void - do_lrm_invoke(long long action, -@@ -1272,7 +1299,6 @@ do_lrm_invoke(long long action, - operation = CRM_OP_LRM_REFRESH; - - } else if (safe_str_eq(crm_op, CRM_OP_LRM_FAIL)) { -- rsc_history_t *entry = NULL; - lrmd_event_data_t *op = NULL; - lrmd_rsc_info_t *rsc = NULL; - xmlNode *xml_rsc = find_xml_node(input->xml, XML_CIB_TAG_RESOURCE, TRUE); -@@ -1293,16 +1319,7 @@ do_lrm_invoke(long long action, - - free((char *)op->user_data); - op->user_data = NULL; -- entry = g_hash_table_lookup(lrm_state->resource_history, op->rsc_id); -- /* Make sure the call id is greater than the last successful operation, -- * otherwise the failure will not result in a possible recovery of the resource -- * as it could appear the failure occurred before the successful start */ -- if (entry) { -- op->call_id = entry->last_callid + 1; -- if (op->call_id < 0) { -- op->call_id = 1; -- } -- } -+ op->call_id = get_fake_call_id(lrm_state, op->rsc_id); - op->interval = 0; - op->op_status = PCMK_LRM_OP_DONE; - op->rc = PCMK_OCF_UNKNOWN_ERROR; -@@ -1430,6 +1447,21 @@ do_lrm_invoke(long long action, - rsc = get_lrm_resource(lrm_state, xml_rsc, input->xml, create_rsc); - - if (rsc == NULL && create_rsc) { -+ lrmd_event_data_t *op = NULL; -+ -+ /* if the operation couldn't complete because we can't register -+ * the resource, return a generic error */ -+ op = construct_op(lrm_state, input->xml, ID(xml_rsc), operation); -+ CRM_ASSERT(op != NULL); -+ -+ op->op_status = PCMK_LRM_OP_DONE; -+ op->rc = PCMK_OCF_UNKNOWN_ERROR; -+ op->t_run = time(NULL); -+ op->t_rcchange = op->t_run; -+ -+ send_direct_ack(from_host, from_sys, NULL, op, ID(xml_rsc)); -+ lrmd_free_event(op); -+ - crm_err("Invalid resource definition"); - crm_log_xml_warn(input->msg, "bad input"); - -@@ -1767,6 +1799,7 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat - lrmd_key_value_t *params = NULL; - fsa_data_t *msg_data = NULL; - const char *transition = NULL; -+ gboolean stop_recurring = FALSE; - - CRM_CHECK(rsc != NULL, return); - CRM_CHECK(operation != NULL, return); -@@ -1781,10 +1814,25 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat - op = construct_op(lrm_state, msg, rsc->id, operation); - CRM_CHECK(op != NULL, return); - -- /* stop any previous monitor operations before changing the resource state */ -- if (op->interval == 0 -+ if (is_remote_lrmd_ra(NULL, NULL, rsc->id) -+ && op->interval == 0 -+ && strcmp(operation, CRMD_ACTION_MIGRATE) == 0) { -+ -+ /* pcmk remote connections are a special use case. -+ * We never ever want to stop monitoring a connection resource until -+ * the entire migration has completed. If the connection is ever unexpected -+ * severed, even during a migration, this is an event we must detect.*/ -+ stop_recurring = FALSE; -+ -+ } else if (op->interval == 0 - && strcmp(operation, CRMD_ACTION_STATUS) != 0 - && strcmp(operation, CRMD_ACTION_NOTIFY) != 0) { -+ -+ /* stop any previous monitor operations before changing the resource state */ -+ stop_recurring = TRUE; -+ } -+ -+ if (stop_recurring == TRUE) { - guint removed = 0; - struct stop_recurring_action_s data; - -@@ -1837,10 +1885,20 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat - op->op_type, - op->user_data, op->interval, op->timeout, op->start_delay, params); - -- if (call_id <= 0) { -+ if (call_id <= 0 && lrm_state_is_local(lrm_state)) { - crm_err("Operation %s on %s failed: %d", operation, rsc->id, call_id); - register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL); - -+ } else if (call_id <= 0) { -+ -+ crm_err("Operation %s on resource %s failed to execute on remote node %s: %d", operation, rsc->id, lrm_state->node_name, call_id); -+ op->call_id = get_fake_call_id(lrm_state, rsc->id); -+ op->op_status = PCMK_LRM_OP_DONE; -+ op->rc = PCMK_OCF_UNKNOWN_ERROR; -+ op->t_run = time(NULL); -+ op->t_rcchange = op->t_run; -+ process_lrm_event(lrm_state, op); -+ - } else { - /* record all operations so we can wait - * for them to complete during shutdown -diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c -index 72f66c7..efd061c 100644 ---- a/crmd/lrm_state.c -+++ b/crmd/lrm_state.c -@@ -90,6 +90,21 @@ free_recurring_op(gpointer value) - free(op); - } - -+gboolean -+lrm_state_is_local(lrm_state_t *lrm_state) -+{ -+ if (lrm_state == NULL || fsa_our_uname == NULL) { -+ return FALSE; -+ } -+ -+ if (strcmp(lrm_state->node_name, fsa_our_uname) != 0) { -+ return FALSE; -+ } -+ -+ return TRUE; -+ -+} -+ - lrm_state_t * - lrm_state_create(const char *node_name) - { -diff --git a/crmd/remote_lrmd_ra.c b/crmd/remote_lrmd_ra.c -index 2f658ee..ae59070 100644 ---- a/crmd/remote_lrmd_ra.c -+++ b/crmd/remote_lrmd_ra.c -@@ -231,7 +231,7 @@ retry_start_cmd_cb(gpointer data) - return FALSE; - } - cmd = ra_data->cur_cmd; -- if (safe_str_neq(cmd->action, "start")) { -+ if (safe_str_neq(cmd->action, "start") && safe_str_neq(cmd->action, "migrate_from")) { - return FALSE; - } - update_remaining_timeout(cmd); -@@ -264,7 +264,7 @@ connection_takeover_timeout_cb(gpointer data) - lrm_state_t *lrm_state = NULL; - remote_ra_cmd_t *cmd = data; - -- crm_debug("takeover event timed out for node %s", cmd->rsc_id); -+ crm_info("takeover event timed out for node %s", cmd->rsc_id); - cmd->takeover_timeout_id = 0; - - lrm_state = lrm_state_find(cmd->rsc_id); -@@ -281,7 +281,7 @@ monitor_timeout_cb(gpointer data) - lrm_state_t *lrm_state = NULL; - remote_ra_cmd_t *cmd = data; - -- crm_debug("Poke async response timed out for node %s", cmd->rsc_id); -+ crm_info("Poke async response timed out for node %s", cmd->rsc_id); - cmd->monitor_timeout_id = 0; - cmd->op_status = PCMK_LRM_OP_TIMEOUT; - cmd->rc = PCMK_OCF_UNKNOWN_ERROR; -diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h -index 33acc6e..0d853c0 100644 ---- a/include/crm/pengine/common.h -+++ b/include/crm/pengine/common.h -@@ -34,7 +34,18 @@ enum action_fail_response { - action_fail_stop, - action_fail_standby, - action_fail_fence, -- action_fail_restart_container -+ action_fail_restart_container, -+ /* This is reserved for internal use for baremetal remote node connection -+ * resources. This fail action means -+ * 1. If stonith is enabled, fence the baremetal remote node -+ * 2. stonith not enabled, attempt to recover the connection resources -+ * -+ * This response value gives us control of saying types of -+ * connection resource failures result in fencing the remote node. -+ * Example: recurring monitors failure should result in fencing. -+ */ -+ action_fail_reset_remote, -+ - }; - - /* the "done" action must be the "pre" action +1 */ -diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h -index f08a910..da20f64 100644 ---- a/include/crm/pengine/status.h -+++ b/include/crm/pengine/status.h -@@ -138,6 +138,8 @@ struct node_shared_s { - gboolean is_dc; - gboolean rsc_discovery_enabled; - -+ gboolean remote_requires_reset; -+ - int num_resources; - GListPtr running_rsc; /* resource_t* */ - GListPtr allocated_rsc; /* resource_t* */ -diff --git a/lib/common/ipc.c b/lib/common/ipc.c -index f26225f..1b8558d 100644 ---- a/lib/common/ipc.c -+++ b/lib/common/ipc.c -@@ -1144,7 +1144,7 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in - - id++; - CRM_LOG_ASSERT(id != 0); /* Crude wrap-around detection */ -- rc = crm_ipc_prepare(id, message, &iov, ipc_buffer_max); -+ rc = crm_ipc_prepare(id, message, &iov, client->max_buf_size); - if(rc < 0) { - return rc; - } -@@ -1158,10 +1158,10 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in - } - - if(header->size_compressed) { -- if(factor < 10 && (ipc_buffer_max / 10) < (rc / factor)) { -+ if(factor < 10 && (client->max_buf_size / 10) < (rc / factor)) { - crm_notice("Compressed message exceeds %d0%% of the configured ipc limit (%d bytes), " - "consider setting PCMK_ipc_buffer to %d or higher", -- factor, ipc_buffer_max, 2*ipc_buffer_max); -+ factor, client->max_buf_size, 2*client->max_buf_size); - factor++; - } - } -diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c -index b8c5d23..74bd692 100644 ---- a/lib/lrmd/lrmd_client.c -+++ b/lib/lrmd/lrmd_client.c -@@ -604,12 +604,18 @@ lrmd_tls_recv_reply(lrmd_t * lrmd, int total_timeout, int expected_reply_id, int - remaining_timeout = total_timeout; - } - if (remaining_timeout <= 0) { -+ crm_err("Never received the expected reply during the timeout period, disconnecting."); -+ *disconnected = TRUE; - return NULL; - } - - crm_remote_recv(native->remote, remaining_timeout, disconnected); - xml = crm_remote_parse_buffer(native->remote); -- if (!xml || *disconnected) { -+ if (!xml) { -+ crm_err("Unable to receive expected reply, disconnecting."); -+ *disconnected = TRUE; -+ return NULL; -+ } else if (*disconnected) { - return NULL; - } - } -diff --git a/lib/pengine/common.c b/lib/pengine/common.c -index e5e4ea7..42eda33 100644 ---- a/lib/pengine/common.c -+++ b/lib/pengine/common.c -@@ -214,6 +214,9 @@ fail2text(enum action_fail_response fail) - case action_fail_restart_container: - result = "restart-container"; - break; -+ case action_fail_reset_remote: -+ result = "reset-remote"; -+ break; - } - return result; - } -diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c -index a19bdff..bdd6450 100644 ---- a/lib/pengine/unpack.c -+++ b/lib/pengine/unpack.c -@@ -80,6 +80,15 @@ pe_fence_node(pe_working_set_t * data_set, node_t * node, const char *reason) - node->details->uname, reason); - set_bit(node->details->remote_rsc->flags, pe_rsc_failed); - -+ } else if (is_baremetal_remote_node(node)) { -+ if(pe_can_fence(data_set, node)) { -+ crm_warn("Node %s will be fenced %s", node->details->uname, reason); -+ } else { -+ crm_warn("Node %s is unclean %s", node->details->uname, reason); -+ } -+ node->details->unclean = TRUE; -+ node->details->remote_requires_reset = TRUE; -+ - } else if (node->details->unclean == FALSE) { - if(pe_can_fence(data_set, node)) { - crm_warn("Node %s will be fenced %s", node->details->uname, reason); -@@ -1143,8 +1152,10 @@ unpack_remote_status(xmlNode * status, pe_working_set_t * data_set) - } - crm_trace("Processing remote node id=%s, uname=%s", id, uname); - -- this_node->details->unclean = FALSE; -- this_node->details->unseen = FALSE; -+ if (this_node->details->remote_requires_reset == FALSE) { -+ this_node->details->unclean = FALSE; -+ this_node->details->unseen = FALSE; -+ } - attrs = find_xml_node(state, XML_TAG_TRANSIENT_NODEATTRS, FALSE); - add_node_attrs(attrs, this_node, TRUE, data_set); - -@@ -1777,6 +1788,7 @@ process_rsc_state(resource_t * rsc, node_t * node, - enum action_fail_response on_fail, - xmlNode * migrate_op, pe_working_set_t * data_set) - { -+ node_t *tmpnode = NULL; - CRM_ASSERT(rsc); - pe_rsc_trace(rsc, "Resource %s is %s on %s: on_fail=%s", - rsc->id, role2text(rsc->role), node->details->uname, fail2text(on_fail)); -@@ -1817,7 +1829,7 @@ process_rsc_state(resource_t * rsc, node_t * node, - should_fence = TRUE; - } else if (is_set(data_set->flags, pe_flag_stonith_enabled)) { - if (is_baremetal_remote_node(node) && is_not_set(node->details->remote_rsc->flags, pe_rsc_failed)) { -- /* setting unceen = true means that fencing of the remote node will -+ /* setting unseen = true means that fencing of the remote node will - * only occur if the connection resource is not going to start somewhere. - * This allows connection resources on a failed cluster-node to move to - * another node without requiring the baremetal remote nodes to be fenced -@@ -1892,7 +1904,20 @@ process_rsc_state(resource_t * rsc, node_t * node, - - if (rsc->container) { - stop_action(rsc->container, node, FALSE); -- -+ } else if (rsc->role != RSC_ROLE_STOPPED && rsc->role != RSC_ROLE_UNKNOWN) { -+ stop_action(rsc, node, FALSE); -+ } -+ break; -+ case action_fail_reset_remote: -+ set_bit(rsc->flags, pe_rsc_failed); -+ tmpnode = NULL; -+ if (rsc->is_remote_node) { -+ tmpnode = pe_find_node(data_set->nodes, rsc->id); -+ } -+ if (tmpnode && is_baremetal_remote_node(tmpnode)) { -+ /* connection resource to baremetal resource failed in a way that -+ * should result in fencing the remote-node. */ -+ pe_fence_node(data_set, tmpnode, "because of connection failure(s)"); - } else if (rsc->role != RSC_ROLE_STOPPED && rsc->role != RSC_ROLE_UNKNOWN) { - stop_action(rsc, node, FALSE); - } -@@ -1904,7 +1929,7 @@ process_rsc_state(resource_t * rsc, node_t * node, - * result in a fencing operation regardless if we're going to attempt to - * reconnect to the remote-node in this transition or not. */ - if (is_set(rsc->flags, pe_rsc_failed) && rsc->is_remote_node) { -- node_t *tmpnode = pe_find_node(data_set->nodes, rsc->id); -+ tmpnode = pe_find_node(data_set->nodes, rsc->id); - if (tmpnode && tmpnode->details->unclean) { - tmpnode->details->unseen = FALSE; - } -@@ -2510,10 +2535,9 @@ unpack_rsc_op_failure(resource_t *rsc, node_t *node, int rc, xmlNode *xml_op, en - - action = custom_action(rsc, strdup(key), task, NULL, TRUE, FALSE, data_set); - if ((action->on_fail <= action_fail_fence && *on_fail < action->on_fail) || -- (action->on_fail == action_fail_restart_container -- && *on_fail <= action_fail_recover) || (*on_fail == action_fail_restart_container -- && action->on_fail >= -- action_fail_migrate)) { -+ (action->on_fail == action_fail_reset_remote && *on_fail <= action_fail_recover) || -+ (action->on_fail == action_fail_restart_container && *on_fail <= action_fail_recover) || -+ (*on_fail == action_fail_restart_container && action->on_fail >= action_fail_migrate)) { - pe_rsc_trace(rsc, "on-fail %s -> %s for %s (%s)", fail2text(*on_fail), - fail2text(action->on_fail), action->uuid, key); - *on_fail = action->on_fail; -@@ -2881,13 +2905,11 @@ update_resource_state(resource_t *rsc, node_t * node, xmlNode * xml_op, const ch - case action_fail_block: - case action_fail_ignore: - case action_fail_recover: -- *on_fail = action_fail_ignore; -- rsc->next_role = RSC_ROLE_UNKNOWN; -- break; -- - case action_fail_restart_container: -+ case action_fail_reset_remote: - *on_fail = action_fail_ignore; - rsc->next_role = RSC_ROLE_UNKNOWN; -+ break; - } - } - } -diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c -index baf6cb9..a40de60 100644 ---- a/lib/pengine/utils.c -+++ b/lib/pengine/utils.c -@@ -35,6 +35,7 @@ void unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * contain - pe_working_set_t * data_set); - static xmlNode *find_rsc_op_entry_helper(resource_t * rsc, const char *key, - gboolean include_disabled); -+static gboolean is_rsc_baremetal_remote_node(resource_t *rsc, pe_working_set_t * data_set); - - bool pe_can_fence(pe_working_set_t * data_set, node_t *node) - { -@@ -686,6 +687,19 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container, - NULL, action->meta, NULL, FALSE, data_set->now); - g_hash_table_remove(action->meta, "id"); - -+ field = XML_LRM_ATTR_INTERVAL; -+ value = g_hash_table_lookup(action->meta, field); -+ if (value != NULL) { -+ interval = crm_get_interval(value); -+ if (interval > 0) { -+ value_ms = crm_itoa(interval); -+ g_hash_table_replace(action->meta, strdup(field), value_ms); -+ -+ } else { -+ g_hash_table_remove(action->meta, field); -+ } -+ } -+ - /* Begin compatability code */ - value = g_hash_table_lookup(action->meta, "requires"); - -@@ -789,6 +803,22 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container, - action->on_fail = action_fail_restart_container; - value = "restart container (and possibly migrate) (default)"; - -+ /* for baremetal remote nodes, ensure that a recurring monitor operation failure -+ * defaults to either fencing the remote-node for recovery, or at least -+ * attempting to recover the the connection when fencing is disabled. */ -+ } else if (value == NULL && -+ is_rsc_baremetal_remote_node(action->rsc, data_set) && -+ safe_str_eq(action->task, CRMD_ACTION_STATUS) && -+ interval > 0) { -+ -+ if (is_set(data_set->flags, pe_flag_stonith_enabled)) { -+ action->on_fail = action_fail_reset_remote; -+ value = "fence baremetal remote node (default)"; -+ } else { -+ action->on_fail = action_fail_recover; -+ value = "recover baremetal remote node connection (default)"; -+ } -+ - } else if (value == NULL && safe_str_eq(action->task, CRMD_ACTION_STOP)) { - if (is_set(data_set->flags, pe_flag_stonith_enabled)) { - action->on_fail = action_fail_fence; -@@ -824,19 +854,6 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container, - pe_rsc_trace(action->rsc, "\t%s failure results in: %s", action->task, - role2text(action->fail_role)); - -- field = XML_LRM_ATTR_INTERVAL; -- value = g_hash_table_lookup(action->meta, field); -- if (value != NULL) { -- interval = crm_get_interval(value); -- if (interval > 0) { -- value_ms = crm_itoa(interval); -- g_hash_table_replace(action->meta, strdup(field), value_ms); -- -- } else { -- g_hash_table_remove(action->meta, field); -- } -- } -- - field = XML_OP_ATTR_START_DELAY; - value = g_hash_table_lookup(action->meta, field); - if (value != NULL) { -@@ -1939,6 +1956,25 @@ const char *rsc_printable_id(resource_t *rsc) - } - - gboolean -+is_rsc_baremetal_remote_node(resource_t *rsc, pe_working_set_t * data_set) -+{ -+ node_t *node; -+ -+ if (rsc == NULL) { -+ return FALSE; -+ } else if (rsc->is_remote_node == FALSE) { -+ return FALSE; -+ } -+ -+ node = pe_find_node(data_set->nodes, rsc->id); -+ if (node == NULL) { -+ return FALSE; -+ } -+ -+ return is_baremetal_remote_node(node); -+} -+ -+gboolean - is_baremetal_remote_node(node_t *node) - { - if (is_remote_node(node) && (node->details->remote_rsc == FALSE || node->details->remote_rsc->container == FALSE)) { -diff --git a/pengine/allocate.c b/pengine/allocate.c -index 45e2212..9c3cb60 100644 ---- a/pengine/allocate.c -+++ b/pengine/allocate.c -@@ -1191,7 +1191,10 @@ allocate_resources(pe_working_set_t * data_set) - continue; - } - pe_rsc_trace(rsc, "Allocating: %s", rsc->id); -- rsc->cmds->allocate(rsc, NULL, data_set); -+ /* for remote node connection resources, always prefer the partial migration -+ * target during resource allocation if the rsc is in the middle of a -+ * migration */ -+ rsc->cmds->allocate(rsc, rsc->partial_migration_target, data_set); - } - } - -@@ -1716,9 +1719,18 @@ apply_remote_node_ordering(pe_working_set_t *data_set) - node_t *cluster_node = remote_rsc->running_on ? remote_rsc->running_on->data : NULL; - - /* if the current cluster node a baremetal connection resource -- * is residing on is unclean, we can't process any operations on that -- * remote node until after it starts somewhere else. */ -- if (cluster_node && cluster_node->details->unclean == TRUE) { -+ * is residing on is unclean or went offline we can't process any -+ * operations on that remote node until after it starts somewhere else. */ -+ if (cluster_node == NULL || -+ cluster_node->details->unclean == TRUE || -+ cluster_node->details->online == FALSE) { -+ after_start = TRUE; -+ } else if (g_list_length(remote_rsc->running_on) > 1 && -+ remote_rsc->partial_migration_source && -+ remote_rsc->partial_migration_target) { -+ /* if we're caught in the middle of migrating a connection resource, -+ * then we have to wait until after the resource migrates before performing -+ * any actions. */ - after_start = TRUE; - } - } -diff --git a/pengine/native.c b/pengine/native.c -index 6d62010..62639d0 100644 ---- a/pengine/native.c -+++ b/pengine/native.c -@@ -1137,12 +1137,18 @@ handle_migration_actions(resource_t * rsc, node_t *current, node_t *chosen, pe_w - if (migrate_to) { - add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_SOURCE, current->details->uname); - add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_TARGET, chosen->details->uname); -- /* migrate_to takes place on the source node, but can -- * have an effect on the target node depending on how -- * the agent is written. Because of this, we have to maintain -- * a record that the migrate_to occurred incase the source node -- * loses membership while the migrate_to action is still in-flight. */ -- add_hash_param(migrate_to->meta, XML_OP_ATTR_PENDING, "true"); -+ -+ /* pcmk remote connections don't require pending to be recorded in cib. -+ * We can optimize cib writes by only setting PENDING for non pcmk remote -+ * connection resources */ -+ if (rsc->is_remote_node == FALSE) { -+ /* migrate_to takes place on the source node, but can -+ * have an effect on the target node depending on how -+ * the agent is written. Because of this, we have to maintain -+ * a record that the migrate_to occurred incase the source node -+ * loses membership while the migrate_to action is still in-flight. */ -+ add_hash_param(migrate_to->meta, XML_OP_ATTR_PENDING, "true"); -+ } - } - - if (migrate_from) { -diff --git a/pengine/regression.sh b/pengine/regression.sh -index aa03b18..3a244d7 100755 ---- a/pengine/regression.sh -+++ b/pengine/regression.sh -@@ -769,6 +769,11 @@ do_test remote-disable "Disable a baremetal remote-node" - do_test remote-orphaned "Properly shutdown orphaned connection resource" - do_test remote-recover "Recover connection resource after cluster-node fails." - do_test remote-stale-node-entry "Make sure we properly handle leftover remote-node entries in the node section" -+do_test remote-partial-migrate "Make sure partial migrations are handled before ops on the remote node." -+do_test remote-partial-migrate2 "Make sure partial migration target is prefered for remote connection." -+do_test remote-recover-fail "Make sure start failure causes fencing if rsc are active on remote." -+do_test remote-start-fail "Make sure a start failure does not result in fencing if no active resources are on remote." -+do_test remote-unclean2 "Make monitor failure always results in fencing, even if no rsc are active on remote." - - echo "" - do_test resource-discovery "Exercises resource-discovery location constraint option." -diff --git a/pengine/test10/remote-fence-unclean.exp b/pengine/test10/remote-fence-unclean.exp -index 9b1e327..b8c90f2 100644 ---- a/pengine/test10/remote-fence-unclean.exp -+++ b/pengine/test10/remote-fence-unclean.exp -@@ -8,7 +8,7 @@ - - - -- -+ - - - -@@ -17,7 +17,7 @@ - - - -- -+ - - - -@@ -176,13 +176,13 @@ - - - -- -+ - - - - - -- -+ - - - -diff --git a/pengine/test10/remote-move.exp b/pengine/test10/remote-move.exp -index 6724679..6287daa 100644 ---- a/pengine/test10/remote-move.exp -+++ b/pengine/test10/remote-move.exp -@@ -51,7 +51,7 @@ - - - -- -+ - - - -diff --git a/pengine/test10/remote-partial-migrate.dot b/pengine/test10/remote-partial-migrate.dot -new file mode 100644 -index 0000000..8d776dc ---- /dev/null -+++ b/pengine/test10/remote-partial-migrate.dot -@@ -0,0 +1,86 @@ -+ digraph "g" { -+"FAKE10_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE10_start_0 pcmk1" -> "FAKE10_monitor_10000 pcmk1" [ style = bold] -+"FAKE10_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE13_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE13_start_0 pcmk2" -> "FAKE13_monitor_10000 pcmk2" [ style = bold] -+"FAKE13_start_0 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE15_monitor_10000 pcmk3" [ style=bold color="green" fontcolor="black"] -+"FAKE15_start_0 pcmk3" -> "FAKE15_monitor_10000 pcmk3" [ style = bold] -+"FAKE15_start_0 pcmk3" [ style=bold color="green" fontcolor="black"] -+"FAKE16_monitor_10000 pcmk_remote3" [ style=bold color="green" fontcolor="black"] -+"FAKE16_start_0 pcmk_remote3" -> "FAKE16_monitor_10000 pcmk_remote3" [ style = bold] -+"FAKE16_start_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"] -+"FAKE16_stop_0 pcmk1" -> "FAKE16_start_0 pcmk_remote3" [ style = bold] -+"FAKE16_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"FAKE16_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE22_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE22_start_0 pcmk1" -> "FAKE22_monitor_10000 pcmk1" [ style = bold] -+"FAKE22_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE23_monitor_10000 pcmk_remote1" [ style=bold color="green" fontcolor="black"] -+"FAKE23_start_0 pcmk_remote1" -> "FAKE23_monitor_10000 pcmk_remote1" [ style = bold] -+"FAKE23_start_0 pcmk_remote1" [ style=bold color="green" fontcolor="black"] -+"FAKE23_stop_0 pcmk1" -> "FAKE23_start_0 pcmk_remote1" [ style = bold] -+"FAKE23_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"FAKE23_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE26_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE26_start_0 pcmk1" -> "FAKE26_monitor_10000 pcmk1" [ style = bold] -+"FAKE26_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE29_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE29_start_0 pcmk2" -> "FAKE29_monitor_10000 pcmk2" [ style = bold] -+"FAKE29_start_0 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE30_monitor_10000 pcmk_remote2" [ style=bold color="green" fontcolor="black"] -+"FAKE30_start_0 pcmk_remote2" -> "FAKE30_monitor_10000 pcmk_remote2" [ style = bold] -+"FAKE30_start_0 pcmk_remote2" [ style=bold color="green" fontcolor="black"] -+"FAKE30_stop_0 pcmk1" -> "FAKE30_start_0 pcmk_remote2" [ style = bold] -+"FAKE30_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"FAKE30_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE36_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE36_start_0 pcmk1" -> "FAKE36_monitor_10000 pcmk1" [ style = bold] -+"FAKE36_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE37_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE37_start_0 pcmk2" -> "FAKE37_monitor_10000 pcmk2" [ style = bold] -+"FAKE37_start_0 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE37_stop_0 pcmk1" -> "FAKE37_start_0 pcmk2" [ style = bold] -+"FAKE37_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"FAKE37_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE43_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE43_start_0 pcmk1" -> "FAKE43_monitor_10000 pcmk1" [ style = bold] -+"FAKE43_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE44_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE44_start_0 pcmk2" -> "FAKE44_monitor_10000 pcmk2" [ style = bold] -+"FAKE44_start_0 pcmk2" [ style=bold color="green" fontcolor="black"] -+"FAKE44_stop_0 pcmk1" -> "FAKE44_start_0 pcmk2" [ style = bold] -+"FAKE44_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"FAKE44_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE4_monitor_10000 pcmk_remote3" [ style=bold color="green" fontcolor="black"] -+"FAKE4_start_0 pcmk_remote3" -> "FAKE4_monitor_10000 pcmk_remote3" [ style = bold] -+"FAKE4_start_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"] -+"FAKE50_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE50_start_0 pcmk1" -> "FAKE50_monitor_10000 pcmk1" [ style = bold] -+"FAKE50_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE9_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE9_start_0 pcmk1" -> "FAKE9_monitor_10000 pcmk1" [ style = bold] -+"FAKE9_start_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"FAKE9_stop_0 pcmk_remote3" -> "FAKE9_start_0 pcmk1" [ style = bold] -+"FAKE9_stop_0 pcmk_remote3" -> "all_stopped" [ style = bold] -+"FAKE9_stop_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"] -+"all_stopped" [ style=bold color="green" fontcolor="orange"] -+"pcmk_remote3_migrate_from_0 pcmk2" -> "pcmk_remote3_start_0 pcmk2" [ style = bold] -+"pcmk_remote3_migrate_from_0 pcmk2" -> "pcmk_remote3_stop_0 pcmk1" [ style = bold] -+"pcmk_remote3_migrate_from_0 pcmk2" [ style=bold color="green" fontcolor="black"] -+"pcmk_remote3_monitor_60000 pcmk2" [ style=bold color="green" fontcolor="black"] -+"pcmk_remote3_start_0 pcmk2" -> "FAKE16_monitor_10000 pcmk_remote3" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" -> "FAKE16_start_0 pcmk_remote3" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" -> "FAKE4_monitor_10000 pcmk_remote3" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" -> "FAKE4_start_0 pcmk_remote3" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" -> "FAKE9_stop_0 pcmk_remote3" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" -> "pcmk_remote3_monitor_60000 pcmk2" [ style = bold] -+"pcmk_remote3_start_0 pcmk2" [ style=bold color="green" fontcolor="orange"] -+"pcmk_remote3_stop_0 pcmk1" -> "all_stopped" [ style = bold] -+"pcmk_remote3_stop_0 pcmk1" -> "pcmk_remote3_start_0 pcmk2" [ style = bold] -+"pcmk_remote3_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"] -+"probe_complete pcmk_remote1" [ style=bold color="green" fontcolor="black"] -+"probe_complete pcmk_remote2" [ style=bold color="green" fontcolor="black"] -+"probe_complete pcmk_remote4" [ style=bold color="green" fontcolor="black"] -+} -diff --git a/pengine/test10/remote-partial-migrate.exp b/pengine/test10/remote-partial-migrate.exp -new file mode 100644 -index 0000000..0a531df ---- /dev/null -+++ b/pengine/test10/remote-partial-migrate.exp -@@ -0,0 +1,553 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/pengine/test10/remote-partial-migrate.scores b/pengine/test10/remote-partial-migrate.scores -new file mode 100644 -index 0000000..a81602d ---- /dev/null -+++ b/pengine/test10/remote-partial-migrate.scores -@@ -0,0 +1,449 @@ -+Allocation scores: -+native_color: FAKE1 allocation score on pcmk1: 0 -+native_color: FAKE1 allocation score on pcmk2: 0 -+native_color: FAKE1 allocation score on pcmk3: 0 -+native_color: FAKE1 allocation score on pcmk_remote1: 0 -+native_color: FAKE1 allocation score on pcmk_remote2: 0 -+native_color: FAKE1 allocation score on pcmk_remote3: 0 -+native_color: FAKE1 allocation score on pcmk_remote4: 0 -+native_color: FAKE1 allocation score on pcmk_remote5: 0 -+native_color: FAKE10 allocation score on pcmk1: 0 -+native_color: FAKE10 allocation score on pcmk2: 0 -+native_color: FAKE10 allocation score on pcmk3: 0 -+native_color: FAKE10 allocation score on pcmk_remote1: 0 -+native_color: FAKE10 allocation score on pcmk_remote2: 0 -+native_color: FAKE10 allocation score on pcmk_remote3: 0 -+native_color: FAKE10 allocation score on pcmk_remote4: 0 -+native_color: FAKE10 allocation score on pcmk_remote5: 0 -+native_color: FAKE11 allocation score on pcmk1: 0 -+native_color: FAKE11 allocation score on pcmk2: 0 -+native_color: FAKE11 allocation score on pcmk3: 0 -+native_color: FAKE11 allocation score on pcmk_remote1: 0 -+native_color: FAKE11 allocation score on pcmk_remote2: 0 -+native_color: FAKE11 allocation score on pcmk_remote3: 0 -+native_color: FAKE11 allocation score on pcmk_remote4: 0 -+native_color: FAKE11 allocation score on pcmk_remote5: 0 -+native_color: FAKE12 allocation score on pcmk1: 0 -+native_color: FAKE12 allocation score on pcmk2: 0 -+native_color: FAKE12 allocation score on pcmk3: 0 -+native_color: FAKE12 allocation score on pcmk_remote1: 0 -+native_color: FAKE12 allocation score on pcmk_remote2: 0 -+native_color: FAKE12 allocation score on pcmk_remote3: 0 -+native_color: FAKE12 allocation score on pcmk_remote4: 0 -+native_color: FAKE12 allocation score on pcmk_remote5: 0 -+native_color: FAKE13 allocation score on pcmk1: 0 -+native_color: FAKE13 allocation score on pcmk2: 0 -+native_color: FAKE13 allocation score on pcmk3: 0 -+native_color: FAKE13 allocation score on pcmk_remote1: 0 -+native_color: FAKE13 allocation score on pcmk_remote2: 0 -+native_color: FAKE13 allocation score on pcmk_remote3: 0 -+native_color: FAKE13 allocation score on pcmk_remote4: 0 -+native_color: FAKE13 allocation score on pcmk_remote5: 0 -+native_color: FAKE14 allocation score on pcmk1: 0 -+native_color: FAKE14 allocation score on pcmk2: 0 -+native_color: FAKE14 allocation score on pcmk3: 0 -+native_color: FAKE14 allocation score on pcmk_remote1: 0 -+native_color: FAKE14 allocation score on pcmk_remote2: 0 -+native_color: FAKE14 allocation score on pcmk_remote3: 0 -+native_color: FAKE14 allocation score on pcmk_remote4: 0 -+native_color: FAKE14 allocation score on pcmk_remote5: 0 -+native_color: FAKE15 allocation score on pcmk1: 0 -+native_color: FAKE15 allocation score on pcmk2: 0 -+native_color: FAKE15 allocation score on pcmk3: 0 -+native_color: FAKE15 allocation score on pcmk_remote1: 0 -+native_color: FAKE15 allocation score on pcmk_remote2: 0 -+native_color: FAKE15 allocation score on pcmk_remote3: 0 -+native_color: FAKE15 allocation score on pcmk_remote4: 0 -+native_color: FAKE15 allocation score on pcmk_remote5: 0 -+native_color: FAKE16 allocation score on pcmk1: 0 -+native_color: FAKE16 allocation score on pcmk2: 0 -+native_color: FAKE16 allocation score on pcmk3: 0 -+native_color: FAKE16 allocation score on pcmk_remote1: 0 -+native_color: FAKE16 allocation score on pcmk_remote2: 0 -+native_color: FAKE16 allocation score on pcmk_remote3: 0 -+native_color: FAKE16 allocation score on pcmk_remote4: 0 -+native_color: FAKE16 allocation score on pcmk_remote5: 0 -+native_color: FAKE17 allocation score on pcmk1: 0 -+native_color: FAKE17 allocation score on pcmk2: 0 -+native_color: FAKE17 allocation score on pcmk3: 0 -+native_color: FAKE17 allocation score on pcmk_remote1: 0 -+native_color: FAKE17 allocation score on pcmk_remote2: 0 -+native_color: FAKE17 allocation score on pcmk_remote3: 0 -+native_color: FAKE17 allocation score on pcmk_remote4: 0 -+native_color: FAKE17 allocation score on pcmk_remote5: 0 -+native_color: FAKE18 allocation score on pcmk1: 0 -+native_color: FAKE18 allocation score on pcmk2: 0 -+native_color: FAKE18 allocation score on pcmk3: 0 -+native_color: FAKE18 allocation score on pcmk_remote1: 0 -+native_color: FAKE18 allocation score on pcmk_remote2: 0 -+native_color: FAKE18 allocation score on pcmk_remote3: 0 -+native_color: FAKE18 allocation score on pcmk_remote4: 0 -+native_color: FAKE18 allocation score on pcmk_remote5: 0 -+native_color: FAKE19 allocation score on pcmk1: 0 -+native_color: FAKE19 allocation score on pcmk2: 0 -+native_color: FAKE19 allocation score on pcmk3: 0 -+native_color: FAKE19 allocation score on pcmk_remote1: 0 -+native_color: FAKE19 allocation score on pcmk_remote2: 0 -+native_color: FAKE19 allocation score on pcmk_remote3: 0 -+native_color: FAKE19 allocation score on pcmk_remote4: 0 -+native_color: FAKE19 allocation score on pcmk_remote5: 0 -+native_color: FAKE2 allocation score on pcmk1: 0 -+native_color: FAKE2 allocation score on pcmk2: 0 -+native_color: FAKE2 allocation score on pcmk3: 0 -+native_color: FAKE2 allocation score on pcmk_remote1: 0 -+native_color: FAKE2 allocation score on pcmk_remote2: 0 -+native_color: FAKE2 allocation score on pcmk_remote3: 0 -+native_color: FAKE2 allocation score on pcmk_remote4: 0 -+native_color: FAKE2 allocation score on pcmk_remote5: 0 -+native_color: FAKE20 allocation score on pcmk1: 0 -+native_color: FAKE20 allocation score on pcmk2: 0 -+native_color: FAKE20 allocation score on pcmk3: 0 -+native_color: FAKE20 allocation score on pcmk_remote1: 0 -+native_color: FAKE20 allocation score on pcmk_remote2: 0 -+native_color: FAKE20 allocation score on pcmk_remote3: 0 -+native_color: FAKE20 allocation score on pcmk_remote4: 0 -+native_color: FAKE20 allocation score on pcmk_remote5: 0 -+native_color: FAKE21 allocation score on pcmk1: 0 -+native_color: FAKE21 allocation score on pcmk2: 0 -+native_color: FAKE21 allocation score on pcmk3: 0 -+native_color: FAKE21 allocation score on pcmk_remote1: 0 -+native_color: FAKE21 allocation score on pcmk_remote2: 0 -+native_color: FAKE21 allocation score on pcmk_remote3: 0 -+native_color: FAKE21 allocation score on pcmk_remote4: 0 -+native_color: FAKE21 allocation score on pcmk_remote5: 0 -+native_color: FAKE22 allocation score on pcmk1: 0 -+native_color: FAKE22 allocation score on pcmk2: 0 -+native_color: FAKE22 allocation score on pcmk3: 0 -+native_color: FAKE22 allocation score on pcmk_remote1: 0 -+native_color: FAKE22 allocation score on pcmk_remote2: 0 -+native_color: FAKE22 allocation score on pcmk_remote3: 0 -+native_color: FAKE22 allocation score on pcmk_remote4: 0 -+native_color: FAKE22 allocation score on pcmk_remote5: 0 -+native_color: FAKE23 allocation score on pcmk1: 0 -+native_color: FAKE23 allocation score on pcmk2: 0 -+native_color: FAKE23 allocation score on pcmk3: 0 -+native_color: FAKE23 allocation score on pcmk_remote1: 0 -+native_color: FAKE23 allocation score on pcmk_remote2: 0 -+native_color: FAKE23 allocation score on pcmk_remote3: 0 -+native_color: FAKE23 allocation score on pcmk_remote4: 0 -+native_color: FAKE23 allocation score on pcmk_remote5: 0 -+native_color: FAKE24 allocation score on pcmk1: 0 -+native_color: FAKE24 allocation score on pcmk2: 0 -+native_color: FAKE24 allocation score on pcmk3: 0 -+native_color: FAKE24 allocation score on pcmk_remote1: 0 -+native_color: FAKE24 allocation score on pcmk_remote2: 0 -+native_color: FAKE24 allocation score on pcmk_remote3: 0 -+native_color: FAKE24 allocation score on pcmk_remote4: 0 -+native_color: FAKE24 allocation score on pcmk_remote5: 0 -+native_color: FAKE25 allocation score on pcmk1: 0 -+native_color: FAKE25 allocation score on pcmk2: 0 -+native_color: FAKE25 allocation score on pcmk3: 0 -+native_color: FAKE25 allocation score on pcmk_remote1: 0 -+native_color: FAKE25 allocation score on pcmk_remote2: 0 -+native_color: FAKE25 allocation score on pcmk_remote3: 0 -+native_color: FAKE25 allocation score on pcmk_remote4: 0 -+native_color: FAKE25 allocation score on pcmk_remote5: 0 -+native_color: FAKE26 allocation score on pcmk1: 0 -+native_color: FAKE26 allocation score on pcmk2: 0 -+native_color: FAKE26 allocation score on pcmk3: 0 -+native_color: FAKE26 allocation score on pcmk_remote1: 0 -+native_color: FAKE26 allocation score on pcmk_remote2: 0 -+native_color: FAKE26 allocation score on pcmk_remote3: 0 -+native_color: FAKE26 allocation score on pcmk_remote4: 0 -+native_color: FAKE26 allocation score on pcmk_remote5: 0 -+native_color: FAKE27 allocation score on pcmk1: 0 -+native_color: FAKE27 allocation score on pcmk2: 0 -+native_color: FAKE27 allocation score on pcmk3: 0 -+native_color: FAKE27 allocation score on pcmk_remote1: 0 -+native_color: FAKE27 allocation score on pcmk_remote2: 0 -+native_color: FAKE27 allocation score on pcmk_remote3: 0 -+native_color: FAKE27 allocation score on pcmk_remote4: 0 -+native_color: FAKE27 allocation score on pcmk_remote5: 0 -+native_color: FAKE28 allocation score on pcmk1: 0 -+native_color: FAKE28 allocation score on pcmk2: 0 -+native_color: FAKE28 allocation score on pcmk3: 0 -+native_color: FAKE28 allocation score on pcmk_remote1: 0 -+native_color: FAKE28 allocation score on pcmk_remote2: 0 -+native_color: FAKE28 allocation score on pcmk_remote3: 0 -+native_color: FAKE28 allocation score on pcmk_remote4: 0 -+native_color: FAKE28 allocation score on pcmk_remote5: 0 -+native_color: FAKE29 allocation score on pcmk1: 0 -+native_color: FAKE29 allocation score on pcmk2: 0 -+native_color: FAKE29 allocation score on pcmk3: 0 -+native_color: FAKE29 allocation score on pcmk_remote1: 0 -+native_color: FAKE29 allocation score on pcmk_remote2: 0 -+native_color: FAKE29 allocation score on pcmk_remote3: 0 -+native_color: FAKE29 allocation score on pcmk_remote4: 0 -+native_color: FAKE29 allocation score on pcmk_remote5: 0 -+native_color: FAKE3 allocation score on pcmk1: 0 -+native_color: FAKE3 allocation score on pcmk2: 0 -+native_color: FAKE3 allocation score on pcmk3: 0 -+native_color: FAKE3 allocation score on pcmk_remote1: 0 -+native_color: FAKE3 allocation score on pcmk_remote2: 0 -+native_color: FAKE3 allocation score on pcmk_remote3: 0 -+native_color: FAKE3 allocation score on pcmk_remote4: 0 -+native_color: FAKE3 allocation score on pcmk_remote5: 0 -+native_color: FAKE30 allocation score on pcmk1: 0 -+native_color: FAKE30 allocation score on pcmk2: 0 -+native_color: FAKE30 allocation score on pcmk3: 0 -+native_color: FAKE30 allocation score on pcmk_remote1: 0 -+native_color: FAKE30 allocation score on pcmk_remote2: 0 -+native_color: FAKE30 allocation score on pcmk_remote3: 0 -+native_color: FAKE30 allocation score on pcmk_remote4: 0 -+native_color: FAKE30 allocation score on pcmk_remote5: 0 -+native_color: FAKE31 allocation score on pcmk1: 0 -+native_color: FAKE31 allocation score on pcmk2: 0 -+native_color: FAKE31 allocation score on pcmk3: 0 -+native_color: FAKE31 allocation score on pcmk_remote1: 0 -+native_color: FAKE31 allocation score on pcmk_remote2: 0 -+native_color: FAKE31 allocation score on pcmk_remote3: 0 -+native_color: FAKE31 allocation score on pcmk_remote4: 0 -+native_color: FAKE31 allocation score on pcmk_remote5: 0 -+native_color: FAKE32 allocation score on pcmk1: 0 -+native_color: FAKE32 allocation score on pcmk2: 0 -+native_color: FAKE32 allocation score on pcmk3: 0 -+native_color: FAKE32 allocation score on pcmk_remote1: 0 -+native_color: FAKE32 allocation score on pcmk_remote2: 0 -+native_color: FAKE32 allocation score on pcmk_remote3: 0 -+native_color: FAKE32 allocation score on pcmk_remote4: 0 -+native_color: FAKE32 allocation score on pcmk_remote5: 0 -+native_color: FAKE33 allocation score on pcmk1: 0 -+native_color: FAKE33 allocation score on pcmk2: 0 -+native_color: FAKE33 allocation score on pcmk3: 0 -+native_color: FAKE33 allocation score on pcmk_remote1: 0 -+native_color: FAKE33 allocation score on pcmk_remote2: 0 -+native_color: FAKE33 allocation score on pcmk_remote3: 0 -+native_color: FAKE33 allocation score on pcmk_remote4: 0 -+native_color: FAKE33 allocation score on pcmk_remote5: 0 -+native_color: FAKE34 allocation score on pcmk1: 0 -+native_color: FAKE34 allocation score on pcmk2: 0 -+native_color: FAKE34 allocation score on pcmk3: 0 -+native_color: FAKE34 allocation score on pcmk_remote1: 0 -+native_color: FAKE34 allocation score on pcmk_remote2: 0 -+native_color: FAKE34 allocation score on pcmk_remote3: 0 -+native_color: FAKE34 allocation score on pcmk_remote4: 0 -+native_color: FAKE34 allocation score on pcmk_remote5: 0 -+native_color: FAKE35 allocation score on pcmk1: 0 -+native_color: FAKE35 allocation score on pcmk2: 0 -+native_color: FAKE35 allocation score on pcmk3: 0 -+native_color: FAKE35 allocation score on pcmk_remote1: 0 -+native_color: FAKE35 allocation score on pcmk_remote2: 0 -+native_color: FAKE35 allocation score on pcmk_remote3: 0 -+native_color: FAKE35 allocation score on pcmk_remote4: 0 -+native_color: FAKE35 allocation score on pcmk_remote5: 0 -+native_color: FAKE36 allocation score on pcmk1: 0 -+native_color: FAKE36 allocation score on pcmk2: 0 -+native_color: FAKE36 allocation score on pcmk3: 0 -+native_color: FAKE36 allocation score on pcmk_remote1: 0 -+native_color: FAKE36 allocation score on pcmk_remote2: 0 -+native_color: FAKE36 allocation score on pcmk_remote3: 0 -+native_color: FAKE36 allocation score on pcmk_remote4: 0 -+native_color: FAKE36 allocation score on pcmk_remote5: 0 -+native_color: FAKE37 allocation score on pcmk1: 0 -+native_color: FAKE37 allocation score on pcmk2: 0 -+native_color: FAKE37 allocation score on pcmk3: 0 -+native_color: FAKE37 allocation score on pcmk_remote1: 0 -+native_color: FAKE37 allocation score on pcmk_remote2: 0 -+native_color: FAKE37 allocation score on pcmk_remote3: 0 -+native_color: FAKE37 allocation score on pcmk_remote4: 0 -+native_color: FAKE37 allocation score on pcmk_remote5: 0 -+native_color: FAKE38 allocation score on pcmk1: 0 -+native_color: FAKE38 allocation score on pcmk2: 0 -+native_color: FAKE38 allocation score on pcmk3: 0 -+native_color: FAKE38 allocation score on pcmk_remote1: 0 -+native_color: FAKE38 allocation score on pcmk_remote2: 0 -+native_color: FAKE38 allocation score on pcmk_remote3: 0 -+native_color: FAKE38 allocation score on pcmk_remote4: 0 -+native_color: FAKE38 allocation score on pcmk_remote5: 0 -+native_color: FAKE39 allocation score on pcmk1: 0 -+native_color: FAKE39 allocation score on pcmk2: 0 -+native_color: FAKE39 allocation score on pcmk3: 0 -+native_color: FAKE39 allocation score on pcmk_remote1: 0 -+native_color: FAKE39 allocation score on pcmk_remote2: 0 -+native_color: FAKE39 allocation score on pcmk_remote3: 0 -+native_color: FAKE39 allocation score on pcmk_remote4: 0 -+native_color: FAKE39 allocation score on pcmk_remote5: 0 -+native_color: FAKE4 allocation score on pcmk1: 0 -+native_color: FAKE4 allocation score on pcmk2: 0 -+native_color: FAKE4 allocation score on pcmk3: 0 -+native_color: FAKE4 allocation score on pcmk_remote1: 0 -+native_color: FAKE4 allocation score on pcmk_remote2: 0 -+native_color: FAKE4 allocation score on pcmk_remote3: 0 -+native_color: FAKE4 allocation score on pcmk_remote4: 0 -+native_color: FAKE4 allocation score on pcmk_remote5: 0 -+native_color: FAKE40 allocation score on pcmk1: 0 -+native_color: FAKE40 allocation score on pcmk2: 0 -+native_color: FAKE40 allocation score on pcmk3: 0 -+native_color: FAKE40 allocation score on pcmk_remote1: 0 -+native_color: FAKE40 allocation score on pcmk_remote2: 0 -+native_color: FAKE40 allocation score on pcmk_remote3: 0 -+native_color: FAKE40 allocation score on pcmk_remote4: 0 -+native_color: FAKE40 allocation score on pcmk_remote5: 0 -+native_color: FAKE41 allocation score on pcmk1: 0 -+native_color: FAKE41 allocation score on pcmk2: 0 -+native_color: FAKE41 allocation score on pcmk3: 0 -+native_color: FAKE41 allocation score on pcmk_remote1: 0 -+native_color: FAKE41 allocation score on pcmk_remote2: 0 -+native_color: FAKE41 allocation score on pcmk_remote3: 0 -+native_color: FAKE41 allocation score on pcmk_remote4: 0 -+native_color: FAKE41 allocation score on pcmk_remote5: 0 -+native_color: FAKE42 allocation score on pcmk1: 0 -+native_color: FAKE42 allocation score on pcmk2: 0 -+native_color: FAKE42 allocation score on pcmk3: 0 -+native_color: FAKE42 allocation score on pcmk_remote1: 0 -+native_color: FAKE42 allocation score on pcmk_remote2: 0 -+native_color: FAKE42 allocation score on pcmk_remote3: 0 -+native_color: FAKE42 allocation score on pcmk_remote4: 0 -+native_color: FAKE42 allocation score on pcmk_remote5: 0 -+native_color: FAKE43 allocation score on pcmk1: 0 -+native_color: FAKE43 allocation score on pcmk2: 0 -+native_color: FAKE43 allocation score on pcmk3: 0 -+native_color: FAKE43 allocation score on pcmk_remote1: 0 -+native_color: FAKE43 allocation score on pcmk_remote2: 0 -+native_color: FAKE43 allocation score on pcmk_remote3: 0 -+native_color: FAKE43 allocation score on pcmk_remote4: 0 -+native_color: FAKE43 allocation score on pcmk_remote5: 0 -+native_color: FAKE44 allocation score on pcmk1: 0 -+native_color: FAKE44 allocation score on pcmk2: 0 -+native_color: FAKE44 allocation score on pcmk3: 0 -+native_color: FAKE44 allocation score on pcmk_remote1: 0 -+native_color: FAKE44 allocation score on pcmk_remote2: 0 -+native_color: FAKE44 allocation score on pcmk_remote3: 0 -+native_color: FAKE44 allocation score on pcmk_remote4: 0 -+native_color: FAKE44 allocation score on pcmk_remote5: 0 -+native_color: FAKE45 allocation score on pcmk1: 0 -+native_color: FAKE45 allocation score on pcmk2: 0 -+native_color: FAKE45 allocation score on pcmk3: 0 -+native_color: FAKE45 allocation score on pcmk_remote1: 0 -+native_color: FAKE45 allocation score on pcmk_remote2: 0 -+native_color: FAKE45 allocation score on pcmk_remote3: 0 -+native_color: FAKE45 allocation score on pcmk_remote4: 0 -+native_color: FAKE45 allocation score on pcmk_remote5: 0 -+native_color: FAKE46 allocation score on pcmk1: 0 -+native_color: FAKE46 allocation score on pcmk2: 0 -+native_color: FAKE46 allocation score on pcmk3: 0 -+native_color: FAKE46 allocation score on pcmk_remote1: 0 -+native_color: FAKE46 allocation score on pcmk_remote2: 0 -+native_color: FAKE46 allocation score on pcmk_remote3: 0 -+native_color: FAKE46 allocation score on pcmk_remote4: 0 -+native_color: FAKE46 allocation score on pcmk_remote5: 0 -+native_color: FAKE47 allocation score on pcmk1: 0 -+native_color: FAKE47 allocation score on pcmk2: 0 -+native_color: FAKE47 allocation score on pcmk3: 0 -+native_color: FAKE47 allocation score on pcmk_remote1: 0 -+native_color: FAKE47 allocation score on pcmk_remote2: 0 -+native_color: FAKE47 allocation score on pcmk_remote3: 0 -+native_color: FAKE47 allocation score on pcmk_remote4: 0 -+native_color: FAKE47 allocation score on pcmk_remote5: 0 -+native_color: FAKE48 allocation score on pcmk1: 0 -+native_color: FAKE48 allocation score on pcmk2: 0 -+native_color: FAKE48 allocation score on pcmk3: 0 -+native_color: FAKE48 allocation score on pcmk_remote1: 0 -+native_color: FAKE48 allocation score on pcmk_remote2: 0 -+native_color: FAKE48 allocation score on pcmk_remote3: 0 -+native_color: FAKE48 allocation score on pcmk_remote4: 0 -+native_color: FAKE48 allocation score on pcmk_remote5: 0 -+native_color: FAKE49 allocation score on pcmk1: 0 -+native_color: FAKE49 allocation score on pcmk2: 0 -+native_color: FAKE49 allocation score on pcmk3: 0 -+native_color: FAKE49 allocation score on pcmk_remote1: 0 -+native_color: FAKE49 allocation score on pcmk_remote2: 0 -+native_color: FAKE49 allocation score on pcmk_remote3: 0 -+native_color: FAKE49 allocation score on pcmk_remote4: 0 -+native_color: FAKE49 allocation score on pcmk_remote5: 0 -+native_color: FAKE5 allocation score on pcmk1: 0 -+native_color: FAKE5 allocation score on pcmk2: 0 -+native_color: FAKE5 allocation score on pcmk3: 0 -+native_color: FAKE5 allocation score on pcmk_remote1: 0 -+native_color: FAKE5 allocation score on pcmk_remote2: 0 -+native_color: FAKE5 allocation score on pcmk_remote3: 0 -+native_color: FAKE5 allocation score on pcmk_remote4: 0 -+native_color: FAKE5 allocation score on pcmk_remote5: 0 -+native_color: FAKE50 allocation score on pcmk1: 0 -+native_color: FAKE50 allocation score on pcmk2: 0 -+native_color: FAKE50 allocation score on pcmk3: 0 -+native_color: FAKE50 allocation score on pcmk_remote1: 0 -+native_color: FAKE50 allocation score on pcmk_remote2: 0 -+native_color: FAKE50 allocation score on pcmk_remote3: 0 -+native_color: FAKE50 allocation score on pcmk_remote4: 0 -+native_color: FAKE50 allocation score on pcmk_remote5: 0 -+native_color: FAKE6 allocation score on pcmk1: 0 -+native_color: FAKE6 allocation score on pcmk2: 0 -+native_color: FAKE6 allocation score on pcmk3: 0 -+native_color: FAKE6 allocation score on pcmk_remote1: 0 -+native_color: FAKE6 allocation score on pcmk_remote2: 0 -+native_color: FAKE6 allocation score on pcmk_remote3: 0 -+native_color: FAKE6 allocation score on pcmk_remote4: 0 -+native_color: FAKE6 allocation score on pcmk_remote5: 0 -+native_color: FAKE7 allocation score on pcmk1: 0 -+native_color: FAKE7 allocation score on pcmk2: 0 -+native_color: FAKE7 allocation score on pcmk3: 0 -+native_color: FAKE7 allocation score on pcmk_remote1: 0 -+native_color: FAKE7 allocation score on pcmk_remote2: 0 -+native_color: FAKE7 allocation score on pcmk_remote3: 0 -+native_color: FAKE7 allocation score on pcmk_remote4: 0 -+native_color: FAKE7 allocation score on pcmk_remote5: 0 -+native_color: FAKE8 allocation score on pcmk1: 0 -+native_color: FAKE8 allocation score on pcmk2: 0 -+native_color: FAKE8 allocation score on pcmk3: 0 -+native_color: FAKE8 allocation score on pcmk_remote1: 0 -+native_color: FAKE8 allocation score on pcmk_remote2: 0 -+native_color: FAKE8 allocation score on pcmk_remote3: 0 -+native_color: FAKE8 allocation score on pcmk_remote4: 0 -+native_color: FAKE8 allocation score on pcmk_remote5: 0 -+native_color: FAKE9 allocation score on pcmk1: 0 -+native_color: FAKE9 allocation score on pcmk2: -INFINITY -+native_color: FAKE9 allocation score on pcmk3: 0 -+native_color: FAKE9 allocation score on pcmk_remote1: 0 -+native_color: FAKE9 allocation score on pcmk_remote2: 0 -+native_color: FAKE9 allocation score on pcmk_remote3: 0 -+native_color: FAKE9 allocation score on pcmk_remote4: 0 -+native_color: FAKE9 allocation score on pcmk_remote5: 0 -+native_color: pcmk_remote1 allocation score on pcmk1: 0 -+native_color: pcmk_remote1 allocation score on pcmk2: 0 -+native_color: pcmk_remote1 allocation score on pcmk3: 0 -+native_color: pcmk_remote1 allocation score on pcmk_remote1: -INFINITY -+native_color: pcmk_remote1 allocation score on pcmk_remote2: -INFINITY -+native_color: pcmk_remote1 allocation score on pcmk_remote3: -INFINITY -+native_color: pcmk_remote1 allocation score on pcmk_remote4: -INFINITY -+native_color: pcmk_remote1 allocation score on pcmk_remote5: -INFINITY -+native_color: pcmk_remote2 allocation score on pcmk1: 0 -+native_color: pcmk_remote2 allocation score on pcmk2: 0 -+native_color: pcmk_remote2 allocation score on pcmk3: 0 -+native_color: pcmk_remote2 allocation score on pcmk_remote1: -INFINITY -+native_color: pcmk_remote2 allocation score on pcmk_remote2: -INFINITY -+native_color: pcmk_remote2 allocation score on pcmk_remote3: -INFINITY -+native_color: pcmk_remote2 allocation score on pcmk_remote4: -INFINITY -+native_color: pcmk_remote2 allocation score on pcmk_remote5: -INFINITY -+native_color: pcmk_remote3 allocation score on pcmk1: 0 -+native_color: pcmk_remote3 allocation score on pcmk2: 0 -+native_color: pcmk_remote3 allocation score on pcmk3: 0 -+native_color: pcmk_remote3 allocation score on pcmk_remote1: -INFINITY -+native_color: pcmk_remote3 allocation score on pcmk_remote2: -INFINITY -+native_color: pcmk_remote3 allocation score on pcmk_remote3: -INFINITY -+native_color: pcmk_remote3 allocation score on pcmk_remote4: -INFINITY -+native_color: pcmk_remote3 allocation score on pcmk_remote5: -INFINITY -+native_color: pcmk_remote4 allocation score on pcmk1: 0 -+native_color: pcmk_remote4 allocation score on pcmk2: 0 -+native_color: pcmk_remote4 allocation score on pcmk3: 0 -+native_color: pcmk_remote4 allocation score on pcmk_remote1: -INFINITY -+native_color: pcmk_remote4 allocation score on pcmk_remote2: -INFINITY -+native_color: pcmk_remote4 allocation score on pcmk_remote3: -INFINITY -+native_color: pcmk_remote4 allocation score on pcmk_remote4: -INFINITY -+native_color: pcmk_remote4 allocation score on pcmk_remote5: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk1: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk2: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk3: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk_remote1: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk_remote2: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk_remote3: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk_remote4: -INFINITY -+native_color: pcmk_remote5 allocation score on pcmk_remote5: -INFINITY -+native_color: shooter allocation score on pcmk1: 0 -+native_color: shooter allocation score on pcmk2: 0 -+native_color: shooter allocation score on pcmk3: 0 -+native_color: shooter allocation score on pcmk_remote1: -INFINITY -+native_color: shooter allocation score on pcmk_remote2: -INFINITY -+native_color: shooter allocation score on pcmk_remote3: -INFINITY -+native_color: shooter allocation score on pcmk_remote4: -INFINITY -+native_color: shooter allocation score on pcmk_remote5: -INFINITY -diff --git a/pengine/test10/remote-partial-migrate.summary b/pengine/test10/remote-partial-migrate.summary -new file mode 100644 -index 0000000..e8abf92 ---- /dev/null -+++ b/pengine/test10/remote-partial-migrate.summary -@@ -0,0 +1,189 @@ -+ -+Current cluster status: -+Online: [ pcmk1 pcmk2 pcmk3 ] -+RemoteOnline: [ pcmk_remote1 pcmk_remote2 pcmk_remote3 pcmk_remote4 ] -+RemoteOFFLINE: [ pcmk_remote5 ] -+ -+ shooter (stonith:fence_docker_cts): Started pcmk2 -+ pcmk_remote1 (ocf::pacemaker:remote): Started pcmk1 -+ pcmk_remote2 (ocf::pacemaker:remote): Started pcmk3 -+ pcmk_remote3 (ocf::pacemaker:remote): Started [ pcmk2 pcmk1 ] -+ pcmk_remote4 (ocf::pacemaker:remote): Started pcmk3 -+ pcmk_remote5 (ocf::pacemaker:remote): Stopped -+ FAKE1 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE2 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE3 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE4 (ocf::heartbeat:Dummy): Stopped -+ FAKE5 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE6 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE7 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE8 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE9 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE10 (ocf::heartbeat:Dummy): Stopped -+ FAKE11 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE12 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE13 (ocf::heartbeat:Dummy): Stopped -+ FAKE14 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE15 (ocf::heartbeat:Dummy): Stopped -+ FAKE16 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE17 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE18 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE19 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE20 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE21 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE22 (ocf::heartbeat:Dummy): Stopped -+ FAKE23 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE24 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE25 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE26 (ocf::heartbeat:Dummy): Stopped -+ FAKE27 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE28 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE29 (ocf::heartbeat:Dummy): Stopped -+ FAKE30 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE31 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE32 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE33 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE34 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE35 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE36 (ocf::heartbeat:Dummy): Stopped -+ FAKE37 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE38 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE39 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE40 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE41 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE42 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE43 (ocf::heartbeat:Dummy): Stopped -+ FAKE44 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE45 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE46 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE47 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE48 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE49 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE50 (ocf::heartbeat:Dummy): Stopped -+ -+Transition Summary: -+ * Migrate pcmk_remote3 (Started pcmk1 -> pcmk2) -+ * Start FAKE4 (pcmk_remote3) -+ * Move FAKE9 (Started pcmk_remote3 -> pcmk1) -+ * Start FAKE10 (pcmk1) -+ * Start FAKE13 (pcmk2) -+ * Start FAKE15 (pcmk3) -+ * Move FAKE16 (Started pcmk1 -> pcmk_remote3) -+ * Start FAKE22 (pcmk1) -+ * Move FAKE23 (Started pcmk1 -> pcmk_remote1) -+ * Start FAKE26 (pcmk1) -+ * Start FAKE29 (pcmk2) -+ * Move FAKE30 (Started pcmk1 -> pcmk_remote2) -+ * Start FAKE36 (pcmk1) -+ * Move FAKE37 (Started pcmk1 -> pcmk2) -+ * Start FAKE43 (pcmk1) -+ * Move FAKE44 (Started pcmk1 -> pcmk2) -+ * Start FAKE50 (pcmk1) -+ -+Executing cluster transition: -+ * Resource action: pcmk_remote3 migrate_from on pcmk2 -+ * Resource action: pcmk_remote3 stop on pcmk1 -+ * Resource action: FAKE10 start on pcmk1 -+ * Resource action: FAKE13 start on pcmk2 -+ * Resource action: FAKE15 start on pcmk3 -+ * Resource action: FAKE16 stop on pcmk1 -+ * Resource action: FAKE22 start on pcmk1 -+ * Resource action: FAKE23 stop on pcmk1 -+ * Resource action: FAKE26 start on pcmk1 -+ * Resource action: FAKE29 start on pcmk2 -+ * Resource action: FAKE30 stop on pcmk1 -+ * Resource action: FAKE36 start on pcmk1 -+ * Resource action: FAKE37 stop on pcmk1 -+ * Resource action: FAKE43 start on pcmk1 -+ * Resource action: FAKE44 stop on pcmk1 -+ * Resource action: FAKE50 start on pcmk1 -+ * Pseudo action: pcmk_remote3_start_0 -+ * Resource action: FAKE4 start on pcmk_remote3 -+ * Resource action: FAKE9 stop on pcmk_remote3 -+ * Resource action: FAKE10 monitor=10000 on pcmk1 -+ * Resource action: FAKE13 monitor=10000 on pcmk2 -+ * Resource action: FAKE15 monitor=10000 on pcmk3 -+ * Resource action: FAKE16 start on pcmk_remote3 -+ * Resource action: FAKE22 monitor=10000 on pcmk1 -+ * Resource action: FAKE23 start on pcmk_remote1 -+ * Resource action: FAKE26 monitor=10000 on pcmk1 -+ * Resource action: FAKE29 monitor=10000 on pcmk2 -+ * Resource action: FAKE30 start on pcmk_remote2 -+ * Resource action: FAKE36 monitor=10000 on pcmk1 -+ * Resource action: FAKE37 start on pcmk2 -+ * Resource action: FAKE43 monitor=10000 on pcmk1 -+ * Resource action: FAKE44 start on pcmk2 -+ * Resource action: FAKE50 monitor=10000 on pcmk1 -+ * Pseudo action: all_stopped -+ * Resource action: pcmk_remote3 monitor=60000 on pcmk2 -+ * Resource action: FAKE4 monitor=10000 on pcmk_remote3 -+ * Resource action: FAKE9 start on pcmk1 -+ * Resource action: FAKE16 monitor=10000 on pcmk_remote3 -+ * Resource action: FAKE23 monitor=10000 on pcmk_remote1 -+ * Resource action: FAKE30 monitor=10000 on pcmk_remote2 -+ * Resource action: FAKE37 monitor=10000 on pcmk2 -+ * Resource action: FAKE44 monitor=10000 on pcmk2 -+ * Resource action: FAKE9 monitor=10000 on pcmk1 -+ -+Revised cluster status: -+Online: [ pcmk1 pcmk2 pcmk3 ] -+RemoteOnline: [ pcmk_remote1 pcmk_remote2 pcmk_remote3 pcmk_remote4 ] -+RemoteOFFLINE: [ pcmk_remote5 ] -+ -+ shooter (stonith:fence_docker_cts): Started pcmk2 -+ pcmk_remote1 (ocf::pacemaker:remote): Started pcmk1 -+ pcmk_remote2 (ocf::pacemaker:remote): Started pcmk3 -+ pcmk_remote3 (ocf::pacemaker:remote): Started pcmk2 -+ pcmk_remote4 (ocf::pacemaker:remote): Started pcmk3 -+ pcmk_remote5 (ocf::pacemaker:remote): Stopped -+ FAKE1 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE2 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE3 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE4 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE5 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE6 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE7 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE8 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE9 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE10 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE11 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE12 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE13 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE14 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE15 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE16 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE17 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE18 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE19 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE20 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE21 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE22 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE23 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE24 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE25 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE26 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE27 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE28 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE29 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE30 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE31 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE32 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE33 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE34 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE35 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE36 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE37 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE38 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE39 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE40 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE41 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE42 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE43 (ocf::heartbeat:Dummy): Started pcmk1 -+ FAKE44 (ocf::heartbeat:Dummy): Started pcmk2 -+ FAKE45 (ocf::heartbeat:Dummy): Started pcmk3 -+ FAKE46 (ocf::heartbeat:Dummy): Started pcmk_remote1 -+ FAKE47 (ocf::heartbeat:Dummy): Started pcmk_remote2 -+ FAKE48 (ocf::heartbeat:Dummy): Started pcmk_remote3 -+ FAKE49 (ocf::heartbeat:Dummy): Started pcmk_remote4 -+ FAKE50 (ocf::heartbeat:Dummy): Started pcmk1 -+ -diff --git a/pengine/test10/remote-partial-migrate.xml b/pengine/test10/remote-partial-migrate.xml -new file mode 100644 -index 0000000..e71f029 ---- /dev/null -+++ b/pengine/test10/remote-partial-migrate.xml -@@ -0,0 +1,1734 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+