Blame SOURCES/pacemaker-094c0ea-to-d9a51c6.patch

1f016a
diff --git a/crmd/crmd_lrm.h b/crmd/crmd_lrm.h
1f016a
index 46cddc2..3a08392 100644
1f016a
--- a/crmd/crmd_lrm.h
1f016a
+++ b/crmd/crmd_lrm.h
1f016a
@@ -71,6 +71,12 @@ struct pending_deletion_op_s {
1f016a
 xmlNode *do_lrm_query_internal(lrm_state_t * lrm_state, gboolean is_replace);
1f016a
 
1f016a
 /*!
1f016a
+ * \brief Is this the local ipc connection to the lrmd
1f016a
+ */
1f016a
+gboolean
1f016a
+lrm_state_is_local(lrm_state_t *lrm_state);
1f016a
+
1f016a
+/*!
1f016a
  * \brief Clear all state information from a single state entry.
1f016a
  * \note This does not close the lrmd connection
1f016a
  */
1f016a
diff --git a/crmd/lrm.c b/crmd/lrm.c
1f016a
index b68f657..5bff4d5 100644
1f016a
--- a/crmd/lrm.c
1f016a
+++ b/crmd/lrm.c
1f016a
@@ -1163,7 +1163,12 @@ get_lrm_resource(lrm_state_t * lrm_state, xmlNode * resource, xmlNode * op_msg,
1f016a
             fsa_data_t *msg_data = NULL;
1f016a
 
1f016a
             crm_err("Could not add resource %s to LRM %s", id, lrm_state->node_name);
1f016a
-            register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);
1f016a
+            /* only register this as a internal error if this involves the local
1f016a
+             * lrmd. Otherwise we're likely dealing with an unresponsive remote-node
1f016a
+             * which is not a FSA failure. */
1f016a
+            if (lrm_state_is_local(lrm_state) == TRUE) {
1f016a
+                register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);
1f016a
+            }
1f016a
         }
1f016a
     }
1f016a
 
1f016a
@@ -1211,6 +1216,28 @@ delete_resource(lrm_state_t * lrm_state,
1f016a
     delete_rsc_entry(lrm_state, request, id, gIter, rc, user);
1f016a
 }
1f016a
 
1f016a
+static int
1f016a
+get_fake_call_id(lrm_state_t *lrm_state, const char *rsc_id)
1f016a
+{
1f016a
+    int call_id = 0;
1f016a
+    rsc_history_t *entry = NULL;
1f016a
+
1f016a
+    entry = g_hash_table_lookup(lrm_state->resource_history, rsc_id);
1f016a
+
1f016a
+    /* Make sure the call id is greater than the last successful operation,
1f016a
+     * otherwise the failure will not result in a possible recovery of the resource
1f016a
+     * as it could appear the failure occurred before the successful start */
1f016a
+    if (entry) {
1f016a
+        call_id = entry->last_callid + 1;
1f016a
+    }
1f016a
+
1f016a
+    if (call_id < 0) {
1f016a
+        call_id = 1;
1f016a
+    }
1f016a
+    return call_id;
1f016a
+}
1f016a
+
1f016a
+
1f016a
 /*	 A_LRM_INVOKE	*/
1f016a
 void
1f016a
 do_lrm_invoke(long long action,
1f016a
@@ -1272,7 +1299,6 @@ do_lrm_invoke(long long action,
1f016a
         operation = CRM_OP_LRM_REFRESH;
1f016a
 
1f016a
     } else if (safe_str_eq(crm_op, CRM_OP_LRM_FAIL)) {
1f016a
-        rsc_history_t *entry = NULL;
1f016a
         lrmd_event_data_t *op = NULL;
1f016a
         lrmd_rsc_info_t *rsc = NULL;
1f016a
         xmlNode *xml_rsc = find_xml_node(input->xml, XML_CIB_TAG_RESOURCE, TRUE);
1f016a
@@ -1293,16 +1319,7 @@ do_lrm_invoke(long long action,
1f016a
 
1f016a
         free((char *)op->user_data);
1f016a
         op->user_data = NULL;
1f016a
-        entry = g_hash_table_lookup(lrm_state->resource_history, op->rsc_id);
1f016a
-        /* Make sure the call id is greater than the last successful operation,
1f016a
-         * otherwise the failure will not result in a possible recovery of the resource
1f016a
-         * as it could appear the failure occurred before the successful start */
1f016a
-        if (entry) {
1f016a
-            op->call_id = entry->last_callid + 1;
1f016a
-            if (op->call_id < 0) {
1f016a
-                op->call_id = 1;
1f016a
-            }
1f016a
-        }
1f016a
+        op->call_id = get_fake_call_id(lrm_state, op->rsc_id);
1f016a
         op->interval = 0;
1f016a
         op->op_status = PCMK_LRM_OP_DONE;
1f016a
         op->rc = PCMK_OCF_UNKNOWN_ERROR;
1f016a
@@ -1430,6 +1447,21 @@ do_lrm_invoke(long long action,
1f016a
         rsc = get_lrm_resource(lrm_state, xml_rsc, input->xml, create_rsc);
1f016a
 
1f016a
         if (rsc == NULL && create_rsc) {
1f016a
+            lrmd_event_data_t *op = NULL;
1f016a
+
1f016a
+            /* if the operation couldn't complete because we can't register
1f016a
+             * the resource, return a generic error */
1f016a
+            op = construct_op(lrm_state, input->xml, ID(xml_rsc), operation);
1f016a
+            CRM_ASSERT(op != NULL);
1f016a
+
1f016a
+            op->op_status = PCMK_LRM_OP_DONE;
1f016a
+            op->rc = PCMK_OCF_UNKNOWN_ERROR;
1f016a
+            op->t_run = time(NULL);
1f016a
+            op->t_rcchange = op->t_run;
1f016a
+
1f016a
+            send_direct_ack(from_host, from_sys, NULL, op, ID(xml_rsc));
1f016a
+            lrmd_free_event(op);
1f016a
+
1f016a
             crm_err("Invalid resource definition");
1f016a
             crm_log_xml_warn(input->msg, "bad input");
1f016a
 
1f016a
@@ -1767,6 +1799,7 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat
1f016a
     lrmd_key_value_t *params = NULL;
1f016a
     fsa_data_t *msg_data = NULL;
1f016a
     const char *transition = NULL;
1f016a
+    gboolean stop_recurring = FALSE;
1f016a
 
1f016a
     CRM_CHECK(rsc != NULL, return);
1f016a
     CRM_CHECK(operation != NULL, return);
1f016a
@@ -1781,10 +1814,25 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat
1f016a
     op = construct_op(lrm_state, msg, rsc->id, operation);
1f016a
     CRM_CHECK(op != NULL, return);
1f016a
 
1f016a
-    /* stop any previous monitor operations before changing the resource state */
1f016a
-    if (op->interval == 0
1f016a
+    if (is_remote_lrmd_ra(NULL, NULL, rsc->id)
1f016a
+        && op->interval == 0
1f016a
+        && strcmp(operation, CRMD_ACTION_MIGRATE) == 0) {
1f016a
+
1f016a
+        /* pcmk remote connections are a special use case.
1f016a
+         * We never ever want to stop monitoring a connection resource until
1f016a
+         * the entire migration has completed. If the connection is ever unexpected
1f016a
+         * severed, even during a migration, this is an event we must detect.*/
1f016a
+        stop_recurring = FALSE;
1f016a
+
1f016a
+    } else if (op->interval == 0
1f016a
         && strcmp(operation, CRMD_ACTION_STATUS) != 0
1f016a
         && strcmp(operation, CRMD_ACTION_NOTIFY) != 0) {
1f016a
+
1f016a
+        /* stop any previous monitor operations before changing the resource state */
1f016a
+        stop_recurring = TRUE;
1f016a
+    }
1f016a
+
1f016a
+    if (stop_recurring == TRUE) {
1f016a
         guint removed = 0;
1f016a
         struct stop_recurring_action_s data;
1f016a
 
1f016a
@@ -1837,10 +1885,20 @@ do_lrm_rsc_op(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, const char *operat
1f016a
                              op->op_type,
1f016a
                              op->user_data, op->interval, op->timeout, op->start_delay, params);
1f016a
 
1f016a
-    if (call_id <= 0) {
1f016a
+    if (call_id <= 0 && lrm_state_is_local(lrm_state)) {
1f016a
         crm_err("Operation %s on %s failed: %d", operation, rsc->id, call_id);
1f016a
         register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);
1f016a
 
1f016a
+    } else if (call_id <= 0) {
1f016a
+
1f016a
+        crm_err("Operation %s on resource %s failed to execute on remote node %s: %d", operation, rsc->id, lrm_state->node_name, call_id);
1f016a
+        op->call_id = get_fake_call_id(lrm_state, rsc->id);
1f016a
+        op->op_status = PCMK_LRM_OP_DONE;
1f016a
+        op->rc = PCMK_OCF_UNKNOWN_ERROR;
1f016a
+        op->t_run = time(NULL);
1f016a
+        op->t_rcchange = op->t_run;
1f016a
+        process_lrm_event(lrm_state, op);
1f016a
+
1f016a
     } else {
1f016a
         /* record all operations so we can wait
1f016a
          * for them to complete during shutdown
1f016a
diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c
1f016a
index 72f66c7..efd061c 100644
1f016a
--- a/crmd/lrm_state.c
1f016a
+++ b/crmd/lrm_state.c
1f016a
@@ -90,6 +90,21 @@ free_recurring_op(gpointer value)
1f016a
     free(op);
1f016a
 }
1f016a
 
1f016a
+gboolean
1f016a
+lrm_state_is_local(lrm_state_t *lrm_state)
1f016a
+{
1f016a
+    if (lrm_state == NULL || fsa_our_uname == NULL) {
1f016a
+        return FALSE;
1f016a
+    }
1f016a
+    
1f016a
+    if (strcmp(lrm_state->node_name, fsa_our_uname) != 0) {
1f016a
+        return FALSE;
1f016a
+    }
1f016a
+
1f016a
+    return TRUE;
1f016a
+
1f016a
+}
1f016a
+
1f016a
 lrm_state_t *
1f016a
 lrm_state_create(const char *node_name)
1f016a
 {
1f016a
diff --git a/crmd/remote_lrmd_ra.c b/crmd/remote_lrmd_ra.c
1f016a
index 2f658ee..ae59070 100644
1f016a
--- a/crmd/remote_lrmd_ra.c
1f016a
+++ b/crmd/remote_lrmd_ra.c
1f016a
@@ -231,7 +231,7 @@ retry_start_cmd_cb(gpointer data)
1f016a
         return FALSE;
1f016a
     }
1f016a
     cmd = ra_data->cur_cmd;
1f016a
-    if (safe_str_neq(cmd->action, "start")) {
1f016a
+    if (safe_str_neq(cmd->action, "start") && safe_str_neq(cmd->action, "migrate_from")) {
1f016a
         return FALSE;
1f016a
     }
1f016a
     update_remaining_timeout(cmd);
1f016a
@@ -264,7 +264,7 @@ connection_takeover_timeout_cb(gpointer data)
1f016a
     lrm_state_t *lrm_state = NULL;
1f016a
     remote_ra_cmd_t *cmd = data;
1f016a
 
1f016a
-    crm_debug("takeover event timed out for node %s", cmd->rsc_id);
1f016a
+    crm_info("takeover event timed out for node %s", cmd->rsc_id);
1f016a
     cmd->takeover_timeout_id = 0;
1f016a
 
1f016a
     lrm_state = lrm_state_find(cmd->rsc_id);
1f016a
@@ -281,7 +281,7 @@ monitor_timeout_cb(gpointer data)
1f016a
     lrm_state_t *lrm_state = NULL;
1f016a
     remote_ra_cmd_t *cmd = data;
1f016a
 
1f016a
-    crm_debug("Poke async response timed out for node %s", cmd->rsc_id);
1f016a
+    crm_info("Poke async response timed out for node %s", cmd->rsc_id);
1f016a
     cmd->monitor_timeout_id = 0;
1f016a
     cmd->op_status = PCMK_LRM_OP_TIMEOUT;
1f016a
     cmd->rc = PCMK_OCF_UNKNOWN_ERROR;
1f016a
diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h
1f016a
index 33acc6e..0d853c0 100644
1f016a
--- a/include/crm/pengine/common.h
1f016a
+++ b/include/crm/pengine/common.h
1f016a
@@ -34,7 +34,18 @@ enum action_fail_response {
1f016a
     action_fail_stop,
1f016a
     action_fail_standby,
1f016a
     action_fail_fence,
1f016a
-    action_fail_restart_container
1f016a
+    action_fail_restart_container,
1f016a
+    /* This is reserved for internal use for baremetal remote node connection
1f016a
+     * resources. This fail action means
1f016a
+     * 1. If stonith is enabled, fence the baremetal remote node
1f016a
+     * 2. stonith not enabled, attempt to recover the connection resources
1f016a
+     *
1f016a
+     * This response value gives us control of saying types of
1f016a
+     * connection resource failures result in fencing the remote node.
1f016a
+     * Example: recurring monitors failure should result in fencing.
1f016a
+     */
1f016a
+    action_fail_reset_remote,
1f016a
+
1f016a
 };
1f016a
 
1f016a
 /* the "done" action must be the "pre" action +1 */
1f016a
diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
1f016a
index f08a910..da20f64 100644
1f016a
--- a/include/crm/pengine/status.h
1f016a
+++ b/include/crm/pengine/status.h
1f016a
@@ -138,6 +138,8 @@ struct node_shared_s {
1f016a
     gboolean is_dc;
1f016a
     gboolean rsc_discovery_enabled;
1f016a
 
1f016a
+    gboolean remote_requires_reset;
1f016a
+
1f016a
     int num_resources;
1f016a
     GListPtr running_rsc;       /* resource_t* */
1f016a
     GListPtr allocated_rsc;     /* resource_t* */
1f016a
diff --git a/lib/common/ipc.c b/lib/common/ipc.c
1f016a
index f26225f..1b8558d 100644
1f016a
--- a/lib/common/ipc.c
1f016a
+++ b/lib/common/ipc.c
1f016a
@@ -1144,7 +1144,7 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in
1f016a
 
1f016a
     id++;
1f016a
     CRM_LOG_ASSERT(id != 0); /* Crude wrap-around detection */
1f016a
-    rc = crm_ipc_prepare(id, message, &iov, ipc_buffer_max);
1f016a
+    rc = crm_ipc_prepare(id, message, &iov, client->max_buf_size);
1f016a
     if(rc < 0) {
1f016a
         return rc;
1f016a
     }
1f016a
@@ -1158,10 +1158,10 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in
1f016a
     }
1f016a
 
1f016a
     if(header->size_compressed) {
1f016a
-        if(factor < 10 && (ipc_buffer_max / 10) < (rc / factor)) {
1f016a
+        if(factor < 10 && (client->max_buf_size / 10) < (rc / factor)) {
1f016a
             crm_notice("Compressed message exceeds %d0%% of the configured ipc limit (%d bytes), "
1f016a
                        "consider setting PCMK_ipc_buffer to %d or higher",
1f016a
-                       factor, ipc_buffer_max, 2*ipc_buffer_max);
1f016a
+                       factor, client->max_buf_size, 2*client->max_buf_size);
1f016a
             factor++;
1f016a
         }
1f016a
     }
1f016a
diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c
1f016a
index b8c5d23..74bd692 100644
1f016a
--- a/lib/lrmd/lrmd_client.c
1f016a
+++ b/lib/lrmd/lrmd_client.c
1f016a
@@ -604,12 +604,18 @@ lrmd_tls_recv_reply(lrmd_t * lrmd, int total_timeout, int expected_reply_id, int
1f016a
                 remaining_timeout = total_timeout;
1f016a
             }
1f016a
             if (remaining_timeout <= 0) {
1f016a
+                crm_err("Never received the expected reply during the timeout period, disconnecting.");
1f016a
+                *disconnected = TRUE;
1f016a
                 return NULL;
1f016a
             }
1f016a
 
1f016a
             crm_remote_recv(native->remote, remaining_timeout, disconnected);
1f016a
             xml = crm_remote_parse_buffer(native->remote);
1f016a
-            if (!xml || *disconnected) {
1f016a
+            if (!xml) {
1f016a
+                crm_err("Unable to receive expected reply, disconnecting.");
1f016a
+                *disconnected = TRUE;
1f016a
+                return NULL;
1f016a
+            } else if (*disconnected) {
1f016a
                 return NULL;
1f016a
             }
1f016a
         }
1f016a
diff --git a/lib/pengine/common.c b/lib/pengine/common.c
1f016a
index e5e4ea7..42eda33 100644
1f016a
--- a/lib/pengine/common.c
1f016a
+++ b/lib/pengine/common.c
1f016a
@@ -214,6 +214,9 @@ fail2text(enum action_fail_response fail)
1f016a
         case action_fail_restart_container:
1f016a
             result = "restart-container";
1f016a
             break;
1f016a
+        case action_fail_reset_remote:
1f016a
+            result = "reset-remote";
1f016a
+            break;
1f016a
     }
1f016a
     return result;
1f016a
 }
1f016a
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
1f016a
index a19bdff..bdd6450 100644
1f016a
--- a/lib/pengine/unpack.c
1f016a
+++ b/lib/pengine/unpack.c
1f016a
@@ -80,6 +80,15 @@ pe_fence_node(pe_working_set_t * data_set, node_t * node, const char *reason)
1f016a
                   node->details->uname, reason);
1f016a
         set_bit(node->details->remote_rsc->flags, pe_rsc_failed);
1f016a
 
1f016a
+    } else if (is_baremetal_remote_node(node)) {
1f016a
+        if(pe_can_fence(data_set, node)) {
1f016a
+            crm_warn("Node %s will be fenced %s", node->details->uname, reason);
1f016a
+        } else {
1f016a
+            crm_warn("Node %s is unclean %s", node->details->uname, reason);
1f016a
+        }
1f016a
+        node->details->unclean = TRUE;
1f016a
+        node->details->remote_requires_reset = TRUE;
1f016a
+
1f016a
     } else if (node->details->unclean == FALSE) {
1f016a
         if(pe_can_fence(data_set, node)) {
1f016a
             crm_warn("Node %s will be fenced %s", node->details->uname, reason);
1f016a
@@ -1143,8 +1152,10 @@ unpack_remote_status(xmlNode * status, pe_working_set_t * data_set)
1f016a
         }
1f016a
         crm_trace("Processing remote node id=%s, uname=%s", id, uname);
1f016a
 
1f016a
-        this_node->details->unclean = FALSE;
1f016a
-        this_node->details->unseen = FALSE;
1f016a
+        if (this_node->details->remote_requires_reset == FALSE) {
1f016a
+            this_node->details->unclean = FALSE;
1f016a
+            this_node->details->unseen = FALSE;
1f016a
+        }
1f016a
         attrs = find_xml_node(state, XML_TAG_TRANSIENT_NODEATTRS, FALSE);
1f016a
         add_node_attrs(attrs, this_node, TRUE, data_set);
1f016a
 
1f016a
@@ -1777,6 +1788,7 @@ process_rsc_state(resource_t * rsc, node_t * node,
1f016a
                   enum action_fail_response on_fail,
1f016a
                   xmlNode * migrate_op, pe_working_set_t * data_set)
1f016a
 {
1f016a
+    node_t *tmpnode = NULL;
1f016a
     CRM_ASSERT(rsc);
1f016a
     pe_rsc_trace(rsc, "Resource %s is %s on %s: on_fail=%s",
1f016a
                  rsc->id, role2text(rsc->role), node->details->uname, fail2text(on_fail));
1f016a
@@ -1817,7 +1829,7 @@ process_rsc_state(resource_t * rsc, node_t * node,
1f016a
             should_fence = TRUE;
1f016a
         } else if (is_set(data_set->flags, pe_flag_stonith_enabled)) {
1f016a
             if (is_baremetal_remote_node(node) && is_not_set(node->details->remote_rsc->flags, pe_rsc_failed)) {
1f016a
-                /* setting unceen = true means that fencing of the remote node will
1f016a
+                /* setting unseen = true means that fencing of the remote node will
1f016a
                  * only occur if the connection resource is not going to start somewhere.
1f016a
                  * This allows connection resources on a failed cluster-node to move to
1f016a
                  * another node without requiring the baremetal remote nodes to be fenced
1f016a
@@ -1892,7 +1904,20 @@ process_rsc_state(resource_t * rsc, node_t * node,
1f016a
 
1f016a
             if (rsc->container) {
1f016a
                 stop_action(rsc->container, node, FALSE);
1f016a
-
1f016a
+            } else if (rsc->role != RSC_ROLE_STOPPED && rsc->role != RSC_ROLE_UNKNOWN) {
1f016a
+                stop_action(rsc, node, FALSE);
1f016a
+            }
1f016a
+            break;
1f016a
+        case action_fail_reset_remote:
1f016a
+            set_bit(rsc->flags, pe_rsc_failed);
1f016a
+            tmpnode = NULL;
1f016a
+            if (rsc->is_remote_node) {
1f016a
+                tmpnode = pe_find_node(data_set->nodes, rsc->id);
1f016a
+            }
1f016a
+            if (tmpnode && is_baremetal_remote_node(tmpnode)) {
1f016a
+                /* connection resource to baremetal resource failed in a way that
1f016a
+                 * should result in fencing the remote-node. */
1f016a
+                pe_fence_node(data_set, tmpnode, "because of connection failure(s)");
1f016a
             } else if (rsc->role != RSC_ROLE_STOPPED && rsc->role != RSC_ROLE_UNKNOWN) {
1f016a
                 stop_action(rsc, node, FALSE);
1f016a
             }
1f016a
@@ -1904,7 +1929,7 @@ process_rsc_state(resource_t * rsc, node_t * node,
1f016a
      * result in a fencing operation regardless if we're going to attempt to 
1f016a
      * reconnect to the remote-node in this transition or not. */
1f016a
     if (is_set(rsc->flags, pe_rsc_failed) && rsc->is_remote_node) {
1f016a
-        node_t *tmpnode = pe_find_node(data_set->nodes, rsc->id);
1f016a
+        tmpnode = pe_find_node(data_set->nodes, rsc->id);
1f016a
         if (tmpnode && tmpnode->details->unclean) {
1f016a
             tmpnode->details->unseen = FALSE;
1f016a
         }
1f016a
@@ -2510,10 +2535,9 @@ unpack_rsc_op_failure(resource_t *rsc, node_t *node, int rc, xmlNode *xml_op, en
1f016a
 
1f016a
     action = custom_action(rsc, strdup(key), task, NULL, TRUE, FALSE, data_set);
1f016a
     if ((action->on_fail <= action_fail_fence && *on_fail < action->on_fail) ||
1f016a
-        (action->on_fail == action_fail_restart_container
1f016a
-         && *on_fail <= action_fail_recover) || (*on_fail == action_fail_restart_container
1f016a
-                                                 && action->on_fail >=
1f016a
-                                                 action_fail_migrate)) {
1f016a
+        (action->on_fail == action_fail_reset_remote && *on_fail <= action_fail_recover) ||
1f016a
+        (action->on_fail == action_fail_restart_container && *on_fail <= action_fail_recover) ||
1f016a
+        (*on_fail == action_fail_restart_container && action->on_fail >= action_fail_migrate)) {
1f016a
         pe_rsc_trace(rsc, "on-fail %s -> %s for %s (%s)", fail2text(*on_fail),
1f016a
                      fail2text(action->on_fail), action->uuid, key);
1f016a
         *on_fail = action->on_fail;
1f016a
@@ -2881,13 +2905,11 @@ update_resource_state(resource_t *rsc, node_t * node, xmlNode * xml_op, const ch
1f016a
             case action_fail_block:
1f016a
             case action_fail_ignore:
1f016a
             case action_fail_recover:
1f016a
-                *on_fail = action_fail_ignore;
1f016a
-                rsc->next_role = RSC_ROLE_UNKNOWN;
1f016a
-                break;
1f016a
-
1f016a
             case action_fail_restart_container:
1f016a
+            case action_fail_reset_remote:
1f016a
                 *on_fail = action_fail_ignore;
1f016a
                 rsc->next_role = RSC_ROLE_UNKNOWN;
1f016a
+                break;
1f016a
         }
1f016a
     }
1f016a
 }
1f016a
diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c
1f016a
index baf6cb9..a40de60 100644
1f016a
--- a/lib/pengine/utils.c
1f016a
+++ b/lib/pengine/utils.c
1f016a
@@ -35,6 +35,7 @@ void unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * contain
1f016a
                       pe_working_set_t * data_set);
1f016a
 static xmlNode *find_rsc_op_entry_helper(resource_t * rsc, const char *key,
1f016a
                                          gboolean include_disabled);
1f016a
+static gboolean is_rsc_baremetal_remote_node(resource_t *rsc, pe_working_set_t * data_set);
1f016a
 
1f016a
 bool pe_can_fence(pe_working_set_t * data_set, node_t *node)
1f016a
 {
1f016a
@@ -686,6 +687,19 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container,
1f016a
                                NULL, action->meta, NULL, FALSE, data_set->now);
1f016a
     g_hash_table_remove(action->meta, "id");
1f016a
 
1f016a
+    field = XML_LRM_ATTR_INTERVAL;
1f016a
+    value = g_hash_table_lookup(action->meta, field);
1f016a
+    if (value != NULL) {
1f016a
+        interval = crm_get_interval(value);
1f016a
+        if (interval > 0) {
1f016a
+            value_ms = crm_itoa(interval);
1f016a
+            g_hash_table_replace(action->meta, strdup(field), value_ms);
1f016a
+
1f016a
+        } else {
1f016a
+            g_hash_table_remove(action->meta, field);
1f016a
+        }
1f016a
+    }
1f016a
+
1f016a
     /* Begin compatability code */
1f016a
     value = g_hash_table_lookup(action->meta, "requires");
1f016a
 
1f016a
@@ -789,6 +803,22 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container,
1f016a
         action->on_fail = action_fail_restart_container;
1f016a
         value = "restart container (and possibly migrate) (default)";
1f016a
 
1f016a
+    /* for baremetal remote nodes, ensure that a recurring monitor operation failure
1f016a
+     * defaults to either fencing the remote-node for recovery, or at least
1f016a
+     * attempting to recover the the connection when fencing is disabled. */
1f016a
+    } else if (value == NULL &&
1f016a
+               is_rsc_baremetal_remote_node(action->rsc, data_set) &&
1f016a
+               safe_str_eq(action->task, CRMD_ACTION_STATUS) &&
1f016a
+               interval > 0) {
1f016a
+
1f016a
+        if (is_set(data_set->flags, pe_flag_stonith_enabled)) {
1f016a
+            action->on_fail = action_fail_reset_remote;
1f016a
+            value = "fence baremetal remote node (default)";
1f016a
+        } else {
1f016a
+            action->on_fail = action_fail_recover;
1f016a
+            value = "recover baremetal remote node connection (default)";
1f016a
+        }
1f016a
+
1f016a
     } else if (value == NULL && safe_str_eq(action->task, CRMD_ACTION_STOP)) {
1f016a
         if (is_set(data_set->flags, pe_flag_stonith_enabled)) {
1f016a
             action->on_fail = action_fail_fence;
1f016a
@@ -824,19 +854,6 @@ unpack_operation(action_t * action, xmlNode * xml_obj, resource_t * container,
1f016a
     pe_rsc_trace(action->rsc, "\t%s failure results in: %s", action->task,
1f016a
                  role2text(action->fail_role));
1f016a
 
1f016a
-    field = XML_LRM_ATTR_INTERVAL;
1f016a
-    value = g_hash_table_lookup(action->meta, field);
1f016a
-    if (value != NULL) {
1f016a
-        interval = crm_get_interval(value);
1f016a
-        if (interval > 0) {
1f016a
-            value_ms = crm_itoa(interval);
1f016a
-            g_hash_table_replace(action->meta, strdup(field), value_ms);
1f016a
-
1f016a
-        } else {
1f016a
-            g_hash_table_remove(action->meta, field);
1f016a
-        }
1f016a
-    }
1f016a
-
1f016a
     field = XML_OP_ATTR_START_DELAY;
1f016a
     value = g_hash_table_lookup(action->meta, field);
1f016a
     if (value != NULL) {
1f016a
@@ -1939,6 +1956,25 @@ const char *rsc_printable_id(resource_t *rsc)
1f016a
 }
1f016a
 
1f016a
 gboolean
1f016a
+is_rsc_baremetal_remote_node(resource_t *rsc, pe_working_set_t * data_set)
1f016a
+{
1f016a
+    node_t *node;
1f016a
+
1f016a
+    if (rsc == NULL) {
1f016a
+        return FALSE;
1f016a
+    } else if (rsc->is_remote_node == FALSE) {
1f016a
+        return FALSE;
1f016a
+    }
1f016a
+
1f016a
+    node = pe_find_node(data_set->nodes, rsc->id);
1f016a
+    if (node == NULL) {
1f016a
+        return FALSE;
1f016a
+    }
1f016a
+
1f016a
+    return is_baremetal_remote_node(node);
1f016a
+}
1f016a
+
1f016a
+gboolean
1f016a
 is_baremetal_remote_node(node_t *node)
1f016a
 {
1f016a
     if (is_remote_node(node) && (node->details->remote_rsc == FALSE || node->details->remote_rsc->container == FALSE)) {
1f016a
diff --git a/pengine/allocate.c b/pengine/allocate.c
1f016a
index 45e2212..9c3cb60 100644
1f016a
--- a/pengine/allocate.c
1f016a
+++ b/pengine/allocate.c
1f016a
@@ -1191,7 +1191,10 @@ allocate_resources(pe_working_set_t * data_set)
1f016a
                 continue;
1f016a
             }
1f016a
             pe_rsc_trace(rsc, "Allocating: %s", rsc->id);
1f016a
-            rsc->cmds->allocate(rsc, NULL, data_set);
1f016a
+            /* for remote node connection resources, always prefer the partial migration
1f016a
+             * target during resource allocation if the rsc is in the middle of a
1f016a
+             * migration */ 
1f016a
+            rsc->cmds->allocate(rsc, rsc->partial_migration_target, data_set);
1f016a
         }
1f016a
     }
1f016a
 
1f016a
@@ -1716,9 +1719,18 @@ apply_remote_node_ordering(pe_working_set_t *data_set)
1f016a
                 node_t *cluster_node = remote_rsc->running_on ? remote_rsc->running_on->data : NULL;
1f016a
 
1f016a
                 /* if the current cluster node a baremetal connection resource
1f016a
-                 * is residing on is unclean, we can't process any operations on that
1f016a
-                 * remote node until after it starts somewhere else. */
1f016a
-                if (cluster_node && cluster_node->details->unclean == TRUE) {
1f016a
+                 * is residing on is unclean or went offline we can't process any
1f016a
+                 * operations on that remote node until after it starts somewhere else. */
1f016a
+                if (cluster_node == NULL ||
1f016a
+                    cluster_node->details->unclean == TRUE ||
1f016a
+                    cluster_node->details->online == FALSE) {
1f016a
+                    after_start = TRUE;
1f016a
+                } else if (g_list_length(remote_rsc->running_on) > 1 &&
1f016a
+                           remote_rsc->partial_migration_source &&
1f016a
+                            remote_rsc->partial_migration_target) {
1f016a
+                    /* if we're caught in the middle of migrating a connection resource,
1f016a
+                     * then we have to wait until after the resource migrates before performing
1f016a
+                     * any actions. */
1f016a
                     after_start = TRUE;
1f016a
                 }
1f016a
             }
1f016a
diff --git a/pengine/native.c b/pengine/native.c
1f016a
index 6d62010..62639d0 100644
1f016a
--- a/pengine/native.c
1f016a
+++ b/pengine/native.c
1f016a
@@ -1137,12 +1137,18 @@ handle_migration_actions(resource_t * rsc, node_t *current, node_t *chosen, pe_w
1f016a
     if (migrate_to) {
1f016a
         add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_SOURCE, current->details->uname);
1f016a
         add_hash_param(migrate_to->meta, XML_LRM_ATTR_MIGRATE_TARGET, chosen->details->uname);
1f016a
-        /* migrate_to takes place on the source node, but can 
1f016a
-         * have an effect on the target node depending on how
1f016a
-         * the agent is written. Because of this, we have to maintain
1f016a
-         * a record that the migrate_to occurred incase the source node 
1f016a
-         * loses membership while the migrate_to action is still in-flight. */
1f016a
-        add_hash_param(migrate_to->meta, XML_OP_ATTR_PENDING, "true");
1f016a
+
1f016a
+        /* pcmk remote connections don't require pending to be recorded in cib.
1f016a
+         * We can optimize cib writes by only setting PENDING for non pcmk remote
1f016a
+         * connection resources */
1f016a
+        if (rsc->is_remote_node == FALSE) {
1f016a
+            /* migrate_to takes place on the source node, but can 
1f016a
+             * have an effect on the target node depending on how
1f016a
+             * the agent is written. Because of this, we have to maintain
1f016a
+             * a record that the migrate_to occurred incase the source node 
1f016a
+             * loses membership while the migrate_to action is still in-flight. */
1f016a
+            add_hash_param(migrate_to->meta, XML_OP_ATTR_PENDING, "true");
1f016a
+        }
1f016a
     }
1f016a
 
1f016a
     if (migrate_from) {
1f016a
diff --git a/pengine/regression.sh b/pengine/regression.sh
1f016a
index aa03b18..3a244d7 100755
1f016a
--- a/pengine/regression.sh
1f016a
+++ b/pengine/regression.sh
1f016a
@@ -769,6 +769,11 @@ do_test remote-disable         "Disable a baremetal remote-node"
1f016a
 do_test remote-orphaned        "Properly shutdown orphaned connection resource"
1f016a
 do_test remote-recover         "Recover connection resource after cluster-node fails."
1f016a
 do_test remote-stale-node-entry "Make sure we properly handle leftover remote-node entries in the node section"
1f016a
+do_test remote-partial-migrate  "Make sure partial migrations are handled before ops on the remote node."
1f016a
+do_test remote-partial-migrate2 "Make sure partial migration target is prefered for remote connection."
1f016a
+do_test remote-recover-fail     "Make sure start failure causes fencing if rsc are active on remote."
1f016a
+do_test remote-start-fail       "Make sure a start failure does not result in fencing if no active resources are on remote."
1f016a
+do_test remote-unclean2         "Make monitor failure always results in fencing, even if no rsc are active on remote."
1f016a
 
1f016a
 echo ""
1f016a
 do_test resource-discovery      "Exercises resource-discovery location constraint option."
1f016a
diff --git a/pengine/test10/remote-fence-unclean.exp b/pengine/test10/remote-fence-unclean.exp
1f016a
index 9b1e327..b8c90f2 100644
1f016a
--- a/pengine/test10/remote-fence-unclean.exp
1f016a
+++ b/pengine/test10/remote-fence-unclean.exp
1f016a
@@ -8,7 +8,7 @@
1f016a
     </action_set>
1f016a
     <inputs>
1f016a
       <trigger>
1f016a
-        <rsc_op id="5" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1"/>
1f016a
+        <rsc_op id="14" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1"/>
1f016a
       </trigger>
1f016a
       <trigger>
1f016a
         <pseudo_event id="27" operation="stonith_complete" operation_key="stonith_complete"/>
1f016a
@@ -17,7 +17,7 @@
1f016a
   </synapse>
1f016a
   <synapse id="1">
1f016a
     <action_set>
1f016a
-      <rsc_op id="5" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1">
1f016a
+      <rsc_op id="14" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1">
1f016a
         <primitive id="remote1" class="ocf" provider="pacemaker" type="remote"/>
1f016a
         <attributes CRM_meta_timeout="20000" />
1f016a
       </rsc_op>
1f016a
@@ -176,13 +176,13 @@
1f016a
   </synapse>
1f016a
   <synapse id="14">
1f016a
     <action_set>
1f016a
-      <pseudo_event id="7" operation="all_stopped" operation_key="all_stopped">
1f016a
+      <pseudo_event id="6" operation="all_stopped" operation_key="all_stopped">
1f016a
         <attributes />
1f016a
       </pseudo_event>
1f016a
     </action_set>
1f016a
     <inputs>
1f016a
       <trigger>
1f016a
-        <rsc_op id="5" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1"/>
1f016a
+        <rsc_op id="14" operation="stop" operation_key="remote1_stop_0" on_node="18node1" on_node_uuid="1"/>
1f016a
       </trigger>
1f016a
       <trigger>
1f016a
         <pseudo_event id="18" operation="stop" operation_key="FAKE2_stop_0"/>
1f016a
diff --git a/pengine/test10/remote-move.exp b/pengine/test10/remote-move.exp
1f016a
index 6724679..6287daa 100644
1f016a
--- a/pengine/test10/remote-move.exp
1f016a
+++ b/pengine/test10/remote-move.exp
1f016a
@@ -51,7 +51,7 @@
1f016a
     <action_set>
1f016a
       <rsc_op id="20" operation="migrate_to" operation_key="remote1_migrate_to_0" on_node="18builder" on_node_uuid="5">
1f016a
         <primitive id="remote1" class="ocf" provider="pacemaker" type="remote"/>
1f016a
-        <attributes CRM_meta_migrate_source="18builder" CRM_meta_migrate_target="18node1" CRM_meta_record_pending="true" CRM_meta_timeout="20000" />
1f016a
+        <attributes CRM_meta_migrate_source="18builder" CRM_meta_migrate_target="18node1" CRM_meta_timeout="20000" />
1f016a
       </rsc_op>
1f016a
     </action_set>
1f016a
     <inputs/>
1f016a
diff --git a/pengine/test10/remote-partial-migrate.dot b/pengine/test10/remote-partial-migrate.dot
1f016a
new file mode 100644
1f016a
index 0000000..8d776dc
1f016a
--- /dev/null
1f016a
+++ b/pengine/test10/remote-partial-migrate.dot
1f016a
@@ -0,0 +1,86 @@
1f016a
+ digraph "g" {
1f016a
+"FAKE10_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE10_start_0 pcmk1" -> "FAKE10_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE10_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE13_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE13_start_0 pcmk2" -> "FAKE13_monitor_10000 pcmk2" [ style = bold]
1f016a
+"FAKE13_start_0 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE15_monitor_10000 pcmk3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE15_start_0 pcmk3" -> "FAKE15_monitor_10000 pcmk3" [ style = bold]
1f016a
+"FAKE15_start_0 pcmk3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE16_monitor_10000 pcmk_remote3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE16_start_0 pcmk_remote3" -> "FAKE16_monitor_10000 pcmk_remote3" [ style = bold]
1f016a
+"FAKE16_start_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE16_stop_0 pcmk1" -> "FAKE16_start_0 pcmk_remote3" [ style = bold]
1f016a
+"FAKE16_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"FAKE16_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE22_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE22_start_0 pcmk1" -> "FAKE22_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE22_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE23_monitor_10000 pcmk_remote1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE23_start_0 pcmk_remote1" -> "FAKE23_monitor_10000 pcmk_remote1" [ style = bold]
1f016a
+"FAKE23_start_0 pcmk_remote1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE23_stop_0 pcmk1" -> "FAKE23_start_0 pcmk_remote1" [ style = bold]
1f016a
+"FAKE23_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"FAKE23_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE26_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE26_start_0 pcmk1" -> "FAKE26_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE26_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE29_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE29_start_0 pcmk2" -> "FAKE29_monitor_10000 pcmk2" [ style = bold]
1f016a
+"FAKE29_start_0 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE30_monitor_10000 pcmk_remote2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE30_start_0 pcmk_remote2" -> "FAKE30_monitor_10000 pcmk_remote2" [ style = bold]
1f016a
+"FAKE30_start_0 pcmk_remote2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE30_stop_0 pcmk1" -> "FAKE30_start_0 pcmk_remote2" [ style = bold]
1f016a
+"FAKE30_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"FAKE30_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE36_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE36_start_0 pcmk1" -> "FAKE36_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE36_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE37_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE37_start_0 pcmk2" -> "FAKE37_monitor_10000 pcmk2" [ style = bold]
1f016a
+"FAKE37_start_0 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE37_stop_0 pcmk1" -> "FAKE37_start_0 pcmk2" [ style = bold]
1f016a
+"FAKE37_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"FAKE37_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE43_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE43_start_0 pcmk1" -> "FAKE43_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE43_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE44_monitor_10000 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE44_start_0 pcmk2" -> "FAKE44_monitor_10000 pcmk2" [ style = bold]
1f016a
+"FAKE44_start_0 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE44_stop_0 pcmk1" -> "FAKE44_start_0 pcmk2" [ style = bold]
1f016a
+"FAKE44_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"FAKE44_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE4_monitor_10000 pcmk_remote3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE4_start_0 pcmk_remote3" -> "FAKE4_monitor_10000 pcmk_remote3" [ style = bold]
1f016a
+"FAKE4_start_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE50_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE50_start_0 pcmk1" -> "FAKE50_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE50_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE9_monitor_10000 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE9_start_0 pcmk1" -> "FAKE9_monitor_10000 pcmk1" [ style = bold]
1f016a
+"FAKE9_start_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"FAKE9_stop_0 pcmk_remote3" -> "FAKE9_start_0 pcmk1" [ style = bold]
1f016a
+"FAKE9_stop_0 pcmk_remote3" -> "all_stopped" [ style = bold]
1f016a
+"FAKE9_stop_0 pcmk_remote3" [ style=bold color="green" fontcolor="black"]
1f016a
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
1f016a
+"pcmk_remote3_migrate_from_0 pcmk2" -> "pcmk_remote3_start_0 pcmk2" [ style = bold]
1f016a
+"pcmk_remote3_migrate_from_0 pcmk2" -> "pcmk_remote3_stop_0 pcmk1" [ style = bold]
1f016a
+"pcmk_remote3_migrate_from_0 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"pcmk_remote3_monitor_60000 pcmk2" [ style=bold color="green" fontcolor="black"]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "FAKE16_monitor_10000 pcmk_remote3" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "FAKE16_start_0 pcmk_remote3" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "FAKE4_monitor_10000 pcmk_remote3" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "FAKE4_start_0 pcmk_remote3" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "FAKE9_stop_0 pcmk_remote3" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" -> "pcmk_remote3_monitor_60000 pcmk2" [ style = bold]
1f016a
+"pcmk_remote3_start_0 pcmk2" [ style=bold color="green" fontcolor="orange"]
1f016a
+"pcmk_remote3_stop_0 pcmk1" -> "all_stopped" [ style = bold]
1f016a
+"pcmk_remote3_stop_0 pcmk1" -> "pcmk_remote3_start_0 pcmk2" [ style = bold]
1f016a
+"pcmk_remote3_stop_0 pcmk1" [ style=bold color="green" fontcolor="black"]
1f016a
+"probe_complete pcmk_remote1" [ style=bold color="green" fontcolor="black"]
1f016a
+"probe_complete pcmk_remote2" [ style=bold color="green" fontcolor="black"]
1f016a
+"probe_complete pcmk_remote4" [ style=bold color="green" fontcolor="black"]
1f016a
+}
1f016a
diff --git a/pengine/test10/remote-partial-migrate.exp b/pengine/test10/remote-partial-migrate.exp
1f016a
new file mode 100644
1f016a
index 0000000..0a531df
1f016a
--- /dev/null
1f016a
+++ b/pengine/test10/remote-partial-migrate.exp
1f016a
@@ -0,0 +1,553 @@
1f016a
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY"  transition_id="0">
1f016a
+  <synapse id="0">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="65" operation="migrate_from" operation_key="pcmk_remote3_migrate_from_0" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="pcmk_remote3" class="ocf" provider="pacemaker" type="remote"/>
1f016a
+        <attributes CRM_meta_migrate_source="pcmk1" CRM_meta_migrate_target="pcmk2" CRM_meta_timeout="20000"  server="172.17.201.3"/>
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="1">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="64" operation="monitor" operation_key="pcmk_remote3_monitor_60000" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="pcmk_remote3" class="ocf" provider="pacemaker" type="remote"/>
1f016a
+        <attributes CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_timeout="30000"  server="172.17.201.3"/>
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="2">
1f016a
+    <action_set>
1f016a
+      <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0">
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="10000"  server="172.17.201.3"/>
1f016a
+      </pseudo_event>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="62" operation="stop" operation_key="pcmk_remote3_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="65" operation="migrate_from" operation_key="pcmk_remote3_migrate_from_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="3">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="62" operation="stop" operation_key="pcmk_remote3_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="pcmk_remote3" class="ocf" provider="pacemaker" type="remote"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="60000"  server="172.17.201.3"/>
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="65" operation="migrate_from" operation_key="pcmk_remote3_migrate_from_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="4">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="75" operation="monitor" operation_key="FAKE4_monitor_10000" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2">
1f016a
+        <primitive id="FAKE4" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="74" operation="start" operation_key="FAKE4_start_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="5">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="74" operation="start" operation_key="FAKE4_start_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2">
1f016a
+        <primitive id="FAKE4" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="6">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="86" operation="monitor" operation_key="FAKE9_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE9" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="85" operation="start" operation_key="FAKE9_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="7">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="85" operation="start" operation_key="FAKE9_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE9" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="84" operation="stop" operation_key="FAKE9_stop_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="8">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="84" operation="stop" operation_key="FAKE9_stop_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2">
1f016a
+        <primitive id="FAKE9" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="9">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="88" operation="monitor" operation_key="FAKE10_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE10" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="87" operation="start" operation_key="FAKE10_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="10">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="87" operation="start" operation_key="FAKE10_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE10" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="11">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="94" operation="monitor" operation_key="FAKE13_monitor_10000" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE13" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="93" operation="start" operation_key="FAKE13_start_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="12">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="93" operation="start" operation_key="FAKE13_start_0" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE13" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="13">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="98" operation="monitor" operation_key="FAKE15_monitor_10000" on_node="pcmk3" on_node_uuid="3">
1f016a
+        <primitive id="FAKE15" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="97" operation="start" operation_key="FAKE15_start_0" on_node="pcmk3" on_node_uuid="3"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="14">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="97" operation="start" operation_key="FAKE15_start_0" on_node="pcmk3" on_node_uuid="3">
1f016a
+        <primitive id="FAKE15" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="15">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="101" operation="monitor" operation_key="FAKE16_monitor_10000" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2">
1f016a
+        <primitive id="FAKE16" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="100" operation="start" operation_key="FAKE16_start_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="16">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="100" operation="start" operation_key="FAKE16_start_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2">
1f016a
+        <primitive id="FAKE16" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <pseudo_event id="63" operation="start" operation_key="pcmk_remote3_start_0"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="99" operation="stop" operation_key="FAKE16_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="17">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="99" operation="stop" operation_key="FAKE16_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE16" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="18">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="113" operation="monitor" operation_key="FAKE22_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE22" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="112" operation="start" operation_key="FAKE22_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="19">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="112" operation="start" operation_key="FAKE22_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE22" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="20">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="116" operation="monitor" operation_key="FAKE23_monitor_10000" on_node="pcmk_remote1" on_node_uuid="pcmk_remote1" router_node="pcmk1">
1f016a
+        <primitive id="FAKE23" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="115" operation="start" operation_key="FAKE23_start_0" on_node="pcmk_remote1" on_node_uuid="pcmk_remote1" router_node="pcmk1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="21">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="115" operation="start" operation_key="FAKE23_start_0" on_node="pcmk_remote1" on_node_uuid="pcmk_remote1" router_node="pcmk1">
1f016a
+        <primitive id="FAKE23" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="114" operation="stop" operation_key="FAKE23_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="22">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="114" operation="stop" operation_key="FAKE23_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE23" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="23">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="122" operation="monitor" operation_key="FAKE26_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE26" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="121" operation="start" operation_key="FAKE26_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="24">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="121" operation="start" operation_key="FAKE26_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE26" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="25">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="128" operation="monitor" operation_key="FAKE29_monitor_10000" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE29" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="127" operation="start" operation_key="FAKE29_start_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="26">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="127" operation="start" operation_key="FAKE29_start_0" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE29" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="27">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="131" operation="monitor" operation_key="FAKE30_monitor_10000" on_node="pcmk_remote2" on_node_uuid="pcmk_remote2" router_node="pcmk3">
1f016a
+        <primitive id="FAKE30" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="130" operation="start" operation_key="FAKE30_start_0" on_node="pcmk_remote2" on_node_uuid="pcmk_remote2" router_node="pcmk3"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="28">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="130" operation="start" operation_key="FAKE30_start_0" on_node="pcmk_remote2" on_node_uuid="pcmk_remote2" router_node="pcmk3">
1f016a
+        <primitive id="FAKE30" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="129" operation="stop" operation_key="FAKE30_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="29">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="129" operation="stop" operation_key="FAKE30_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE30" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="30">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="143" operation="monitor" operation_key="FAKE36_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE36" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="142" operation="start" operation_key="FAKE36_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="31">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="142" operation="start" operation_key="FAKE36_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE36" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="32">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="146" operation="monitor" operation_key="FAKE37_monitor_10000" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE37" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="145" operation="start" operation_key="FAKE37_start_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="33">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="145" operation="start" operation_key="FAKE37_start_0" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE37" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="144" operation="stop" operation_key="FAKE37_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="34">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="144" operation="stop" operation_key="FAKE37_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE37" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="35">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="158" operation="monitor" operation_key="FAKE43_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE43" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="157" operation="start" operation_key="FAKE43_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="36">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="157" operation="start" operation_key="FAKE43_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE43" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="37">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="161" operation="monitor" operation_key="FAKE44_monitor_10000" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE44" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="160" operation="start" operation_key="FAKE44_start_0" on_node="pcmk2" on_node_uuid="2"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="38">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="160" operation="start" operation_key="FAKE44_start_0" on_node="pcmk2" on_node_uuid="2">
1f016a
+        <primitive id="FAKE44" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="159" operation="stop" operation_key="FAKE44_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="39">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="159" operation="stop" operation_key="FAKE44_stop_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE44" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="stop" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="40">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="173" operation="monitor" operation_key="FAKE50_monitor_10000" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE50" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="172" operation="start" operation_key="FAKE50_start_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+  <synapse id="41">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="172" operation="start" operation_key="FAKE50_start_0" on_node="pcmk1" on_node_uuid="1">
1f016a
+        <primitive id="FAKE50" class="ocf" provider="heartbeat" type="Dummy"/>
1f016a
+        <attributes CRM_meta_name="start" CRM_meta_timeout="20000" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="42" priority="1000000">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="55" operation="probe_complete" operation_key="probe_complete-pcmk_remote4" on_node="pcmk_remote4" on_node_uuid="pcmk_remote4" router_node="pcmk3">
1f016a
+        <attributes CRM_meta_op_no_wait="true" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="43" priority="1000000">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="53" operation="probe_complete" operation_key="probe_complete-pcmk_remote2" on_node="pcmk_remote2" on_node_uuid="pcmk_remote2" router_node="pcmk3">
1f016a
+        <attributes CRM_meta_op_no_wait="true" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="44" priority="1000000">
1f016a
+    <action_set>
1f016a
+      <rsc_op id="52" operation="probe_complete" operation_key="probe_complete-pcmk_remote1" on_node="pcmk_remote1" on_node_uuid="pcmk_remote1" router_node="pcmk1">
1f016a
+        <attributes CRM_meta_op_no_wait="true" />
1f016a
+      </rsc_op>
1f016a
+    </action_set>
1f016a
+    <inputs/>
1f016a
+  </synapse>
1f016a
+  <synapse id="45">
1f016a
+    <action_set>
1f016a
+      <pseudo_event id="46" operation="all_stopped" operation_key="all_stopped">
1f016a
+        <attributes />
1f016a
+      </pseudo_event>
1f016a
+    </action_set>
1f016a
+    <inputs>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="62" operation="stop" operation_key="pcmk_remote3_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="84" operation="stop" operation_key="FAKE9_stop_0" on_node="pcmk_remote3" on_node_uuid="pcmk_remote3" router_node="pcmk2"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="99" operation="stop" operation_key="FAKE16_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="114" operation="stop" operation_key="FAKE23_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="129" operation="stop" operation_key="FAKE30_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="144" operation="stop" operation_key="FAKE37_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+      <trigger>
1f016a
+        <rsc_op id="159" operation="stop" operation_key="FAKE44_stop_0" on_node="pcmk1" on_node_uuid="1"/>
1f016a
+      </trigger>
1f016a
+    </inputs>
1f016a
+  </synapse>
1f016a
+</transition_graph>
1f016a
diff --git a/pengine/test10/remote-partial-migrate.scores b/pengine/test10/remote-partial-migrate.scores
1f016a
new file mode 100644
1f016a
index 0000000..a81602d
1f016a
--- /dev/null
1f016a
+++ b/pengine/test10/remote-partial-migrate.scores
1f016a
@@ -0,0 +1,449 @@
1f016a
+Allocation scores:
1f016a
+native_color: FAKE1 allocation score on pcmk1: 0
1f016a
+native_color: FAKE1 allocation score on pcmk2: 0
1f016a
+native_color: FAKE1 allocation score on pcmk3: 0
1f016a
+native_color: FAKE1 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE1 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE1 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE1 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE1 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE10 allocation score on pcmk1: 0
1f016a
+native_color: FAKE10 allocation score on pcmk2: 0
1f016a
+native_color: FAKE10 allocation score on pcmk3: 0
1f016a
+native_color: FAKE10 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE10 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE10 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE10 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE10 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE11 allocation score on pcmk1: 0
1f016a
+native_color: FAKE11 allocation score on pcmk2: 0
1f016a
+native_color: FAKE11 allocation score on pcmk3: 0
1f016a
+native_color: FAKE11 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE11 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE11 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE11 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE11 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE12 allocation score on pcmk1: 0
1f016a
+native_color: FAKE12 allocation score on pcmk2: 0
1f016a
+native_color: FAKE12 allocation score on pcmk3: 0
1f016a
+native_color: FAKE12 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE12 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE12 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE12 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE12 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE13 allocation score on pcmk1: 0
1f016a
+native_color: FAKE13 allocation score on pcmk2: 0
1f016a
+native_color: FAKE13 allocation score on pcmk3: 0
1f016a
+native_color: FAKE13 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE13 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE13 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE13 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE13 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE14 allocation score on pcmk1: 0
1f016a
+native_color: FAKE14 allocation score on pcmk2: 0
1f016a
+native_color: FAKE14 allocation score on pcmk3: 0
1f016a
+native_color: FAKE14 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE14 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE14 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE14 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE14 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE15 allocation score on pcmk1: 0
1f016a
+native_color: FAKE15 allocation score on pcmk2: 0
1f016a
+native_color: FAKE15 allocation score on pcmk3: 0
1f016a
+native_color: FAKE15 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE15 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE15 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE15 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE15 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE16 allocation score on pcmk1: 0
1f016a
+native_color: FAKE16 allocation score on pcmk2: 0
1f016a
+native_color: FAKE16 allocation score on pcmk3: 0
1f016a
+native_color: FAKE16 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE16 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE16 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE16 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE16 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE17 allocation score on pcmk1: 0
1f016a
+native_color: FAKE17 allocation score on pcmk2: 0
1f016a
+native_color: FAKE17 allocation score on pcmk3: 0
1f016a
+native_color: FAKE17 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE17 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE17 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE17 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE17 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE18 allocation score on pcmk1: 0
1f016a
+native_color: FAKE18 allocation score on pcmk2: 0
1f016a
+native_color: FAKE18 allocation score on pcmk3: 0
1f016a
+native_color: FAKE18 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE18 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE18 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE18 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE18 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE19 allocation score on pcmk1: 0
1f016a
+native_color: FAKE19 allocation score on pcmk2: 0
1f016a
+native_color: FAKE19 allocation score on pcmk3: 0
1f016a
+native_color: FAKE19 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE19 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE19 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE19 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE19 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE2 allocation score on pcmk1: 0
1f016a
+native_color: FAKE2 allocation score on pcmk2: 0
1f016a
+native_color: FAKE2 allocation score on pcmk3: 0
1f016a
+native_color: FAKE2 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE2 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE2 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE2 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE2 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE20 allocation score on pcmk1: 0
1f016a
+native_color: FAKE20 allocation score on pcmk2: 0
1f016a
+native_color: FAKE20 allocation score on pcmk3: 0
1f016a
+native_color: FAKE20 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE20 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE20 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE20 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE20 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE21 allocation score on pcmk1: 0
1f016a
+native_color: FAKE21 allocation score on pcmk2: 0
1f016a
+native_color: FAKE21 allocation score on pcmk3: 0
1f016a
+native_color: FAKE21 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE21 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE21 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE21 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE21 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE22 allocation score on pcmk1: 0
1f016a
+native_color: FAKE22 allocation score on pcmk2: 0
1f016a
+native_color: FAKE22 allocation score on pcmk3: 0
1f016a
+native_color: FAKE22 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE22 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE22 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE22 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE22 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE23 allocation score on pcmk1: 0
1f016a
+native_color: FAKE23 allocation score on pcmk2: 0
1f016a
+native_color: FAKE23 allocation score on pcmk3: 0
1f016a
+native_color: FAKE23 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE23 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE23 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE23 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE23 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE24 allocation score on pcmk1: 0
1f016a
+native_color: FAKE24 allocation score on pcmk2: 0
1f016a
+native_color: FAKE24 allocation score on pcmk3: 0
1f016a
+native_color: FAKE24 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE24 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE24 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE24 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE24 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE25 allocation score on pcmk1: 0
1f016a
+native_color: FAKE25 allocation score on pcmk2: 0
1f016a
+native_color: FAKE25 allocation score on pcmk3: 0
1f016a
+native_color: FAKE25 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE25 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE25 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE25 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE25 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE26 allocation score on pcmk1: 0
1f016a
+native_color: FAKE26 allocation score on pcmk2: 0
1f016a
+native_color: FAKE26 allocation score on pcmk3: 0
1f016a
+native_color: FAKE26 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE26 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE26 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE26 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE26 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE27 allocation score on pcmk1: 0
1f016a
+native_color: FAKE27 allocation score on pcmk2: 0
1f016a
+native_color: FAKE27 allocation score on pcmk3: 0
1f016a
+native_color: FAKE27 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE27 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE27 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE27 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE27 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE28 allocation score on pcmk1: 0
1f016a
+native_color: FAKE28 allocation score on pcmk2: 0
1f016a
+native_color: FAKE28 allocation score on pcmk3: 0
1f016a
+native_color: FAKE28 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE28 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE28 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE28 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE28 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE29 allocation score on pcmk1: 0
1f016a
+native_color: FAKE29 allocation score on pcmk2: 0
1f016a
+native_color: FAKE29 allocation score on pcmk3: 0
1f016a
+native_color: FAKE29 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE29 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE29 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE29 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE29 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE3 allocation score on pcmk1: 0
1f016a
+native_color: FAKE3 allocation score on pcmk2: 0
1f016a
+native_color: FAKE3 allocation score on pcmk3: 0
1f016a
+native_color: FAKE3 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE3 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE3 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE3 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE3 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE30 allocation score on pcmk1: 0
1f016a
+native_color: FAKE30 allocation score on pcmk2: 0
1f016a
+native_color: FAKE30 allocation score on pcmk3: 0
1f016a
+native_color: FAKE30 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE30 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE30 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE30 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE30 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE31 allocation score on pcmk1: 0
1f016a
+native_color: FAKE31 allocation score on pcmk2: 0
1f016a
+native_color: FAKE31 allocation score on pcmk3: 0
1f016a
+native_color: FAKE31 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE31 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE31 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE31 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE31 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE32 allocation score on pcmk1: 0
1f016a
+native_color: FAKE32 allocation score on pcmk2: 0
1f016a
+native_color: FAKE32 allocation score on pcmk3: 0
1f016a
+native_color: FAKE32 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE32 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE32 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE32 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE32 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE33 allocation score on pcmk1: 0
1f016a
+native_color: FAKE33 allocation score on pcmk2: 0
1f016a
+native_color: FAKE33 allocation score on pcmk3: 0
1f016a
+native_color: FAKE33 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE33 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE33 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE33 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE33 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE34 allocation score on pcmk1: 0
1f016a
+native_color: FAKE34 allocation score on pcmk2: 0
1f016a
+native_color: FAKE34 allocation score on pcmk3: 0
1f016a
+native_color: FAKE34 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE34 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE34 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE34 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE34 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE35 allocation score on pcmk1: 0
1f016a
+native_color: FAKE35 allocation score on pcmk2: 0
1f016a
+native_color: FAKE35 allocation score on pcmk3: 0
1f016a
+native_color: FAKE35 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE35 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE35 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE35 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE35 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE36 allocation score on pcmk1: 0
1f016a
+native_color: FAKE36 allocation score on pcmk2: 0
1f016a
+native_color: FAKE36 allocation score on pcmk3: 0
1f016a
+native_color: FAKE36 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE36 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE36 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE36 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE36 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE37 allocation score on pcmk1: 0
1f016a
+native_color: FAKE37 allocation score on pcmk2: 0
1f016a
+native_color: FAKE37 allocation score on pcmk3: 0
1f016a
+native_color: FAKE37 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE37 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE37 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE37 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE37 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE38 allocation score on pcmk1: 0
1f016a
+native_color: FAKE38 allocation score on pcmk2: 0
1f016a
+native_color: FAKE38 allocation score on pcmk3: 0
1f016a
+native_color: FAKE38 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE38 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE38 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE38 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE38 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE39 allocation score on pcmk1: 0
1f016a
+native_color: FAKE39 allocation score on pcmk2: 0
1f016a
+native_color: FAKE39 allocation score on pcmk3: 0
1f016a
+native_color: FAKE39 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE39 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE39 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE39 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE39 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE4 allocation score on pcmk1: 0
1f016a
+native_color: FAKE4 allocation score on pcmk2: 0
1f016a
+native_color: FAKE4 allocation score on pcmk3: 0
1f016a
+native_color: FAKE4 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE4 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE4 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE4 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE4 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE40 allocation score on pcmk1: 0
1f016a
+native_color: FAKE40 allocation score on pcmk2: 0
1f016a
+native_color: FAKE40 allocation score on pcmk3: 0
1f016a
+native_color: FAKE40 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE40 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE40 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE40 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE40 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE41 allocation score on pcmk1: 0
1f016a
+native_color: FAKE41 allocation score on pcmk2: 0
1f016a
+native_color: FAKE41 allocation score on pcmk3: 0
1f016a
+native_color: FAKE41 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE41 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE41 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE41 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE41 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE42 allocation score on pcmk1: 0
1f016a
+native_color: FAKE42 allocation score on pcmk2: 0
1f016a
+native_color: FAKE42 allocation score on pcmk3: 0
1f016a
+native_color: FAKE42 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE42 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE42 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE42 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE42 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE43 allocation score on pcmk1: 0
1f016a
+native_color: FAKE43 allocation score on pcmk2: 0
1f016a
+native_color: FAKE43 allocation score on pcmk3: 0
1f016a
+native_color: FAKE43 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE43 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE43 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE43 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE43 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE44 allocation score on pcmk1: 0
1f016a
+native_color: FAKE44 allocation score on pcmk2: 0
1f016a
+native_color: FAKE44 allocation score on pcmk3: 0
1f016a
+native_color: FAKE44 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE44 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE44 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE44 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE44 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE45 allocation score on pcmk1: 0
1f016a
+native_color: FAKE45 allocation score on pcmk2: 0
1f016a
+native_color: FAKE45 allocation score on pcmk3: 0
1f016a
+native_color: FAKE45 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE45 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE45 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE45 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE45 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE46 allocation score on pcmk1: 0
1f016a
+native_color: FAKE46 allocation score on pcmk2: 0
1f016a
+native_color: FAKE46 allocation score on pcmk3: 0
1f016a
+native_color: FAKE46 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE46 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE46 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE46 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE46 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE47 allocation score on pcmk1: 0
1f016a
+native_color: FAKE47 allocation score on pcmk2: 0
1f016a
+native_color: FAKE47 allocation score on pcmk3: 0
1f016a
+native_color: FAKE47 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE47 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE47 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE47 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE47 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE48 allocation score on pcmk1: 0
1f016a
+native_color: FAKE48 allocation score on pcmk2: 0
1f016a
+native_color: FAKE48 allocation score on pcmk3: 0
1f016a
+native_color: FAKE48 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE48 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE48 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE48 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE48 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE49 allocation score on pcmk1: 0
1f016a
+native_color: FAKE49 allocation score on pcmk2: 0
1f016a
+native_color: FAKE49 allocation score on pcmk3: 0
1f016a
+native_color: FAKE49 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE49 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE49 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE49 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE49 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE5 allocation score on pcmk1: 0
1f016a
+native_color: FAKE5 allocation score on pcmk2: 0
1f016a
+native_color: FAKE5 allocation score on pcmk3: 0
1f016a
+native_color: FAKE5 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE5 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE5 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE5 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE5 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE50 allocation score on pcmk1: 0
1f016a
+native_color: FAKE50 allocation score on pcmk2: 0
1f016a
+native_color: FAKE50 allocation score on pcmk3: 0
1f016a
+native_color: FAKE50 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE50 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE50 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE50 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE50 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE6 allocation score on pcmk1: 0
1f016a
+native_color: FAKE6 allocation score on pcmk2: 0
1f016a
+native_color: FAKE6 allocation score on pcmk3: 0
1f016a
+native_color: FAKE6 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE6 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE6 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE6 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE6 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE7 allocation score on pcmk1: 0
1f016a
+native_color: FAKE7 allocation score on pcmk2: 0
1f016a
+native_color: FAKE7 allocation score on pcmk3: 0
1f016a
+native_color: FAKE7 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE7 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE7 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE7 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE7 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE8 allocation score on pcmk1: 0
1f016a
+native_color: FAKE8 allocation score on pcmk2: 0
1f016a
+native_color: FAKE8 allocation score on pcmk3: 0
1f016a
+native_color: FAKE8 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE8 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE8 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE8 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE8 allocation score on pcmk_remote5: 0
1f016a
+native_color: FAKE9 allocation score on pcmk1: 0
1f016a
+native_color: FAKE9 allocation score on pcmk2: -INFINITY
1f016a
+native_color: FAKE9 allocation score on pcmk3: 0
1f016a
+native_color: FAKE9 allocation score on pcmk_remote1: 0
1f016a
+native_color: FAKE9 allocation score on pcmk_remote2: 0
1f016a
+native_color: FAKE9 allocation score on pcmk_remote3: 0
1f016a
+native_color: FAKE9 allocation score on pcmk_remote4: 0
1f016a
+native_color: FAKE9 allocation score on pcmk_remote5: 0
1f016a
+native_color: pcmk_remote1 allocation score on pcmk1: 0
1f016a
+native_color: pcmk_remote1 allocation score on pcmk2: 0
1f016a
+native_color: pcmk_remote1 allocation score on pcmk3: 0
1f016a
+native_color: pcmk_remote1 allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: pcmk_remote1 allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: pcmk_remote1 allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: pcmk_remote1 allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: pcmk_remote1 allocation score on pcmk_remote5: -INFINITY
1f016a
+native_color: pcmk_remote2 allocation score on pcmk1: 0
1f016a
+native_color: pcmk_remote2 allocation score on pcmk2: 0
1f016a
+native_color: pcmk_remote2 allocation score on pcmk3: 0
1f016a
+native_color: pcmk_remote2 allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: pcmk_remote2 allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: pcmk_remote2 allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: pcmk_remote2 allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: pcmk_remote2 allocation score on pcmk_remote5: -INFINITY
1f016a
+native_color: pcmk_remote3 allocation score on pcmk1: 0
1f016a
+native_color: pcmk_remote3 allocation score on pcmk2: 0
1f016a
+native_color: pcmk_remote3 allocation score on pcmk3: 0
1f016a
+native_color: pcmk_remote3 allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: pcmk_remote3 allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: pcmk_remote3 allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: pcmk_remote3 allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: pcmk_remote3 allocation score on pcmk_remote5: -INFINITY
1f016a
+native_color: pcmk_remote4 allocation score on pcmk1: 0
1f016a
+native_color: pcmk_remote4 allocation score on pcmk2: 0
1f016a
+native_color: pcmk_remote4 allocation score on pcmk3: 0
1f016a
+native_color: pcmk_remote4 allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: pcmk_remote4 allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: pcmk_remote4 allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: pcmk_remote4 allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: pcmk_remote4 allocation score on pcmk_remote5: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk1: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk2: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk3: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: pcmk_remote5 allocation score on pcmk_remote5: -INFINITY
1f016a
+native_color: shooter allocation score on pcmk1: 0
1f016a
+native_color: shooter allocation score on pcmk2: 0
1f016a
+native_color: shooter allocation score on pcmk3: 0
1f016a
+native_color: shooter allocation score on pcmk_remote1: -INFINITY
1f016a
+native_color: shooter allocation score on pcmk_remote2: -INFINITY
1f016a
+native_color: shooter allocation score on pcmk_remote3: -INFINITY
1f016a
+native_color: shooter allocation score on pcmk_remote4: -INFINITY
1f016a
+native_color: shooter allocation score on pcmk_remote5: -INFINITY
1f016a
diff --git a/pengine/test10/remote-partial-migrate.summary b/pengine/test10/remote-partial-migrate.summary
1f016a
new file mode 100644
1f016a
index 0000000..e8abf92
1f016a
--- /dev/null
1f016a
+++ b/pengine/test10/remote-partial-migrate.summary
1f016a
@@ -0,0 +1,189 @@
1f016a
+
1f016a
+Current cluster status:
1f016a
+Online: [ pcmk1 pcmk2 pcmk3 ]
1f016a
+RemoteOnline: [ pcmk_remote1 pcmk_remote2 pcmk_remote3 pcmk_remote4 ]
1f016a
+RemoteOFFLINE: [ pcmk_remote5 ]
1f016a
+
1f016a
+ shooter	(stonith:fence_docker_cts):	Started pcmk2 
1f016a
+ pcmk_remote1	(ocf::pacemaker:remote):	Started pcmk1 
1f016a
+ pcmk_remote2	(ocf::pacemaker:remote):	Started pcmk3 
1f016a
+ pcmk_remote3	(ocf::pacemaker:remote):	Started [ pcmk2 pcmk1 ]
1f016a
+ pcmk_remote4	(ocf::pacemaker:remote):	Started pcmk3 
1f016a
+ pcmk_remote5	(ocf::pacemaker:remote):	Stopped 
1f016a
+ FAKE1	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE2	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE3	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE4	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE5	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE6	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE7	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE8	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE9	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE10	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE11	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE12	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE13	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE14	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE15	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE16	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE17	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE18	(ocf::heartbeat:Dummy):	Started pcmk2 
1f016a
+ FAKE19	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE20	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE21	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE22	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE23	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE24	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE25	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE26	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE27	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE28	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE29	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE30	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE31	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE32	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE33	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE34	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE35	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE36	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE37	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE38	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE39	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE40	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE41	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE42	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE43	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+ FAKE44	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE45	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE46	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE47	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE48	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE49	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE50	(ocf::heartbeat:Dummy):	Stopped 
1f016a
+
1f016a
+Transition Summary:
1f016a
+ * Migrate pcmk_remote3	(Started pcmk1 -> pcmk2)
1f016a
+ * Start   FAKE4	(pcmk_remote3)
1f016a
+ * Move    FAKE9	(Started pcmk_remote3 -> pcmk1)
1f016a
+ * Start   FAKE10	(pcmk1)
1f016a
+ * Start   FAKE13	(pcmk2)
1f016a
+ * Start   FAKE15	(pcmk3)
1f016a
+ * Move    FAKE16	(Started pcmk1 -> pcmk_remote3)
1f016a
+ * Start   FAKE22	(pcmk1)
1f016a
+ * Move    FAKE23	(Started pcmk1 -> pcmk_remote1)
1f016a
+ * Start   FAKE26	(pcmk1)
1f016a
+ * Start   FAKE29	(pcmk2)
1f016a
+ * Move    FAKE30	(Started pcmk1 -> pcmk_remote2)
1f016a
+ * Start   FAKE36	(pcmk1)
1f016a
+ * Move    FAKE37	(Started pcmk1 -> pcmk2)
1f016a
+ * Start   FAKE43	(pcmk1)
1f016a
+ * Move    FAKE44	(Started pcmk1 -> pcmk2)
1f016a
+ * Start   FAKE50	(pcmk1)
1f016a
+
1f016a
+Executing cluster transition:
1f016a
+ * Resource action: pcmk_remote3    migrate_from on pcmk2
1f016a
+ * Resource action: pcmk_remote3    stop on pcmk1
1f016a
+ * Resource action: FAKE10          start on pcmk1
1f016a
+ * Resource action: FAKE13          start on pcmk2
1f016a
+ * Resource action: FAKE15          start on pcmk3
1f016a
+ * Resource action: FAKE16          stop on pcmk1
1f016a
+ * Resource action: FAKE22          start on pcmk1
1f016a
+ * Resource action: FAKE23          stop on pcmk1
1f016a
+ * Resource action: FAKE26          start on pcmk1
1f016a
+ * Resource action: FAKE29          start on pcmk2
1f016a
+ * Resource action: FAKE30          stop on pcmk1
1f016a
+ * Resource action: FAKE36          start on pcmk1
1f016a
+ * Resource action: FAKE37          stop on pcmk1
1f016a
+ * Resource action: FAKE43          start on pcmk1
1f016a
+ * Resource action: FAKE44          stop on pcmk1
1f016a
+ * Resource action: FAKE50          start on pcmk1
1f016a
+ * Pseudo action:   pcmk_remote3_start_0
1f016a
+ * Resource action: FAKE4           start on pcmk_remote3
1f016a
+ * Resource action: FAKE9           stop on pcmk_remote3
1f016a
+ * Resource action: FAKE10          monitor=10000 on pcmk1
1f016a
+ * Resource action: FAKE13          monitor=10000 on pcmk2
1f016a
+ * Resource action: FAKE15          monitor=10000 on pcmk3
1f016a
+ * Resource action: FAKE16          start on pcmk_remote3
1f016a
+ * Resource action: FAKE22          monitor=10000 on pcmk1
1f016a
+ * Resource action: FAKE23          start on pcmk_remote1
1f016a
+ * Resource action: FAKE26          monitor=10000 on pcmk1
1f016a
+ * Resource action: FAKE29          monitor=10000 on pcmk2
1f016a
+ * Resource action: FAKE30          start on pcmk_remote2
1f016a
+ * Resource action: FAKE36          monitor=10000 on pcmk1
1f016a
+ * Resource action: FAKE37          start on pcmk2
1f016a
+ * Resource action: FAKE43          monitor=10000 on pcmk1
1f016a
+ * Resource action: FAKE44          start on pcmk2
1f016a
+ * Resource action: FAKE50          monitor=10000 on pcmk1
1f016a
+ * Pseudo action:   all_stopped
1f016a
+ * Resource action: pcmk_remote3    monitor=60000 on pcmk2
1f016a
+ * Resource action: FAKE4           monitor=10000 on pcmk_remote3
1f016a
+ * Resource action: FAKE9           start on pcmk1
1f016a
+ * Resource action: FAKE16          monitor=10000 on pcmk_remote3
1f016a
+ * Resource action: FAKE23          monitor=10000 on pcmk_remote1
1f016a
+ * Resource action: FAKE30          monitor=10000 on pcmk_remote2
1f016a
+ * Resource action: FAKE37          monitor=10000 on pcmk2
1f016a
+ * Resource action: FAKE44          monitor=10000 on pcmk2
1f016a
+ * Resource action: FAKE9           monitor=10000 on pcmk1
1f016a
+
1f016a
+Revised cluster status:
1f016a
+Online: [ pcmk1 pcmk2 pcmk3 ]
1f016a
+RemoteOnline: [ pcmk_remote1 pcmk_remote2 pcmk_remote3 pcmk_remote4 ]
1f016a
+RemoteOFFLINE: [ pcmk_remote5 ]
1f016a
+
1f016a
+ shooter	(stonith:fence_docker_cts):	Started pcmk2 
1f016a
+ pcmk_remote1	(ocf::pacemaker:remote):	Started pcmk1 
1f016a
+ pcmk_remote2	(ocf::pacemaker:remote):	Started pcmk3 
1f016a
+ pcmk_remote3	(ocf::pacemaker:remote):	Started pcmk2 
1f016a
+ pcmk_remote4	(ocf::pacemaker:remote):	Started pcmk3 
1f016a
+ pcmk_remote5	(ocf::pacemaker:remote):	Stopped 
1f016a
+ FAKE1	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE2	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE3	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE4	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE5	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE6	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE7	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE8	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE9	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE10	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE11	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE12	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE13	(ocf::heartbeat:Dummy):	Started pcmk2 
1f016a
+ FAKE14	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE15	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE16	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE17	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE18	(ocf::heartbeat:Dummy):	Started pcmk2 
1f016a
+ FAKE19	(ocf::heartbeat:Dummy):	Started pcmk_remote2 
1f016a
+ FAKE20	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE21	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE22	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE23	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE24	(ocf::heartbeat:Dummy):	Started pcmk3 
1f016a
+ FAKE25	(ocf::heartbeat:Dummy):	Started pcmk_remote1 
1f016a
+ FAKE26	(ocf::heartbeat:Dummy):	Started pcmk1 
1f016a
+ FAKE27	(ocf::heartbeat:Dummy):	Started pcmk_remote3 
1f016a
+ FAKE28	(ocf::heartbeat:Dummy):	Started pcmk_remote4 
1f016a
+ FAKE29	(ocf::heartbeat:Dummy):	Started pcmk2