File pacemaker-pengine-migration-behind-migrating-remote.patch of Package pacemaker.14737
commit 2b1aae074e563b9e15ac60ce2aae5b387bb8af0b
Author: Ken Gaillot <kgaillot@redhat.com>
Date: Thu Aug 24 18:32:59 2017 -0500
Fix: pengine: handle resource migrating behind a migrating remote connection
Index: pacemaker-1.1.16+20170320.77ea74d/pengine/allocate.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/pengine/allocate.c
+++ pacemaker-1.1.16+20170320.77ea74d/pengine/allocate.c
@@ -1800,6 +1800,14 @@ apply_container_ordering(action_t *actio
is_set(container->flags, pe_rsc_failed)? "failed " : "",
container->id);
+ if (safe_str_eq(action->task, CRMD_ACTION_MIGRATE)
+ || safe_str_eq(action->task, CRMD_ACTION_MIGRATE)) {
+ /* Migration ops map to "no_action", but we need to apply the same
+ * ordering as for stop or demote (see get_router_node()).
+ */
+ task = stop_rsc;
+ }
+
switch (task) {
case start_rsc:
case action_promote:
@@ -1970,6 +1978,15 @@ apply_remote_ordering(action_t *action,
action->task, action->uuid,
is_set(remote_rsc->flags, pe_rsc_failed)? "failed " : "",
remote_rsc->id, state);
+
+ if (safe_str_eq(action->task, CRMD_ACTION_MIGRATE)
+ || safe_str_eq(action->task, CRMD_ACTION_MIGRATE)) {
+ /* Migration ops map to "no_action", but we need to apply the same
+ * ordering as for stop or demote (see get_router_node()).
+ */
+ task = stop_rsc;
+ }
+
switch (task) {
case start_rsc:
case action_promote:
Index: pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.dot
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/pengine/test10/migration-behind-migrating-remote.dot
+++ pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.dot
@@ -7,7 +7,6 @@ digraph "g" {
"remote1_migrate_to_0 node1" [ style=bold color="green" fontcolor="black"]
"remote1_monitor_60000 node2" [ style=bold color="green" fontcolor="black"]
"remote1_start_0 node2" -> "remote1_monitor_60000 node2" [ style = bold]
-"remote1_start_0 node2" -> "rsc1_migrate_to_0 remote1" [ style = bold]
"remote1_start_0 node2" [ style=bold color="green" fontcolor="orange"]
"remote1_stop_0 node1" -> "all_stopped" [ style = bold]
"remote1_stop_0 node1" -> "remote1_start_0 node2" [ style = bold]
@@ -15,6 +14,7 @@ digraph "g" {
"rsc1_migrate_from_0 remote2" -> "rsc1_start_0 remote2" [ style = bold]
"rsc1_migrate_from_0 remote2" -> "rsc1_stop_0 remote1" [ style = bold]
"rsc1_migrate_from_0 remote2" [ style=bold color="green" fontcolor="black"]
+"rsc1_migrate_to_0 remote1" -> "remote1_stop_0 node1" [ style = bold]
"rsc1_migrate_to_0 remote1" -> "rsc1_migrate_from_0 remote2" [ style = bold]
"rsc1_migrate_to_0 remote1" [ style=bold color="green" fontcolor="black"]
"rsc1_monitor_10000 remote2" [ style=bold color="green" fontcolor="black"]
Index: pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.exp
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/pengine/test10/migration-behind-migrating-remote.exp
+++ pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.exp
@@ -19,11 +19,7 @@
<attributes CRM_meta_migrate_source="remote1" CRM_meta_migrate_target="remote2" CRM_meta_on_node="remote1" CRM_meta_on_node_uuid="remote1" CRM_meta_record_pending="true" CRM_meta_timeout="20000" />
</rsc_op>
</action_set>
- <inputs>
- <trigger>
- <pseudo_event id="14" operation="start" operation_key="remote1_start_0"/>
- </trigger>
- </inputs>
+ <inputs/>
</synapse>
<synapse id="2">
<action_set>
@@ -128,6 +124,9 @@
<rsc_op id="8" operation="stop" operation_key="rsc1_stop_0" on_node="remote1" on_node_uuid="remote1" router_node="node1"/>
</trigger>
<trigger>
+ <rsc_op id="11" operation="migrate_to" operation_key="rsc1_migrate_to_0" on_node="remote1" on_node_uuid="remote1" router_node="node1"/>
+ </trigger>
+ <trigger>
<rsc_op id="17" operation="migrate_from" operation_key="remote1_migrate_from_0" on_node="node2" on_node_uuid="2"/>
</trigger>
</inputs>
Index: pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.scores
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/pengine/test10/migration-behind-migrating-remote.scores
+++ pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.scores
@@ -1,6 +1,4 @@
Allocation scores:
-An invalid transition was produced
-Transition failed: terminated
Using the original execution date of: 2017-08-21 17:12:54Z
native_color: Fencing allocation score on node1: 0
native_color: Fencing allocation score on node2: INFINITY
Index: pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.summary
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/pengine/test10/migration-behind-migrating-remote.summary
+++ pacemaker-1.1.16+20170320.77ea74d/pengine/test10/migration-behind-migrating-remote.summary
@@ -14,10 +14,17 @@ Transition Summary:
* Migrate remote1 (Started node1 -> node2)
Executing cluster transition:
+ * Resource action: rsc1 migrate_to on remote1
* Resource action: remote1 migrate_to on node1
+ * Resource action: rsc1 migrate_from on remote2
+ * Resource action: rsc1 stop on remote1
* Resource action: remote1 migrate_from on node2
-Transition failed: terminated
-An invalid transition was produced
+ * Resource action: remote1 stop on node1
+ * Pseudo action: all_stopped
+ * Pseudo action: rsc1_start_0
+ * Pseudo action: remote1_start_0
+ * Resource action: rsc1 monitor=10000 on remote2
+ * Resource action: remote1 monitor=60000 on node2
Using the original execution date of: 2017-08-21 17:12:54Z
Revised cluster status:
@@ -25,7 +32,7 @@ Online: [ node1 node2 ]
RemoteOnline: [ remote1 remote2 ]
Fencing (stonith:fence_xvm): Started node2
- rsc1 (ocf::pacemaker:Dummy): Started remote1
+ rsc1 (ocf::pacemaker:Dummy): Started remote2
remote1 (ocf::pacemaker:remote): Started node2
remote2 (ocf::pacemaker:remote): Started node2