From e953591a9796edebd4796c344df0eddcbc7a2dff Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Mon, 30 Jan 2023 16:34:32 -0600
Subject: [PATCH 01/14] Refactor: scheduler: drop unneeded arguments from
process_rsc_state()
migrate_op has been unused since at least 2011
---
lib/pengine/unpack.c | 36 +++++++++++++++---------------------
1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 5fcba3b..9524def 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -1963,8 +1963,7 @@ process_orphan_resource(xmlNode * rsc_entry, pe_node_t * node, pe_working_set_t
static void
process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
- enum action_fail_response on_fail,
- xmlNode * migrate_op, pe_working_set_t * data_set)
+ enum action_fail_response on_fail)
{
pe_node_t *tmpnode = NULL;
char *reason = NULL;
@@ -2016,7 +2015,7 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
should_fence = TRUE;
- } else if (pcmk_is_set(data_set->flags, pe_flag_stonith_enabled)) {
+ } else if (pcmk_is_set(rsc->cluster->flags, pe_flag_stonith_enabled)) {
if (pe__is_remote_node(node) && node->details->remote_rsc
&& !pcmk_is_set(node->details->remote_rsc->flags, pe_rsc_failed)) {
@@ -2039,7 +2038,7 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
if (reason == NULL) {
reason = crm_strdup_printf("%s is thought to be active there", rsc->id);
}
- pe_fence_node(data_set, node, reason, FALSE);
+ pe_fence_node(rsc->cluster, node, reason, FALSE);
}
free(reason);
}
@@ -2069,7 +2068,7 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
* but also mark the node as unclean
*/
reason = crm_strdup_printf("%s failed there", rsc->id);
- pe_fence_node(data_set, node, reason, FALSE);
+ pe_fence_node(rsc->cluster, node, reason, FALSE);
free(reason);
break;
@@ -2090,7 +2089,8 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
/* make sure it comes up somewhere else
* or not at all
*/
- resource_location(rsc, node, -INFINITY, "__action_migration_auto__", data_set);
+ resource_location(rsc, node, -INFINITY, "__action_migration_auto__",
+ rsc->cluster);
break;
case action_fail_stop:
@@ -2112,8 +2112,8 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
* container is running yet, so remember it and add a stop
* action for it later.
*/
- data_set->stop_needed = g_list_prepend(data_set->stop_needed,
- rsc->container);
+ rsc->cluster->stop_needed =
+ g_list_prepend(rsc->cluster->stop_needed, rsc->container);
} else if (rsc->container) {
stop_action(rsc->container, node, FALSE);
} else if (rsc->role != RSC_ROLE_STOPPED && rsc->role != RSC_ROLE_UNKNOWN) {
@@ -2123,10 +2123,10 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
case action_fail_reset_remote:
pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
- if (pcmk_is_set(data_set->flags, pe_flag_stonith_enabled)) {
+ if (pcmk_is_set(rsc->cluster->flags, pe_flag_stonith_enabled)) {
tmpnode = NULL;
if (rsc->is_remote_node) {
- tmpnode = pe_find_node(data_set->nodes, rsc->id);
+ tmpnode = pe_find_node(rsc->cluster->nodes, rsc->id);
}
if (tmpnode &&
pe__is_remote_node(tmpnode) &&
@@ -2135,7 +2135,7 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
/* The remote connection resource failed in a way that
* should result in fencing the remote node.
*/
- pe_fence_node(data_set, tmpnode,
+ pe_fence_node(rsc->cluster, tmpnode,
"remote connection is unrecoverable", FALSE);
}
}
@@ -2158,7 +2158,7 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
* result in a fencing operation regardless if we're going to attempt to
* reconnect to the remote-node in this transition or not. */
if (pcmk_is_set(rsc->flags, pe_rsc_failed) && rsc->is_remote_node) {
- tmpnode = pe_find_node(data_set->nodes, rsc->id);
+ tmpnode = pe_find_node(rsc->cluster->nodes, rsc->id);
if (tmpnode && tmpnode->details->unclean) {
tmpnode->details->unseen = FALSE;
}
@@ -2177,7 +2177,8 @@ process_rsc_state(pe_resource_t * rsc, pe_node_t * node,
}
}
- native_add_running(rsc, node, data_set, (save_on_fail != action_fail_ignore));
+ native_add_running(rsc, node, rsc->cluster,
+ (save_on_fail != action_fail_ignore));
switch (on_fail) {
case action_fail_ignore:
break;
@@ -2376,14 +2377,12 @@ unpack_lrm_resource(pe_node_t *node, xmlNode *lrm_resource,
int start_index = -1;
enum rsc_role_e req_role = RSC_ROLE_UNKNOWN;
- const char *task = NULL;
const char *rsc_id = ID(lrm_resource);
pe_resource_t *rsc = NULL;
GList *op_list = NULL;
GList *sorted_op_list = NULL;
- xmlNode *migrate_op = NULL;
xmlNode *rsc_op = NULL;
xmlNode *last_failure = NULL;
@@ -2437,11 +2436,6 @@ unpack_lrm_resource(pe_node_t *node, xmlNode *lrm_resource,
for (gIter = sorted_op_list; gIter != NULL; gIter = gIter->next) {
xmlNode *rsc_op = (xmlNode *) gIter->data;
- task = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);
- if (pcmk__str_eq(task, CRMD_ACTION_MIGRATED, pcmk__str_casei)) {
- migrate_op = rsc_op;
- }
-
unpack_rsc_op(rsc, node, rsc_op, &last_failure, &on_fail, data_set);
}
@@ -2452,7 +2446,7 @@ unpack_lrm_resource(pe_node_t *node, xmlNode *lrm_resource,
/* no need to free the contents */
g_list_free(sorted_op_list);
- process_rsc_state(rsc, node, on_fail, migrate_op, data_set);
+ process_rsc_state(rsc, node, on_fail);
if (get_target_role(rsc, &req_role)) {
if (rsc->next_role == RSC_ROLE_UNKNOWN || req_role < rsc->next_role) {
--
2.31.1
From 6f4e34cccc4864961d2020a2dd547450ac53a44e Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Wed, 1 Feb 2023 16:30:20 -0600
Subject: [PATCH 02/14] Log: scheduler: improve trace logs when unpacking
resource history
---
lib/pengine/unpack.c | 112 +++++++++++++++++++++++++++----------------
1 file changed, 71 insertions(+), 41 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 9524def..b7b2873 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -3363,6 +3363,24 @@ check_recoverable(pe_resource_t *rsc, pe_node_t *node, const char *task,
pe__set_resource_flags(rsc, pe_rsc_block);
}
+/*!
+ * \internal
+ * \brief Update an integer value and why
+ *
+ * \param[in,out] i Pointer to integer to update
+ * \param[in,out] why Where to store reason for update
+ * \param[in] value New value
+ * \param[in,out] reason Description of why value was changed
+ */
+static inline void
+remap_because(int *i, const char **why, int value, const char *reason)
+{
+ if (*i != value) {
+ *i = value;
+ *why = reason;
+ }
+}
+
/*!
* \internal
* \brief Remap informational monitor results and operation status
@@ -3393,29 +3411,34 @@ check_recoverable(pe_resource_t *rsc, pe_node_t *node, const char *task,
static void
remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
pe_working_set_t *data_set, enum action_fail_response *on_fail,
- int target_rc, int *rc, int *status) {
+ int target_rc, int *rc, int *status)
+{
bool is_probe = false;
+ int orig_exit_status = *rc;
+ int orig_exec_status = *status;
+ const char *why = NULL;
const char *task = crm_element_value(xml_op, XML_LRM_ATTR_TASK);
const char *key = get_op_key(xml_op);
const char *exit_reason = crm_element_value(xml_op,
XML_LRM_ATTR_EXIT_REASON);
if (pcmk__str_eq(task, CRMD_ACTION_STATUS, pcmk__str_none)) {
- int remapped_rc = pcmk__effective_rc(*rc);
-
- if (*rc != remapped_rc) {
- crm_trace("Remapping monitor result %d to %d", *rc, remapped_rc);
+ // Remap degraded results to their usual counterparts
+ *rc = pcmk__effective_rc(*rc);
+ if (*rc != orig_exit_status) {
+ why = "degraded monitor result";
if (!node->details->shutdown || node->details->online) {
record_failed_op(xml_op, node, rsc, data_set);
}
-
- *rc = remapped_rc;
}
}
if (!pe_rsc_is_bundled(rsc) && pcmk_xe_mask_probe_failure(xml_op)) {
- *status = PCMK_EXEC_DONE;
- *rc = PCMK_OCF_NOT_RUNNING;
+ if ((*status != PCMK_EXEC_DONE) || (*rc != PCMK_OCF_NOT_RUNNING)) {
+ *status = PCMK_EXEC_DONE;
+ *rc = PCMK_OCF_NOT_RUNNING;
+ why = "irrelevant probe result";
+ }
}
/* If the executor reported an operation status of anything but done or
@@ -3423,22 +3446,19 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
* it should be treated as a failure or not, because we know the expected
* result.
*/
- if (*status != PCMK_EXEC_DONE && *status != PCMK_EXEC_ERROR) {
- return;
+ switch (*status) {
+ case PCMK_EXEC_DONE:
+ case PCMK_EXEC_ERROR:
+ break;
+ default:
+ goto remap_done;
}
- CRM_ASSERT(rsc);
- CRM_CHECK(task != NULL,
- *status = PCMK_EXEC_ERROR; return);
-
- *status = PCMK_EXEC_DONE;
-
if (exit_reason == NULL) {
exit_reason = "";
}
is_probe = pcmk_xe_is_probe(xml_op);
-
if (is_probe) {
task = "probe";
}
@@ -3452,12 +3472,15 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
* those versions or processing of saved CIB files from those versions,
* so we do not need to care much about this case.
*/
- *status = PCMK_EXEC_ERROR;
+ remap_because(status, &why, PCMK_EXEC_ERROR, "obsolete history format");
crm_warn("Expected result not found for %s on %s (corrupt or obsolete CIB?)",
key, pe__node_name(node));
- } else if (target_rc != *rc) {
- *status = PCMK_EXEC_ERROR;
+ } else if (*rc == target_rc) {
+ remap_because(status, &why, PCMK_EXEC_DONE, "expected result");
+
+ } else {
+ remap_because(status, &why, PCMK_EXEC_ERROR, "unexpected result");
pe_rsc_debug(rsc, "%s on %s: expected %d (%s), got %d (%s%s%s)",
key, pe__node_name(node),
target_rc, services_ocf_exitcode_str(target_rc),
@@ -3468,7 +3491,7 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
switch (*rc) {
case PCMK_OCF_OK:
if (is_probe && (target_rc == PCMK_OCF_NOT_RUNNING)) {
- *status = PCMK_EXEC_DONE;
+ remap_because(status, &why,PCMK_EXEC_DONE, "probe");
pe_rsc_info(rsc, "Probe found %s active on %s at %s",
rsc->id, pe__node_name(node),
last_change_str(xml_op));
@@ -3479,7 +3502,7 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
if (is_probe || (target_rc == *rc)
|| !pcmk_is_set(rsc->flags, pe_rsc_managed)) {
- *status = PCMK_EXEC_DONE;
+ remap_because(status, &why, PCMK_EXEC_DONE, "exit status");
rsc->role = RSC_ROLE_STOPPED;
/* clear any previous failure actions */
@@ -3490,7 +3513,7 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
case PCMK_OCF_RUNNING_PROMOTED:
if (is_probe && (*rc != target_rc)) {
- *status = PCMK_EXEC_DONE;
+ remap_because(status, &why, PCMK_EXEC_DONE, "probe");
pe_rsc_info(rsc,
"Probe found %s active and promoted on %s at %s",
rsc->id, pe__node_name(node),
@@ -3502,11 +3525,11 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
case PCMK_OCF_DEGRADED_PROMOTED:
case PCMK_OCF_FAILED_PROMOTED:
rsc->role = RSC_ROLE_PROMOTED;
- *status = PCMK_EXEC_ERROR;
+ remap_because(status, &why, PCMK_EXEC_ERROR, "exit status");
break;
case PCMK_OCF_NOT_CONFIGURED:
- *status = PCMK_EXEC_ERROR_FATAL;
+ remap_because(status, &why, PCMK_EXEC_ERROR_FATAL, "exit status");
break;
case PCMK_OCF_UNIMPLEMENT_FEATURE:
@@ -3517,9 +3540,11 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
if (interval_ms == 0) {
check_recoverable(rsc, node, task, *rc, xml_op);
- *status = PCMK_EXEC_ERROR_HARD;
+ remap_because(status, &why, PCMK_EXEC_ERROR_HARD,
+ "exit status");
} else {
- *status = PCMK_EXEC_NOT_SUPPORTED;
+ remap_because(status, &why, PCMK_EXEC_NOT_SUPPORTED,
+ "exit status");
}
}
break;
@@ -3528,7 +3553,7 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
case PCMK_OCF_INVALID_PARAM:
case PCMK_OCF_INSUFFICIENT_PRIV:
check_recoverable(rsc, node, task, *rc, xml_op);
- *status = PCMK_EXEC_ERROR_HARD;
+ remap_because(status, &why, PCMK_EXEC_ERROR_HARD, "exit status");
break;
default:
@@ -3537,13 +3562,21 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
"on %s at %s as failure",
*rc, task, rsc->id, pe__node_name(node),
last_change_str(xml_op));
- *status = PCMK_EXEC_ERROR;
+ remap_because(status, &why, PCMK_EXEC_ERROR,
+ "unknown exit status");
}
break;
}
- pe_rsc_trace(rsc, "Remapped %s status to '%s'",
- key, pcmk_exec_status_str(*status));
+remap_done:
+ if (why != NULL) {
+ pe_rsc_trace(rsc,
+ "Remapped %s result from [%s: %s] to [%s: %s] "
+ "because of %s",
+ key, pcmk_exec_status_str(orig_exec_status),
+ crm_exit_str(orig_exit_status),
+ pcmk_exec_status_str(*status), crm_exit_str(*rc), why);
+ }
}
// return TRUE if start or monitor last failure but parameters changed
@@ -3947,9 +3980,9 @@ unpack_rsc_op(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
parent = uber_parent(rsc);
}
- pe_rsc_trace(rsc, "Unpacking task %s/%s (call_id=%d, status=%d, rc=%d) on %s (role=%s)",
- task_key, task, task_id, status, rc, pe__node_name(node),
- role2text(rsc->role));
+ pe_rsc_trace(rsc, "Unpacking %s (%s call %d on %s): %s (%s)",
+ ID(xml_op), task, task_id, pe__node_name(node),
+ pcmk_exec_status_str(status), crm_exit_str(rc));
if (node->details->unclean) {
pe_rsc_trace(rsc,
@@ -4077,9 +4110,6 @@ unpack_rsc_op(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
goto done;
case PCMK_EXEC_DONE:
- pe_rsc_trace(rsc, "%s of %s on %s completed at %s " CRM_XS " id=%s",
- task, rsc->id, pe__node_name(node),
- last_change_str(xml_op), ID(xml_op));
update_resource_state(rsc, node, xml_op, task, rc, *last_failure, on_fail, data_set);
goto done;
@@ -4175,9 +4205,9 @@ unpack_rsc_op(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
}
done:
- pe_rsc_trace(rsc, "Resource %s after %s: role=%s, next=%s",
- rsc->id, task, role2text(rsc->role),
- role2text(rsc->next_role));
+ pe_rsc_trace(rsc, "%s role on %s after %s is %s (next %s)",
+ rsc->id, pe__node_name(node), ID(xml_op),
+ role2text(rsc->role), role2text(rsc->next_role));
}
static void
--
2.31.1
From 5a1d2a3ba58fa73225433dab40cee0a6e0ef9bda Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Wed, 1 Feb 2023 12:08:55 -0600
Subject: [PATCH 03/14] Low: scheduler: improve migration history validation
Instead of a simple CRM_CHECK(), functionize parsing the source and target node
names from a migration action's resource history entry. This reduces
duplication and allows us to log more helpful errors.
Also, CRM_CHECK() tries to dump core for debugging, and that's not helpful for
corrupted CIB entries.
---
lib/pengine/unpack.c | 87 ++++++++++++++++++++++++++++++++++++++------
1 file changed, 75 insertions(+), 12 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index b7b2873..cd1b038 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2786,6 +2786,60 @@ newer_state_after_migrate(const char *rsc_id, const char *node_name,
|| monitor_not_running_after(rsc_id, node_name, xml_op, same_node,
data_set);
}
+
+/*!
+ * \internal
+ * \brief Parse migration source and target node names from history entry
+ *
+ * \param[in] entry Resource history entry for a migration action
+ * \param[in] source_node If not NULL, source must match this node
+ * \param[in] target_node If not NULL, target must match this node
+ * \param[out] source_name Where to store migration source node name
+ * \param[out] target_name Where to store migration target node name
+ *
+ * \return Standard Pacemaker return code
+ */
+static int
+get_migration_node_names(const xmlNode *entry, const pe_node_t *source_node,
+ const pe_node_t *target_node,
+ const char **source_name, const char **target_name)
+{
+ const char *id = ID(entry);
+
+ if (id == NULL) {
+ crm_err("Ignoring resource history entry without ID");
+ return pcmk_rc_unpack_error;
+ }
+
+ *source_name = crm_element_value(entry, XML_LRM_ATTR_MIGRATE_SOURCE);
+ *target_name = crm_element_value(entry, XML_LRM_ATTR_MIGRATE_TARGET);
+ if ((*source_name == NULL) || (*target_name == NULL)) {
+ crm_err("Ignoring resource history entry %s without "
+ XML_LRM_ATTR_MIGRATE_SOURCE " and " XML_LRM_ATTR_MIGRATE_TARGET,
+ id);
+ return pcmk_rc_unpack_error;
+ }
+
+ if ((source_node != NULL)
+ && !pcmk__str_eq(*source_name, source_node->details->uname,
+ pcmk__str_casei|pcmk__str_null_matches)) {
+ crm_err("Ignoring resource history entry %s because "
+ XML_LRM_ATTR_MIGRATE_SOURCE "='%s' does not match %s",
+ id, pcmk__s(*source_name, ""), pe__node_name(source_node));
+ return pcmk_rc_unpack_error;
+ }
+
+ if ((target_node != NULL)
+ && !pcmk__str_eq(*target_name, target_node->details->uname,
+ pcmk__str_casei|pcmk__str_null_matches)) {
+ crm_err("Ignoring resource history entry %s because "
+ XML_LRM_ATTR_MIGRATE_TARGET "='%s' does not match %s",
+ id, pcmk__s(*target_name, ""), pe__node_name(target_node));
+ return pcmk_rc_unpack_error;
+ }
+
+ return pcmk_rc_ok;
+}
static void
unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
@@ -2834,13 +2888,16 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
pe_node_t *target_node = NULL;
pe_node_t *source_node = NULL;
xmlNode *migrate_from = NULL;
- const char *source = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_SOURCE);
- const char *target = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_TARGET);
+ const char *source = NULL;
+ const char *target = NULL;
bool source_newer_op = false;
bool target_newer_state = false;
- // Sanity check
- CRM_CHECK(source && target && !strcmp(source, node->details->uname), return);
+ // Get source and target node names from XML
+ if (get_migration_node_names(xml_op, node, NULL, &source,
+ &target) != pcmk_rc_ok) {
+ return;
+ }
/* If there's any newer non-monitor operation on the source, this migrate_to
* potentially no longer matters for the source.
@@ -2949,11 +3006,14 @@ unpack_migrate_to_failure(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
pe_working_set_t *data_set)
{
xmlNode *target_migrate_from = NULL;
- const char *source = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_SOURCE);
- const char *target = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_TARGET);
+ const char *source = NULL;
+ const char *target = NULL;
- // Sanity check
- CRM_CHECK(source && target && !strcmp(source, node->details->uname), return);
+ // Get source and target node names from XML
+ if (get_migration_node_names(xml_op, node, NULL, &source,
+ &target) != pcmk_rc_ok) {
+ return;
+ }
/* If a migration failed, we have to assume the resource is active. Clones
* are not allowed to migrate, so role can't be promoted.
@@ -3001,11 +3061,14 @@ unpack_migrate_from_failure(pe_resource_t *rsc, pe_node_t *node,
xmlNode *xml_op, pe_working_set_t *data_set)
{
xmlNode *source_migrate_to = NULL;
- const char *source = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_SOURCE);
- const char *target = crm_element_value(xml_op, XML_LRM_ATTR_MIGRATE_TARGET);
+ const char *source = NULL;
+ const char *target = NULL;
- // Sanity check
- CRM_CHECK(source && target && !strcmp(target, node->details->uname), return);
+ // Get source and target node names from XML
+ if (get_migration_node_names(xml_op, NULL, node, &source,
+ &target) != pcmk_rc_ok) {
+ return;
+ }
/* If a migration failed, we have to assume the resource is active. Clones
* are not allowed to migrate, so role can't be promoted.
--
2.31.1
From 5139e5369769e733b05bc28940d3dccb4f7fca95 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 14:30:16 -0600
Subject: [PATCH 04/14] Refactor: scheduler: functionize adding a dangling
migration
... for code isolation and readability
---
lib/pengine/unpack.c | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index cd1b038..fa7c2cc 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2841,6 +2841,28 @@ get_migration_node_names(const xmlNode *entry, const pe_node_t *source_node,
return pcmk_rc_ok;
}
+/*
+ * \internal
+ * \brief Add a migration source to a resource's list of dangling migrations
+ *
+ * If the migrate_to and migrate_from actions in a live migration both
+ * succeeded, but there is no stop on the source, the migration is considered
+ * "dangling." Add the source to the resource's dangling migration list, which
+ * will be used to schedule a stop on the source without affecting the target.
+ *
+ * \param[in,out] rsc Resource involved in migration
+ * \param[in] node Migration source
+ */
+static void
+add_dangling_migration(pe_resource_t *rsc, const pe_node_t *node)
+{
+ pe_rsc_trace(rsc, "Dangling migration of %s requires stop on %s",
+ rsc->id, pe__node_name(node));
+ rsc->role = RSC_ROLE_STOPPED;
+ rsc->dangling_migrations = g_list_prepend(rsc->dangling_migrations,
+ (gpointer) node);
+}
+
static void
unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
pe_working_set_t *data_set)
@@ -2941,14 +2963,7 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
if (migrate_from && from_rc == PCMK_OCF_OK
&& (from_status == PCMK_EXEC_DONE)) {
- /* The migrate_to and migrate_from both succeeded, so mark the migration
- * as "dangling". This will be used to schedule a stop action on the
- * source without affecting the target.
- */
- pe_rsc_trace(rsc, "Detected dangling migration op: %s on %s", ID(xml_op),
- source);
- rsc->role = RSC_ROLE_STOPPED;
- rsc->dangling_migrations = g_list_prepend(rsc->dangling_migrations, node);
+ add_dangling_migration(rsc, node);
} else if (migrate_from && (from_status != PCMK_EXEC_PENDING)) { // Failed
/* If the resource has newer state on the target, this migrate_to no
--
2.31.1
From da71c04463d31338dd5da54d1d48b53e413716dc Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 16:57:55 -0600
Subject: [PATCH 05/14] Refactor: scheduler: check for dangling migration
before setting role
Previously, unpack_migrate_to_success() set rsc->role = RSC_ROLE_STARTED
then checked for dangling migration, which would reset it to RSC_ROLE_STOPPED.
For clarity, do the dangling migration check first.
---
lib/pengine/unpack.c | 47 ++++++++++++++++++++++++--------------------
1 file changed, 26 insertions(+), 21 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index fa7c2cc..b858b59 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2905,8 +2905,8 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
* migration is considered to be "dangling". Schedule a stop on the source
* in this case.
*/
- int from_rc = 0;
- int from_status = 0;
+ int from_rc = PCMK_OCF_OK;
+ int from_status = PCMK_EXEC_PENDING;
pe_node_t *target_node = NULL;
pe_node_t *source_node = NULL;
xmlNode *migrate_from = NULL;
@@ -2930,12 +2930,17 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
// Check whether there was a migrate_from action on the target
migrate_from = find_lrm_op(rsc->id, CRMD_ACTION_MIGRATED, target,
source, -1, data_set);
-
- /* Even if there's a newer non-monitor operation on the source, we still
- * need to check how this migrate_to might matter for the target.
- */
- if (source_newer_op && migrate_from) {
- return;
+ if (migrate_from != NULL) {
+ if (source_newer_op) {
+ /* There's a newer non-monitor operation on the source and a
+ * migrate_from on the target, so this migrate_to is irrelevant to
+ * the resource's state.
+ */
+ return;
+ }
+ crm_element_value_int(migrate_from, XML_LRM_ATTR_RC, &from_rc);
+ crm_element_value_int(migrate_from, XML_LRM_ATTR_OPSTATUS,
+ &from_status);
}
/* If the resource has newer state on the target after the migration
@@ -2948,24 +2953,24 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
return;
}
- // Clones are not allowed to migrate, so role can't be promoted
+ /* Check for dangling migration (migrate_from succeeded but stop not done).
+ * We know there's no stop because we already returned if the target has a
+ * migrate_from and the source has any newer non-monitor operation.
+ */
+ if ((from_rc == PCMK_OCF_OK) && (from_status == PCMK_EXEC_DONE)) {
+ add_dangling_migration(rsc, node);
+ return;
+ }
+
+ /* Without newer state, this migrate_to implies the resource is active.
+ * (Clones are not allowed to migrate, so role can't be promoted.)
+ */
rsc->role = RSC_ROLE_STARTED;
target_node = pe_find_node(data_set->nodes, target);
source_node = pe_find_node(data_set->nodes, source);
- if (migrate_from) {
- crm_element_value_int(migrate_from, XML_LRM_ATTR_RC, &from_rc);
- crm_element_value_int(migrate_from, XML_LRM_ATTR_OPSTATUS, &from_status);
- pe_rsc_trace(rsc, "%s op on %s exited with status=%d, rc=%d",
- ID(migrate_from), target, from_status, from_rc);
- }
-
- if (migrate_from && from_rc == PCMK_OCF_OK
- && (from_status == PCMK_EXEC_DONE)) {
- add_dangling_migration(rsc, node);
-
- } else if (migrate_from && (from_status != PCMK_EXEC_PENDING)) { // Failed
+ if (from_status != PCMK_EXEC_PENDING) { // migrate_from failed on target
/* If the resource has newer state on the target, this migrate_to no
* longer matters for the target.
*/
--
2.31.1
From d98a2687d68747b0598554939dea05c420456a12 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 17:05:50 -0600
Subject: [PATCH 06/14] Refactor: scheduler: avoid duplication of
active-on-target check
---
lib/pengine/unpack.c | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index b858b59..8cfc0ef 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2914,6 +2914,7 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
const char *target = NULL;
bool source_newer_op = false;
bool target_newer_state = false;
+ bool active_on_target = false;
// Get source and target node names from XML
if (get_migration_node_names(xml_op, node, NULL, &source,
@@ -2969,23 +2970,14 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
target_node = pe_find_node(data_set->nodes, target);
source_node = pe_find_node(data_set->nodes, source);
+ active_on_target = !target_newer_state && (target_node != NULL)
+ && target_node->details->online;
if (from_status != PCMK_EXEC_PENDING) { // migrate_from failed on target
- /* If the resource has newer state on the target, this migrate_to no
- * longer matters for the target.
- */
- if (!target_newer_state
- && target_node && target_node->details->online) {
- pe_rsc_trace(rsc, "Marking active on %s %p %d", target, target_node,
- target_node->details->online);
+ if (active_on_target) {
native_add_running(rsc, target_node, data_set, TRUE);
-
} else {
- /* With the earlier bail logic, migrate_from != NULL here implies
- * source_newer_op is false, meaning this migrate_to still matters
- * for the source.
- * Consider it failed here - forces a restart, prevents migration
- */
+ // Mark resource as failed, require recovery, and prevent migration
pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
pe__clear_resource_flags(rsc, pe_rsc_allow_migrate);
}
@@ -2994,11 +2986,7 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
/* If the resource has newer state on the target, this migrate_to no
* longer matters for the target.
*/
- if (!target_newer_state
- && target_node && target_node->details->online) {
- pe_rsc_trace(rsc, "Marking active on %s %p %d", target, target_node,
- target_node->details->online);
-
+ if (active_on_target) {
native_add_running(rsc, target_node, data_set, FALSE);
if (source_node && source_node->details->online) {
/* This is a partial migration: the migrate_to completed
--
2.31.1
From ae145309e3fdb26608e99f6d1fe1a7859d98efd0 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 17:07:58 -0600
Subject: [PATCH 07/14] Refactor: scheduler: improve unpacking of successful
migrate_to
Improve log messages, comments, and formatting, and avoid doing things until
needed, to improve efficiency of early returns.
---
lib/pengine/unpack.c | 109 +++++++++++++++++++------------------------
1 file changed, 48 insertions(+), 61 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 8cfc0ef..224b7b5 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2867,48 +2867,40 @@ static void
unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
pe_working_set_t *data_set)
{
- /* A successful migration sequence is:
- * migrate_to on source node
- * migrate_from on target node
- * stop on source node
+ /* A complete migration sequence is:
+ * 1. migrate_to on source node (which succeeded if we get to this function)
+ * 2. migrate_from on target node
+ * 3. stop on source node
*
- * But there could be scenarios like (It's easier to produce with cluster
- * property batch-limit=1):
- *
- * - rscA is live-migrating from node1 to node2.
- *
- * - Before migrate_to on node1 returns, put node2 into standby.
- *
- * - Transition aborts upon return of successful migrate_to on node1. New
- * transition is going to stop the rscA on both nodes and start it on
- * node1.
+ * If no migrate_from has happened, the migration is considered to be
+ * "partial". If the migrate_from succeeded but no stop has happened, the
+ * migration is considered to be "dangling".
*
- * - While it is stopping on node1, run something that is going to make
- * the transition abort again like:
- * crm_resource --resource rscA --ban --node node2
+ * If a successful migrate_to and stop have happened on the source node, we
+ * still need to check for a partial migration, due to scenarios (easier to
+ * produce with batch-limit=1) like:
*
- * - Transition aborts upon return of stop on node1.
+ * - A resource is migrating from node1 to node2, and a migrate_to is
+ * initiated for it on node1.
*
- * Now although there's a stop on node1, it's still a partial migration and
- * rscA is still potentially active on node2.
+ * - node2 goes into standby mode while the migrate_to is pending, which
+ * aborts the transition.
*
- * So even if a migrate_to is followed by a stop, we still need to check
- * whether there's a corresponding migrate_from or any newer operation on
- * the target.
+ * - Upon completion of the migrate_to, a new transition schedules a stop
+ * on both nodes and a start on node1.
*
- * If no migrate_from has happened, the migration is considered to be
- * "partial". If the migrate_from failed, make sure the resource gets
- * stopped on both source and target (if up).
+ * - If the new transition is aborted for any reason while the resource is
+ * stopping on node1, the transition after that stop completes will see
+ * the migrate_from and stop on the source, but it's still a partial
+ * migration, and the resource must be stopped on node2 because it is
+ * potentially active there due to the migrate_to.
*
- * If the migrate_to and migrate_from both succeeded (which also implies the
- * resource is no longer running on the source), but there is no stop, the
- * migration is considered to be "dangling". Schedule a stop on the source
- * in this case.
+ * We also need to take into account that either node's history may be
+ * cleared at any point in the migration process.
*/
int from_rc = PCMK_OCF_OK;
int from_status = PCMK_EXEC_PENDING;
pe_node_t *target_node = NULL;
- pe_node_t *source_node = NULL;
xmlNode *migrate_from = NULL;
const char *source = NULL;
const char *target = NULL;
@@ -2922,13 +2914,11 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
return;
}
- /* If there's any newer non-monitor operation on the source, this migrate_to
- * potentially no longer matters for the source.
- */
+ // Check for newer state on the source
source_newer_op = non_monitor_after(rsc->id, source, xml_op, true,
data_set);
- // Check whether there was a migrate_from action on the target
+ // Check for a migrate_from action from this source on the target
migrate_from = find_lrm_op(rsc->id, CRMD_ACTION_MIGRATED, target,
source, -1, data_set);
if (migrate_from != NULL) {
@@ -2944,12 +2934,11 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
&from_status);
}
- /* If the resource has newer state on the target after the migration
- * events, this migrate_to no longer matters for the target.
+ /* If the resource has newer state on both the source and target after the
+ * migration events, this migrate_to is irrelevant to the resource's state.
*/
target_newer_state = newer_state_after_migrate(rsc->id, target, xml_op,
migrate_from, data_set);
-
if (source_newer_op && target_newer_state) {
return;
}
@@ -2969,7 +2958,6 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
rsc->role = RSC_ROLE_STARTED;
target_node = pe_find_node(data_set->nodes, target);
- source_node = pe_find_node(data_set->nodes, source);
active_on_target = !target_newer_state && (target_node != NULL)
&& target_node->details->online;
@@ -2981,31 +2969,30 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
pe__clear_resource_flags(rsc, pe_rsc_allow_migrate);
}
+ return;
+ }
- } else { // Pending, or complete but erased
- /* If the resource has newer state on the target, this migrate_to no
- * longer matters for the target.
- */
- if (active_on_target) {
- native_add_running(rsc, target_node, data_set, FALSE);
- if (source_node && source_node->details->online) {
- /* This is a partial migration: the migrate_to completed
- * successfully on the source, but the migrate_from has not
- * completed. Remember the source and target; if the newly
- * chosen target remains the same when we schedule actions
- * later, we may continue with the migration.
- */
- rsc->partial_migration_target = target_node;
- rsc->partial_migration_source = source_node;
- }
- } else if (!source_newer_op) {
- /* This migrate_to matters for the source only if it's the last
- * non-monitor operation here.
- * Consider it failed here - forces a restart, prevents migration
+ // The migrate_from is pending, complete but erased, or to be scheduled
+
+ if (active_on_target) {
+ pe_node_t *source_node = pe_find_node(data_set->nodes, source);
+
+ native_add_running(rsc, target_node, data_set, FALSE);
+ if ((source_node != NULL) && source_node->details->online) {
+ /* This is a partial migration: the migrate_to completed
+ * successfully on the source, but the migrate_from has not
+ * completed. Remember the source and target; if the newly
+ * chosen target remains the same when we schedule actions
+ * later, we may continue with the migration.
*/
- pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
- pe__clear_resource_flags(rsc, pe_rsc_allow_migrate);
+ rsc->partial_migration_target = target_node;
+ rsc->partial_migration_source = source_node;
}
+
+ } else if (!source_newer_op) {
+ // Mark resource as failed, require recovery, and prevent migration
+ pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
+ pe__clear_resource_flags(rsc, pe_rsc_allow_migrate);
}
}
--
2.31.1
From 7d63ed8d52f64d2523367cff36bf77bd85296bd9 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 17:14:57 -0600
Subject: [PATCH 08/14] Refactor: scheduler: drop redundant argument from
unpack_migrate_to_success()
---
lib/pengine/unpack.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 224b7b5..6222115 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2864,8 +2864,7 @@ add_dangling_migration(pe_resource_t *rsc, const pe_node_t *node)
}
static void
-unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
- pe_working_set_t *data_set)
+unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op)
{
/* A complete migration sequence is:
* 1. migrate_to on source node (which succeeded if we get to this function)
@@ -2916,11 +2915,11 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
// Check for newer state on the source
source_newer_op = non_monitor_after(rsc->id, source, xml_op, true,
- data_set);
+ rsc->cluster);
// Check for a migrate_from action from this source on the target
migrate_from = find_lrm_op(rsc->id, CRMD_ACTION_MIGRATED, target,
- source, -1, data_set);
+ source, -1, rsc->cluster);
if (migrate_from != NULL) {
if (source_newer_op) {
/* There's a newer non-monitor operation on the source and a
@@ -2938,7 +2937,7 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
* migration events, this migrate_to is irrelevant to the resource's state.
*/
target_newer_state = newer_state_after_migrate(rsc->id, target, xml_op,
- migrate_from, data_set);
+ migrate_from, rsc->cluster);
if (source_newer_op && target_newer_state) {
return;
}
@@ -2957,13 +2956,13 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
*/
rsc->role = RSC_ROLE_STARTED;
- target_node = pe_find_node(data_set->nodes, target);
+ target_node = pe_find_node(rsc->cluster->nodes, target);
active_on_target = !target_newer_state && (target_node != NULL)
&& target_node->details->online;
if (from_status != PCMK_EXEC_PENDING) { // migrate_from failed on target
if (active_on_target) {
- native_add_running(rsc, target_node, data_set, TRUE);
+ native_add_running(rsc, target_node, rsc->cluster, TRUE);
} else {
// Mark resource as failed, require recovery, and prevent migration
pe__set_resource_flags(rsc, pe_rsc_failed|pe_rsc_stop);
@@ -2975,9 +2974,9 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
// The migrate_from is pending, complete but erased, or to be scheduled
if (active_on_target) {
- pe_node_t *source_node = pe_find_node(data_set->nodes, source);
+ pe_node_t *source_node = pe_find_node(rsc->cluster->nodes, source);
- native_add_running(rsc, target_node, data_set, FALSE);
+ native_add_running(rsc, target_node, rsc->cluster, FALSE);
if ((source_node != NULL) && source_node->details->online) {
/* This is a partial migration: the migrate_to completed
* successfully on the source, but the migrate_from has not
@@ -3946,7 +3945,7 @@ update_resource_state(pe_resource_t * rsc, pe_node_t * node, xmlNode * xml_op, c
clear_past_failure = TRUE;
} else if (pcmk__str_eq(task, CRMD_ACTION_MIGRATE, pcmk__str_casei)) {
- unpack_migrate_to_success(rsc, node, xml_op, data_set);
+ unpack_migrate_to_success(rsc, node, xml_op);
} else if (rsc->role < RSC_ROLE_STARTED) {
pe_rsc_trace(rsc, "%s active on %s", rsc->id, pe__node_name(node));
--
2.31.1
From 3be487f87bf5e26277379148922525fd98d29681 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 2 Feb 2023 09:13:30 -0600
Subject: [PATCH 09/14] Doc: scheduler: clarify comments about unpacking
migration history
per review
---
lib/pengine/unpack.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 6222115..ec2cf26 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2791,9 +2791,9 @@ newer_state_after_migrate(const char *rsc_id, const char *node_name,
* \internal
* \brief Parse migration source and target node names from history entry
*
- * \param[in] entry Resource history entry for a migration action
- * \param[in] source_node If not NULL, source must match this node
- * \param[in] target_node If not NULL, target must match this node
+ * \param[in] entry Resource history entry for a migration action
+ * \param[in] source_node If not NULL, source must match this node
+ * \param[in] target_node If not NULL, target must match this node
* \param[out] source_name Where to store migration source node name
* \param[out] target_name Where to store migration target node name
*
@@ -2825,7 +2825,7 @@ get_migration_node_names(const xmlNode *entry, const pe_node_t *source_node,
pcmk__str_casei|pcmk__str_null_matches)) {
crm_err("Ignoring resource history entry %s because "
XML_LRM_ATTR_MIGRATE_SOURCE "='%s' does not match %s",
- id, pcmk__s(*source_name, ""), pe__node_name(source_node));
+ id, *source_name, pe__node_name(source_node));
return pcmk_rc_unpack_error;
}
@@ -2834,7 +2834,7 @@ get_migration_node_names(const xmlNode *entry, const pe_node_t *source_node,
pcmk__str_casei|pcmk__str_null_matches)) {
crm_err("Ignoring resource history entry %s because "
XML_LRM_ATTR_MIGRATE_TARGET "='%s' does not match %s",
- id, pcmk__s(*target_name, ""), pe__node_name(target_node));
+ id, *target_name, pe__node_name(target_node));
return pcmk_rc_unpack_error;
}
@@ -2890,7 +2890,7 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op)
*
* - If the new transition is aborted for any reason while the resource is
* stopping on node1, the transition after that stop completes will see
- * the migrate_from and stop on the source, but it's still a partial
+ * the migrate_to and stop on the source, but it's still a partial
* migration, and the resource must be stopped on node2 because it is
* potentially active there due to the migrate_to.
*
@@ -3425,9 +3425,9 @@ check_recoverable(pe_resource_t *rsc, pe_node_t *node, const char *task,
* \brief Update an integer value and why
*
* \param[in,out] i Pointer to integer to update
- * \param[in,out] why Where to store reason for update
+ * \param[out] why Where to store reason for update
* \param[in] value New value
- * \param[in,out] reason Description of why value was changed
+ * \param[in] reason Description of why value was changed
*/
static inline void
remap_because(int *i, const char **why, int value, const char *reason)
@@ -3456,7 +3456,7 @@ remap_because(int *i, const char **why, int value, const char *reason)
* \param[in] data_set Current cluster working set
* \param[in,out] on_fail What should be done about the result
* \param[in] target_rc Expected return code of operation
- * \param[in,out] rc Actual return code of operation
+ * \param[in,out] rc Actual return code of operation (treated as OCF)
* \param[in,out] status Operation execution status
*
* \note If the result is remapped and the node is not shutting down or failed,
@@ -3548,7 +3548,7 @@ remap_operation(xmlNode *xml_op, pe_resource_t *rsc, pe_node_t *node,
switch (*rc) {
case PCMK_OCF_OK:
if (is_probe && (target_rc == PCMK_OCF_NOT_RUNNING)) {
- remap_because(status, &why,PCMK_EXEC_DONE, "probe");
+ remap_because(status, &why, PCMK_EXEC_DONE, "probe");
pe_rsc_info(rsc, "Probe found %s active on %s at %s",
rsc->id, pe__node_name(node),
last_change_str(xml_op));
--
2.31.1
From 3ef6c84a7b0dd434731e72d91f2724bdb52e292e Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 2 Feb 2023 09:42:01 -0600
Subject: [PATCH 10/14] Refactor: scheduler: improve xpath efficiency when
unpacking
Using "//" means that every child must be searched recursively. If we know the
exact path, we should explicitly specify it.
---
lib/pengine/unpack.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index ec2cf26..8aead58 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2571,6 +2571,13 @@ set_node_score(gpointer key, gpointer value, gpointer user_data)
node->weight = *score;
}
+#define XPATH_NODE_STATE "/" XML_TAG_CIB "/" XML_CIB_TAG_STATUS \
+ "/" XML_CIB_TAG_STATE
+#define SUB_XPATH_LRM_RESOURCE "/" XML_CIB_TAG_LRM \
+ "/" XML_LRM_TAG_RESOURCES \
+ "/" XML_LRM_TAG_RESOURCE
+#define SUB_XPATH_LRM_RSC_OP "/" XML_LRM_TAG_RSC_OP
+
static xmlNode *
find_lrm_op(const char *resource, const char *op, const char *node, const char *source,
int target_rc, pe_working_set_t *data_set)
@@ -2583,10 +2590,9 @@ find_lrm_op(const char *resource, const char *op, const char *node, const char *
xpath = g_string_sized_new(256);
pcmk__g_strcat(xpath,
- "//" XML_CIB_TAG_STATE "[@" XML_ATTR_UNAME "='", node, "']"
- "//" XML_LRM_TAG_RESOURCE
- "[@" XML_ATTR_ID "='", resource, "']"
- "/" XML_LRM_TAG_RSC_OP "[@" XML_LRM_ATTR_TASK "='", op, "'",
+ XPATH_NODE_STATE "[@" XML_ATTR_UNAME "='", node, "']"
+ SUB_XPATH_LRM_RESOURCE "[@" XML_ATTR_ID "='", resource, "']"
+ SUB_XPATH_LRM_RSC_OP "[@" XML_LRM_ATTR_TASK "='", op, "'",
NULL);
/* Need to check against transition_magic too? */
@@ -2631,10 +2637,8 @@ find_lrm_resource(const char *rsc_id, const char *node_name,
xpath = g_string_sized_new(256);
pcmk__g_strcat(xpath,
- "//" XML_CIB_TAG_STATE
- "[@" XML_ATTR_UNAME "='", node_name, "']"
- "//" XML_LRM_TAG_RESOURCE
- "[@" XML_ATTR_ID "='", rsc_id, "']",
+ XPATH_NODE_STATE "[@" XML_ATTR_UNAME "='", node_name, "']"
+ SUB_XPATH_LRM_RESOURCE "[@" XML_ATTR_ID "='", rsc_id, "']",
NULL);
xml = get_xpath_object((const char *) xpath->str, data_set->input,
--
2.31.1
From 1869f99bc8eeedb976f96f0f1cc3d4dd86735504 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 2 Feb 2023 10:25:53 -0600
Subject: [PATCH 11/14] Low: scheduler: unknown_on_node() should ignore pending
actions
Previously, unknown_on_node() looked for any lrm_rsc_op at all to decide
whether a resource is known on a node. However if the only action is pending,
the resource is not yet known.
Also drop a redundant argument and add a doxygen block. (The rsc argument is
not const due to a getDocPtr() call in the chain, as well as libxml2 calls that
are likely const in practice but aren't marked as such.)
---
lib/pengine/unpack.c | 37 +++++++++++++++++++++++++------------
1 file changed, 25 insertions(+), 12 deletions(-)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 8aead58..14dc202 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2648,19 +2648,32 @@ find_lrm_resource(const char *rsc_id, const char *node_name,
return xml;
}
+/*!
+ * \internal
+ * \brief Check whether a resource has no completed action history on a node
+ *
+ * \param[in,out] rsc Resource to check
+ * \param[in] node_name Node to check
+ *
+ * \return true if \p rsc_id is unknown on \p node_name, otherwise false
+ */
static bool
-unknown_on_node(const char *rsc_id, const char *node_name,
- pe_working_set_t *data_set)
+unknown_on_node(pe_resource_t *rsc, const char *node_name)
{
- xmlNode *lrm_resource = NULL;
-
- lrm_resource = find_lrm_resource(rsc_id, node_name, data_set);
+ bool result = false;
+ xmlXPathObjectPtr search;
+ GString *xpath = g_string_sized_new(256);
- /* If the resource has no lrm_rsc_op history on the node, that means its
- * state is unknown there.
- */
- return (lrm_resource == NULL
- || first_named_child(lrm_resource, XML_LRM_TAG_RSC_OP) == NULL);
+ pcmk__g_strcat(xpath,
+ XPATH_NODE_STATE "[@" XML_ATTR_UNAME "='", node_name, "']"
+ SUB_XPATH_LRM_RESOURCE "[@" XML_ATTR_ID "='", rsc->id, "']"
+ SUB_XPATH_LRM_RSC_OP "[@" XML_LRM_ATTR_RC "!='193']",
+ NULL);
+ search = xpath_search(rsc->cluster->input, (const char *) xpath->str);
+ result = (numXpathResults(search) == 0);
+ freeXpathObject(search);
+ g_string_free(xpath, TRUE);
+ return result;
}
/*!
@@ -3027,7 +3040,7 @@ unpack_migrate_to_failure(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op,
* Don't just consider it running there. We will get back here anyway in
* case the probe detects it's running there.
*/
- !unknown_on_node(rsc->id, target, data_set)
+ !unknown_on_node(rsc, target)
/* If the resource has newer state on the target after the migration
* events, this migrate_to no longer matters for the target.
*/
@@ -3082,7 +3095,7 @@ unpack_migrate_from_failure(pe_resource_t *rsc, pe_node_t *node,
* Don't just consider it running there. We will get back here anyway in
* case the probe detects it's running there.
*/
- !unknown_on_node(rsc->id, source, data_set)
+ !unknown_on_node(rsc, source)
/* If the resource has newer state on the source after the migration
* events, this migrate_from no longer matters for the source.
*/
--
2.31.1
From 22fbab8e0d449d2accb231dfcec94294ded27f4e Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Tue, 31 Jan 2023 12:11:19 -0600
Subject: [PATCH 12/14] Test: scheduler: add regression test for migration
intermediary
As of this commit, the cluster wrongly restarts the migrated resource
---
cts/cts-scheduler.in | 3 +
.../dot/migration-intermediary-cleaned.dot | 46 ++
.../exp/migration-intermediary-cleaned.exp | 316 +++++++++++
.../migration-intermediary-cleaned.scores | 201 +++++++
.../migration-intermediary-cleaned.summary | 94 ++++
.../xml/migration-intermediary-cleaned.xml | 513 ++++++++++++++++++
6 files changed, 1173 insertions(+)
create mode 100644 cts/scheduler/dot/migration-intermediary-cleaned.dot
create mode 100644 cts/scheduler/exp/migration-intermediary-cleaned.exp
create mode 100644 cts/scheduler/scores/migration-intermediary-cleaned.scores
create mode 100644 cts/scheduler/summary/migration-intermediary-cleaned.summary
create mode 100644 cts/scheduler/xml/migration-intermediary-cleaned.xml
diff --git a/cts/cts-scheduler.in b/cts/cts-scheduler.in
index feb5dc8..9899c36 100644
--- a/cts/cts-scheduler.in
+++ b/cts/cts-scheduler.in
@@ -387,6 +387,9 @@ TESTS = [
[ "probe-target-of-failed-migrate_to-1", "Failed migrate_to, target rejoins" ],
[ "probe-target-of-failed-migrate_to-2", "Failed migrate_to, target rejoined and probed" ],
[ "partial-live-migration-multiple-active", "Prevent running on multiple nodes due to partial live migration" ],
+ [ "migration-intermediary-cleaned",
+ "Probe live-migration intermediary with no history"
+ ],
[ "bug-lf-2422", "Dependency on partially active group - stop ocfs:*" ],
],
[
diff --git a/cts/scheduler/dot/migration-intermediary-cleaned.dot b/cts/scheduler/dot/migration-intermediary-cleaned.dot
new file mode 100644
index 0000000..09568d0
--- /dev/null
+++ b/cts/scheduler/dot/migration-intermediary-cleaned.dot
@@ -0,0 +1,46 @@
+ digraph "g" {
+"Connectivity_running_0" [ style=bold color="green" fontcolor="orange"]
+"Connectivity_start_0" -> "Connectivity_running_0" [ style = bold]
+"Connectivity_start_0" -> "ping-1_start_0 rhel8-2" [ style = bold]
+"Connectivity_start_0" [ style=bold color="green" fontcolor="orange"]
+"FencingFail_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"FencingPass_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"Fencing_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"lsb-dummy_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"migrator_monitor_0 rhel8-2" -> "migrator_start_0 rhel8-5" [ style = bold]
+"migrator_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"migrator_monitor_10000 rhel8-5" [ style=bold color="green" fontcolor="black"]
+"migrator_start_0 rhel8-5" -> "migrator_monitor_10000 rhel8-5" [ style = bold]
+"migrator_start_0 rhel8-5" [ style=bold color="green" fontcolor="black"]
+"migrator_stop_0 rhel8-2" -> "migrator_start_0 rhel8-5" [ style = bold]
+"migrator_stop_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"migrator_stop_0 rhel8-5" -> "migrator_start_0 rhel8-5" [ style = bold]
+"migrator_stop_0 rhel8-5" [ style=bold color="green" fontcolor="black"]
+"petulant_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"ping-1_monitor_0 rhel8-2" -> "Connectivity_start_0" [ style = bold]
+"ping-1_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"ping-1_monitor_60000 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"ping-1_start_0 rhel8-2" -> "Connectivity_running_0" [ style = bold]
+"ping-1_start_0 rhel8-2" -> "ping-1_monitor_60000 rhel8-2" [ style = bold]
+"ping-1_start_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"r192.168.122.207_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"r192.168.122.208_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-1_monitor_0 rhel8-2" -> "rsc_rhel8-1_start_0 rhel8-2" [ style = bold]
+"rsc_rhel8-1_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-1_monitor_5000 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-1_start_0 rhel8-2" -> "rsc_rhel8-1_monitor_5000 rhel8-2" [ style = bold]
+"rsc_rhel8-1_start_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-1_stop_0 rhel8-3" -> "rsc_rhel8-1_start_0 rhel8-2" [ style = bold]
+"rsc_rhel8-1_stop_0 rhel8-3" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-2_monitor_0 rhel8-2" -> "rsc_rhel8-2_start_0 rhel8-2" [ style = bold]
+"rsc_rhel8-2_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-2_monitor_5000 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-2_start_0 rhel8-2" -> "rsc_rhel8-2_monitor_5000 rhel8-2" [ style = bold]
+"rsc_rhel8-2_start_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-2_stop_0 rhel8-4" -> "rsc_rhel8-2_start_0 rhel8-2" [ style = bold]
+"rsc_rhel8-2_stop_0 rhel8-4" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-3_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-4_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"rsc_rhel8-5_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+"stateful-1_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
+}
diff --git a/cts/scheduler/exp/migration-intermediary-cleaned.exp b/cts/scheduler/exp/migration-intermediary-cleaned.exp
new file mode 100644
index 0000000..28fa776
--- /dev/null
+++ b/cts/scheduler/exp/migration-intermediary-cleaned.exp
@@ -0,0 +1,316 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="1" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="Fencing_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="Fencing" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="120000" key_file="/etc/pacemaker/fence_xvm.key" multicast_address="239.255.100.100" pcmk_host_list="rhel8-1 remote-rhel8-1 rhel8-2 remote-rhel8-2 rhel8-3 remote-rhel8-3 rhel8-4 remote-rhel8-4 rhel8-5 remote-rhel8-5" pcmk_host_map="remote-rhel8-1:rhel8-1;remote-rhel8-2:rhel8-2;remote-rhel8-3:rhel8-3;remote-rhel8-4:rhel8-4;remote-rhel8-5:rhel8-5;"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="19" operation="monitor" operation_key="FencingPass_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="FencingPass" class="stonith" type="fence_dummy"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" mode="pass" pcmk_host_list="rhel8-2 remote-rhel8-2 rhel8-3 remote-rhel8-3 rhel8-5 remote-rhel8-5" random_sleep_range="30"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="20" operation="monitor" operation_key="FencingFail_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="FencingFail" class="stonith" type="fence_dummy"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" mode="fail" pcmk_host_list="rhel8-4 remote-rhel8-4" random_sleep_range="30"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="41" operation="monitor" operation_key="rsc_rhel8-1_monitor_5000" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-1" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_interval="5000" CRM_meta_name="monitor" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.202"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="40" operation="start" operation_key="rsc_rhel8-1_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="40" operation="start" operation_key="rsc_rhel8-1_start_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-1" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.202"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="21" operation="monitor" operation_key="rsc_rhel8-1_monitor_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="39" operation="stop" operation_key="rsc_rhel8-1_stop_0" on_node="rhel8-3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <rsc_op id="39" operation="stop" operation_key="rsc_rhel8-1_stop_0" on_node="rhel8-3" on_node_uuid="3">
+ <primitive id="rsc_rhel8-1" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-3" CRM_meta_on_node_uuid="3" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.202"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <rsc_op id="21" operation="monitor" operation_key="rsc_rhel8-1_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-1" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.202"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <rsc_op id="44" operation="monitor" operation_key="rsc_rhel8-2_monitor_5000" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-2" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_interval="5000" CRM_meta_name="monitor" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.203"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="43" operation="start" operation_key="rsc_rhel8-2_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="43" operation="start" operation_key="rsc_rhel8-2_start_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-2" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.203"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="22" operation="monitor" operation_key="rsc_rhel8-2_monitor_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="42" operation="stop" operation_key="rsc_rhel8-2_stop_0" on_node="rhel8-4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <rsc_op id="42" operation="stop" operation_key="rsc_rhel8-2_stop_0" on_node="rhel8-4" on_node_uuid="4">
+ <primitive id="rsc_rhel8-2" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-4" CRM_meta_on_node_uuid="4" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.203"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="10">
+ <action_set>
+ <rsc_op id="22" operation="monitor" operation_key="rsc_rhel8-2_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-2" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.203"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <rsc_op id="23" operation="monitor" operation_key="rsc_rhel8-3_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-3" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.204"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="12">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="rsc_rhel8-4_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-4" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.205"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="13">
+ <action_set>
+ <rsc_op id="25" operation="monitor" operation_key="rsc_rhel8-5_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="rsc_rhel8-5" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.206"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="14">
+ <action_set>
+ <rsc_op id="53" operation="start" operation_key="migrator_start_0" on_node="rhel8-5" on_node_uuid="5">
+ <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
+ <attributes CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="26" operation="monitor" operation_key="migrator_monitor_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="51" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-5" on_node_uuid="5"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="52" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="15">
+ <action_set>
+ <rsc_op id="52" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" passwd="whatever"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="16">
+ <action_set>
+ <rsc_op id="51" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-5" on_node_uuid="5">
+ <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
+ <attributes CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="17">
+ <action_set>
+ <rsc_op id="26" operation="monitor" operation_key="migrator_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" passwd="whatever"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="18">
+ <action_set>
+ <rsc_op id="17" operation="monitor" operation_key="migrator_monitor_10000" on_node="rhel8-5" on_node_uuid="5">
+ <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
+ <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="53" operation="start" operation_key="migrator_start_0" on_node="rhel8-5" on_node_uuid="5"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="19">
+ <action_set>
+ <rsc_op id="61" operation="monitor" operation_key="ping-1_monitor_60000" internal_operation_key="ping-1:3_monitor_60000" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
+ <attributes CRM_meta_clone="3" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" debug="true" host_list="192.168.122.80" name="connected"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="20">
+ <action_set>
+ <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
+ <attributes CRM_meta_clone="3" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" debug="true" host_list="192.168.122.80" name="connected"/>
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="21">
+ <action_set>
+ <rsc_op id="27" operation="monitor" operation_key="ping-1_monitor_0" internal_operation_key="ping-1:3_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
+ <attributes CRM_meta_clone="3" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" debug="true" host_list="192.168.122.80" name="connected"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="22" priority="1000000">
+ <action_set>
+ <pseudo_event id="63" operation="running" operation_key="Connectivity_running_0">
+ <attributes CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="90000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="23">
+ <action_set>
+ <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0">
+ <attributes CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="90000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="27" operation="monitor" operation_key="ping-1_monitor_0" internal_operation_key="ping-1:3_monitor_0" on_node="rhel8-2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="24">
+ <action_set>
+ <rsc_op id="28" operation="monitor" operation_key="stateful-1_monitor_0" internal_operation_key="stateful-1:0_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="stateful-1" long-id="stateful-1:0" class="ocf" provider="pacemaker" type="Stateful"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="60000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="25">
+ <action_set>
+ <rsc_op id="29" operation="monitor" operation_key="r192.168.122.207_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="r192.168.122.207" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.207"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="26">
+ <action_set>
+ <rsc_op id="30" operation="monitor" operation_key="petulant_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="petulant" class="service" type="pacemaker-cts-dummyd@10"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="27">
+ <action_set>
+ <rsc_op id="31" operation="monitor" operation_key="r192.168.122.208_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="r192.168.122.208" class="ocf" provider="heartbeat" type="IPaddr2"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" cidr_netmask="32" ip="192.168.122.208"/>
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="28">
+ <action_set>
+ <rsc_op id="32" operation="monitor" operation_key="lsb-dummy_monitor_0" on_node="rhel8-2" on_node_uuid="2">
+ <primitive id="lsb-dummy" class="lsb" type="LSBDummy"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+</transition_graph>
diff --git a/cts/scheduler/scores/migration-intermediary-cleaned.scores b/cts/scheduler/scores/migration-intermediary-cleaned.scores
new file mode 100644
index 0000000..b3b8dff
--- /dev/null
+++ b/cts/scheduler/scores/migration-intermediary-cleaned.scores
@@ -0,0 +1,201 @@
+
+pcmk__clone_allocate: Connectivity allocation score on rhel8-1: 0
+pcmk__clone_allocate: Connectivity allocation score on rhel8-2: 0
+pcmk__clone_allocate: Connectivity allocation score on rhel8-3: 0
+pcmk__clone_allocate: Connectivity allocation score on rhel8-4: 0
+pcmk__clone_allocate: Connectivity allocation score on rhel8-5: 0
+pcmk__clone_allocate: ping-1:0 allocation score on rhel8-1: 0
+pcmk__clone_allocate: ping-1:0 allocation score on rhel8-2: 0
+pcmk__clone_allocate: ping-1:0 allocation score on rhel8-3: 1
+pcmk__clone_allocate: ping-1:0 allocation score on rhel8-4: 0
+pcmk__clone_allocate: ping-1:0 allocation score on rhel8-5: 0
+pcmk__clone_allocate: ping-1:1 allocation score on rhel8-1: 0
+pcmk__clone_allocate: ping-1:1 allocation score on rhel8-2: 0
+pcmk__clone_allocate: ping-1:1 allocation score on rhel8-3: 0
+pcmk__clone_allocate: ping-1:1 allocation score on rhel8-4: 1
+pcmk__clone_allocate: ping-1:1 allocation score on rhel8-5: 0
+pcmk__clone_allocate: ping-1:2 allocation score on rhel8-1: 0
+pcmk__clone_allocate: ping-1:2 allocation score on rhel8-2: 0
+pcmk__clone_allocate: ping-1:2 allocation score on rhel8-3: 0
+pcmk__clone_allocate: ping-1:2 allocation score on rhel8-4: 0
+pcmk__clone_allocate: ping-1:2 allocation score on rhel8-5: 1
+pcmk__clone_allocate: ping-1:3 allocation score on rhel8-1: 0
+pcmk__clone_allocate: ping-1:3 allocation score on rhel8-2: 0
+pcmk__clone_allocate: ping-1:3 allocation score on rhel8-3: 0
+pcmk__clone_allocate: ping-1:3 allocation score on rhel8-4: 0
+pcmk__clone_allocate: ping-1:3 allocation score on rhel8-5: 0
+pcmk__clone_allocate: ping-1:4 allocation score on rhel8-1: 0
+pcmk__clone_allocate: ping-1:4 allocation score on rhel8-2: 0
+pcmk__clone_allocate: ping-1:4 allocation score on rhel8-3: 0
+pcmk__clone_allocate: ping-1:4 allocation score on rhel8-4: 0
+pcmk__clone_allocate: ping-1:4 allocation score on rhel8-5: 0
+pcmk__clone_allocate: promotable-1 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: promotable-1 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: promotable-1 allocation score on rhel8-3: 0
+pcmk__clone_allocate: promotable-1 allocation score on rhel8-4: 0
+pcmk__clone_allocate: promotable-1 allocation score on rhel8-5: 0
+pcmk__clone_allocate: stateful-1:0 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: stateful-1:0 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: stateful-1:0 allocation score on rhel8-3: 11
+pcmk__clone_allocate: stateful-1:0 allocation score on rhel8-4: 0
+pcmk__clone_allocate: stateful-1:0 allocation score on rhel8-5: 0
+pcmk__clone_allocate: stateful-1:1 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: stateful-1:1 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: stateful-1:1 allocation score on rhel8-3: 0
+pcmk__clone_allocate: stateful-1:1 allocation score on rhel8-4: 6
+pcmk__clone_allocate: stateful-1:1 allocation score on rhel8-5: 0
+pcmk__clone_allocate: stateful-1:2 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: stateful-1:2 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: stateful-1:2 allocation score on rhel8-3: 0
+pcmk__clone_allocate: stateful-1:2 allocation score on rhel8-4: 0
+pcmk__clone_allocate: stateful-1:2 allocation score on rhel8-5: 6
+pcmk__clone_allocate: stateful-1:3 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: stateful-1:3 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: stateful-1:3 allocation score on rhel8-3: 0
+pcmk__clone_allocate: stateful-1:3 allocation score on rhel8-4: 0
+pcmk__clone_allocate: stateful-1:3 allocation score on rhel8-5: 0
+pcmk__clone_allocate: stateful-1:4 allocation score on rhel8-1: -INFINITY
+pcmk__clone_allocate: stateful-1:4 allocation score on rhel8-2: -INFINITY
+pcmk__clone_allocate: stateful-1:4 allocation score on rhel8-3: 10
+pcmk__clone_allocate: stateful-1:4 allocation score on rhel8-4: 5
+pcmk__clone_allocate: stateful-1:4 allocation score on rhel8-5: 5
+pcmk__group_assign: group-1 allocation score on rhel8-1: 0
+pcmk__group_assign: group-1 allocation score on rhel8-2: 0
+pcmk__group_assign: group-1 allocation score on rhel8-3: 0
+pcmk__group_assign: group-1 allocation score on rhel8-4: 0
+pcmk__group_assign: group-1 allocation score on rhel8-5: 0
+pcmk__group_assign: petulant allocation score on rhel8-1: 0
+pcmk__group_assign: petulant allocation score on rhel8-2: 0
+pcmk__group_assign: petulant allocation score on rhel8-3: 0
+pcmk__group_assign: petulant allocation score on rhel8-4: 0
+pcmk__group_assign: petulant allocation score on rhel8-5: 0
+pcmk__group_assign: r192.168.122.207 allocation score on rhel8-1: 0
+pcmk__group_assign: r192.168.122.207 allocation score on rhel8-2: 0
+pcmk__group_assign: r192.168.122.207 allocation score on rhel8-3: 0
+pcmk__group_assign: r192.168.122.207 allocation score on rhel8-4: 0
+pcmk__group_assign: r192.168.122.207 allocation score on rhel8-5: 0
+pcmk__group_assign: r192.168.122.208 allocation score on rhel8-1: 0
+pcmk__group_assign: r192.168.122.208 allocation score on rhel8-2: 0
+pcmk__group_assign: r192.168.122.208 allocation score on rhel8-3: 0
+pcmk__group_assign: r192.168.122.208 allocation score on rhel8-4: 0
+pcmk__group_assign: r192.168.122.208 allocation score on rhel8-5: 0
+pcmk__primitive_assign: Fencing allocation score on rhel8-1: 0
+pcmk__primitive_assign: Fencing allocation score on rhel8-2: 0
+pcmk__primitive_assign: Fencing allocation score on rhel8-3: 0
+pcmk__primitive_assign: Fencing allocation score on rhel8-4: 0
+pcmk__primitive_assign: Fencing allocation score on rhel8-5: 0
+pcmk__primitive_assign: FencingFail allocation score on rhel8-1: 0
+pcmk__primitive_assign: FencingFail allocation score on rhel8-2: 0
+pcmk__primitive_assign: FencingFail allocation score on rhel8-3: 0
+pcmk__primitive_assign: FencingFail allocation score on rhel8-4: 0
+pcmk__primitive_assign: FencingFail allocation score on rhel8-5: 0
+pcmk__primitive_assign: FencingPass allocation score on rhel8-1: 0
+pcmk__primitive_assign: FencingPass allocation score on rhel8-2: 0
+pcmk__primitive_assign: FencingPass allocation score on rhel8-3: 0
+pcmk__primitive_assign: FencingPass allocation score on rhel8-4: 0
+pcmk__primitive_assign: FencingPass allocation score on rhel8-5: 0
+pcmk__primitive_assign: lsb-dummy allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: lsb-dummy allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: lsb-dummy allocation score on rhel8-3: 0
+pcmk__primitive_assign: lsb-dummy allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: lsb-dummy allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: migrator allocation score on rhel8-1: 0
+pcmk__primitive_assign: migrator allocation score on rhel8-2: 0
+pcmk__primitive_assign: migrator allocation score on rhel8-3: 0
+pcmk__primitive_assign: migrator allocation score on rhel8-4: 0
+pcmk__primitive_assign: migrator allocation score on rhel8-5: 0
+pcmk__primitive_assign: petulant allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: petulant allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: petulant allocation score on rhel8-3: 0
+pcmk__primitive_assign: petulant allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: petulant allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: ping-1:0 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: ping-1:0 allocation score on rhel8-2: 0
+pcmk__primitive_assign: ping-1:0 allocation score on rhel8-3: 1
+pcmk__primitive_assign: ping-1:0 allocation score on rhel8-4: 0
+pcmk__primitive_assign: ping-1:0 allocation score on rhel8-5: 0
+pcmk__primitive_assign: ping-1:1 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: ping-1:1 allocation score on rhel8-2: 0
+pcmk__primitive_assign: ping-1:1 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: ping-1:1 allocation score on rhel8-4: 1
+pcmk__primitive_assign: ping-1:1 allocation score on rhel8-5: 0
+pcmk__primitive_assign: ping-1:2 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: ping-1:2 allocation score on rhel8-2: 0
+pcmk__primitive_assign: ping-1:2 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: ping-1:2 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: ping-1:2 allocation score on rhel8-5: 1
+pcmk__primitive_assign: ping-1:3 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: ping-1:3 allocation score on rhel8-2: 0
+pcmk__primitive_assign: ping-1:3 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: ping-1:3 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: ping-1:3 allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: ping-1:4 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: ping-1:4 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: ping-1:4 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: ping-1:4 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: ping-1:4 allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: r192.168.122.207 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: r192.168.122.207 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: r192.168.122.207 allocation score on rhel8-3: 11
+pcmk__primitive_assign: r192.168.122.207 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: r192.168.122.207 allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: r192.168.122.208 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: r192.168.122.208 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: r192.168.122.208 allocation score on rhel8-3: 0
+pcmk__primitive_assign: r192.168.122.208 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: r192.168.122.208 allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: rsc_rhel8-1 allocation score on rhel8-1: 100
+pcmk__primitive_assign: rsc_rhel8-1 allocation score on rhel8-2: 0
+pcmk__primitive_assign: rsc_rhel8-1 allocation score on rhel8-3: 0
+pcmk__primitive_assign: rsc_rhel8-1 allocation score on rhel8-4: 0
+pcmk__primitive_assign: rsc_rhel8-1 allocation score on rhel8-5: 0
+pcmk__primitive_assign: rsc_rhel8-2 allocation score on rhel8-1: 0
+pcmk__primitive_assign: rsc_rhel8-2 allocation score on rhel8-2: 100
+pcmk__primitive_assign: rsc_rhel8-2 allocation score on rhel8-3: 0
+pcmk__primitive_assign: rsc_rhel8-2 allocation score on rhel8-4: 0
+pcmk__primitive_assign: rsc_rhel8-2 allocation score on rhel8-5: 0
+pcmk__primitive_assign: rsc_rhel8-3 allocation score on rhel8-1: 0
+pcmk__primitive_assign: rsc_rhel8-3 allocation score on rhel8-2: 0
+pcmk__primitive_assign: rsc_rhel8-3 allocation score on rhel8-3: 100
+pcmk__primitive_assign: rsc_rhel8-3 allocation score on rhel8-4: 0
+pcmk__primitive_assign: rsc_rhel8-3 allocation score on rhel8-5: 0
+pcmk__primitive_assign: rsc_rhel8-4 allocation score on rhel8-1: 0
+pcmk__primitive_assign: rsc_rhel8-4 allocation score on rhel8-2: 0
+pcmk__primitive_assign: rsc_rhel8-4 allocation score on rhel8-3: 0
+pcmk__primitive_assign: rsc_rhel8-4 allocation score on rhel8-4: 100
+pcmk__primitive_assign: rsc_rhel8-4 allocation score on rhel8-5: 0
+pcmk__primitive_assign: rsc_rhel8-5 allocation score on rhel8-1: 0
+pcmk__primitive_assign: rsc_rhel8-5 allocation score on rhel8-2: 0
+pcmk__primitive_assign: rsc_rhel8-5 allocation score on rhel8-3: 0
+pcmk__primitive_assign: rsc_rhel8-5 allocation score on rhel8-4: 0
+pcmk__primitive_assign: rsc_rhel8-5 allocation score on rhel8-5: 100
+pcmk__primitive_assign: stateful-1:0 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: stateful-1:0 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: stateful-1:0 allocation score on rhel8-3: 11
+pcmk__primitive_assign: stateful-1:0 allocation score on rhel8-4: 0
+pcmk__primitive_assign: stateful-1:0 allocation score on rhel8-5: 0
+pcmk__primitive_assign: stateful-1:1 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: stateful-1:1 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: stateful-1:1 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: stateful-1:1 allocation score on rhel8-4: 6
+pcmk__primitive_assign: stateful-1:1 allocation score on rhel8-5: 0
+pcmk__primitive_assign: stateful-1:2 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: stateful-1:2 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: stateful-1:2 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: stateful-1:2 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: stateful-1:2 allocation score on rhel8-5: 6
+pcmk__primitive_assign: stateful-1:3 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: stateful-1:3 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: stateful-1:3 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: stateful-1:3 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: stateful-1:3 allocation score on rhel8-5: -INFINITY
+pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-1: -INFINITY
+pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-2: -INFINITY
+pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-3: -INFINITY
+pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-4: -INFINITY
+pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-5: -INFINITY
+stateful-1:0 promotion score on rhel8-3: 10
+stateful-1:1 promotion score on rhel8-4: 5
+stateful-1:2 promotion score on rhel8-5: 5
+stateful-1:3 promotion score on none: 0
+stateful-1:4 promotion score on none: 0
diff --git a/cts/scheduler/summary/migration-intermediary-cleaned.summary b/cts/scheduler/summary/migration-intermediary-cleaned.summary
new file mode 100644
index 0000000..5de1355
--- /dev/null
+++ b/cts/scheduler/summary/migration-intermediary-cleaned.summary
@@ -0,0 +1,94 @@
+Using the original execution date of: 2023-01-19 21:05:59Z
+Current cluster status:
+ * Node List:
+ * Online: [ rhel8-2 rhel8-3 rhel8-4 rhel8-5 ]
+ * OFFLINE: [ rhel8-1 ]
+
+ * Full List of Resources:
+ * Fencing (stonith:fence_xvm): Started rhel8-3
+ * FencingPass (stonith:fence_dummy): Started rhel8-4
+ * FencingFail (stonith:fence_dummy): Started rhel8-5
+ * rsc_rhel8-1 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * rsc_rhel8-2 (ocf:heartbeat:IPaddr2): Started rhel8-4
+ * rsc_rhel8-3 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * rsc_rhel8-4 (ocf:heartbeat:IPaddr2): Started rhel8-4
+ * rsc_rhel8-5 (ocf:heartbeat:IPaddr2): Started rhel8-5
+ * migrator (ocf:pacemaker:Dummy): Started [ rhel8-5 rhel8-2 ]
+ * Clone Set: Connectivity [ping-1]:
+ * Started: [ rhel8-3 rhel8-4 rhel8-5 ]
+ * Stopped: [ rhel8-1 rhel8-2 ]
+ * Clone Set: promotable-1 [stateful-1] (promotable):
+ * Promoted: [ rhel8-3 ]
+ * Unpromoted: [ rhel8-4 rhel8-5 ]
+ * Stopped: [ rhel8-1 rhel8-2 ]
+ * Resource Group: group-1:
+ * r192.168.122.207 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * petulant (service:pacemaker-cts-dummyd@10): Started rhel8-3
+ * r192.168.122.208 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * lsb-dummy (lsb:LSBDummy): Started rhel8-3
+
+Transition Summary:
+ * Move rsc_rhel8-1 ( rhel8-3 -> rhel8-2 )
+ * Move rsc_rhel8-2 ( rhel8-4 -> rhel8-2 )
+ * Restart migrator ( rhel8-5 )
+ * Start ping-1:3 ( rhel8-2 )
+
+Executing Cluster Transition:
+ * Resource action: Fencing monitor on rhel8-2
+ * Resource action: FencingPass monitor on rhel8-2
+ * Resource action: FencingFail monitor on rhel8-2
+ * Resource action: rsc_rhel8-1 stop on rhel8-3
+ * Resource action: rsc_rhel8-1 monitor on rhel8-2
+ * Resource action: rsc_rhel8-2 stop on rhel8-4
+ * Resource action: rsc_rhel8-2 monitor on rhel8-2
+ * Resource action: rsc_rhel8-3 monitor on rhel8-2
+ * Resource action: rsc_rhel8-4 monitor on rhel8-2
+ * Resource action: rsc_rhel8-5 monitor on rhel8-2
+ * Resource action: migrator stop on rhel8-2
+ * Resource action: migrator stop on rhel8-5
+ * Resource action: migrator monitor on rhel8-2
+ * Resource action: ping-1 monitor on rhel8-2
+ * Pseudo action: Connectivity_start_0
+ * Resource action: stateful-1 monitor on rhel8-2
+ * Resource action: r192.168.122.207 monitor on rhel8-2
+ * Resource action: petulant monitor on rhel8-2
+ * Resource action: r192.168.122.208 monitor on rhel8-2
+ * Resource action: lsb-dummy monitor on rhel8-2
+ * Resource action: rsc_rhel8-1 start on rhel8-2
+ * Resource action: rsc_rhel8-2 start on rhel8-2
+ * Resource action: migrator start on rhel8-5
+ * Resource action: migrator monitor=10000 on rhel8-5
+ * Resource action: ping-1 start on rhel8-2
+ * Pseudo action: Connectivity_running_0
+ * Resource action: rsc_rhel8-1 monitor=5000 on rhel8-2
+ * Resource action: rsc_rhel8-2 monitor=5000 on rhel8-2
+ * Resource action: ping-1 monitor=60000 on rhel8-2
+Using the original execution date of: 2023-01-19 21:05:59Z
+
+Revised Cluster Status:
+ * Node List:
+ * Online: [ rhel8-2 rhel8-3 rhel8-4 rhel8-5 ]
+ * OFFLINE: [ rhel8-1 ]
+
+ * Full List of Resources:
+ * Fencing (stonith:fence_xvm): Started rhel8-3
+ * FencingPass (stonith:fence_dummy): Started rhel8-4
+ * FencingFail (stonith:fence_dummy): Started rhel8-5
+ * rsc_rhel8-1 (ocf:heartbeat:IPaddr2): Started rhel8-2
+ * rsc_rhel8-2 (ocf:heartbeat:IPaddr2): Started rhel8-2
+ * rsc_rhel8-3 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * rsc_rhel8-4 (ocf:heartbeat:IPaddr2): Started rhel8-4
+ * rsc_rhel8-5 (ocf:heartbeat:IPaddr2): Started rhel8-5
+ * migrator (ocf:pacemaker:Dummy): Started [ rhel8-2 rhel8-5 ]
+ * Clone Set: Connectivity [ping-1]:
+ * Started: [ rhel8-2 rhel8-3 rhel8-4 rhel8-5 ]
+ * Stopped: [ rhel8-1 ]
+ * Clone Set: promotable-1 [stateful-1] (promotable):
+ * Promoted: [ rhel8-3 ]
+ * Unpromoted: [ rhel8-4 rhel8-5 ]
+ * Stopped: [ rhel8-1 rhel8-2 ]
+ * Resource Group: group-1:
+ * r192.168.122.207 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * petulant (service:pacemaker-cts-dummyd@10): Started rhel8-3
+ * r192.168.122.208 (ocf:heartbeat:IPaddr2): Started rhel8-3
+ * lsb-dummy (lsb:LSBDummy): Started rhel8-3
diff --git a/cts/scheduler/xml/migration-intermediary-cleaned.xml b/cts/scheduler/xml/migration-intermediary-cleaned.xml
new file mode 100644
index 0000000..bec7888
--- /dev/null
+++ b/cts/scheduler/xml/migration-intermediary-cleaned.xml
@@ -0,0 +1,513 @@
+<cib crm_feature_set="3.16.2" validate-with="pacemaker-3.7" epoch="61" num_updates="99" admin_epoch="0" cib-last-written="Thu Jan 19 15:04:53 2023" update-origin="rhel8-2" update-client="crm_resource" update-user="root" have-quorum="true" dc-uuid="3" execution-date="1674162359">
+ <!-- The essential conditions of this test are that a resource (migrator) has
+ live-migrated twice (from rhel8-1 to rhel8-2, then again to rhel8-5),
+ and the intermediary node has had its resource history cleaned. In this
+ situation, we should schedule a probe on the intermediary, and leave the
+ resource alone.
+ -->
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cts-stonith-enabled" name="stonith-enabled" value="1"/>
+ <nvpair id="cts-start-failure-is-fatal" name="start-failure-is-fatal" value="false"/>
+ <nvpair id="cts-pe-input-series-max" name="pe-input-series-max" value="5000"/>
+ <nvpair id="cts-shutdown-escalation" name="shutdown-escalation" value="5min"/>
+ <nvpair id="cts-batch-limit" name="batch-limit" value="10"/>
+ <nvpair id="cts-dc-deadtime" name="dc-deadtime" value="5s"/>
+ <nvpair id="cts-no-quorum-policy" name="no-quorum-policy" value="stop"/>
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="2.1.5-1181.70909c2b3b.git.el8-70909c2b3b"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="rhel8-lab"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="2" uname="rhel8-2">
+ <instance_attributes id="rhel8-2-1">
+ <nvpair id="rhel8-2-1-cts-fencing" name="cts-fencing" value="levels-and"/>
+ </instance_attributes>
+ </node>
+ <node id="5" uname="rhel8-5">
+ <instance_attributes id="rhel8-5-1">
+ <nvpair id="rhel8-5-1-cts-fencing" name="cts-fencing" value="levels-and"/>
+ </instance_attributes>
+ </node>
+ <node id="1" uname="rhel8-1"/>
+ <node id="3" uname="rhel8-3"/>
+ <node id="4" uname="rhel8-4">
+ <instance_attributes id="nodes-4">
+ <nvpair id="nodes-4-standby" name="standby" value="off"/>
+ </instance_attributes>
+ </node>
+ </nodes>
+ <resources>
+ <primitive id="Fencing" class="stonith" type="fence_xvm">
+ <meta_attributes id="Fencing-meta">
+ <nvpair id="Fencing-migration-threshold" name="migration-threshold" value="5"/>
+ </meta_attributes>
+ <instance_attributes id="Fencing-params">
+ <nvpair id="Fencing-pcmk_host_map" name="pcmk_host_map" value="remote-rhel8-1:rhel8-1;remote-rhel8-2:rhel8-2;remote-rhel8-3:rhel8-3;remote-rhel8-4:rhel8-4;remote-rhel8-5:rhel8-5;"/>
+ <nvpair id="Fencing-key_file" name="key_file" value="/etc/pacemaker/fence_xvm.key"/>
+ <nvpair id="Fencing-multicast_address" name="multicast_address" value="239.255.100.100"/>
+ <nvpair id="Fencing-pcmk_host_list" name="pcmk_host_list" value="rhel8-1 remote-rhel8-1 rhel8-2 remote-rhel8-2 rhel8-3 remote-rhel8-3 rhel8-4 remote-rhel8-4 rhel8-5 remote-rhel8-5"/>
+ </instance_attributes>
+ <operations>
+ <op id="Fencing-monitor-120s" name="monitor" interval="120s" timeout="120s"/>
+ <op id="Fencing-stop-0" name="stop" interval="0" timeout="60s"/>
+ <op id="Fencing-start-0" name="start" interval="0" timeout="60s"/>
+ </operations>
+ </primitive>
+ <primitive id="FencingPass" class="stonith" type="fence_dummy">
+ <instance_attributes id="FencingPass-params">
+ <nvpair id="FencingPass-pcmk_host_list" name="pcmk_host_list" value="rhel8-2 remote-rhel8-2 rhel8-3 remote-rhel8-3 rhel8-5 remote-rhel8-5"/>
+ <nvpair id="FencingPass-random_sleep_range" name="random_sleep_range" value="30"/>
+ <nvpair id="FencingPass-mode" name="mode" value="pass"/>
+ </instance_attributes>
+ </primitive>
+ <primitive id="FencingFail" class="stonith" type="fence_dummy">
+ <instance_attributes id="FencingFail-params">
+ <nvpair id="FencingFail-pcmk_host_list" name="pcmk_host_list" value="rhel8-4 remote-rhel8-4"/>
+ <nvpair id="FencingFail-random_sleep_range" name="random_sleep_range" value="30"/>
+ <nvpair id="FencingFail-mode" name="mode" value="fail"/>
+ </instance_attributes>
+ </primitive>
+ <primitive id="rsc_rhel8-1" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="rsc_rhel8-1-params">
+ <nvpair id="rsc_rhel8-1-ip" name="ip" value="192.168.122.202"/>
+ <nvpair id="rsc_rhel8-1-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="rsc_rhel8-1-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="rsc_rhel8-2" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="rsc_rhel8-2-params">
+ <nvpair id="rsc_rhel8-2-ip" name="ip" value="192.168.122.203"/>
+ <nvpair id="rsc_rhel8-2-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="rsc_rhel8-2-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="rsc_rhel8-3" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="rsc_rhel8-3-params">
+ <nvpair id="rsc_rhel8-3-ip" name="ip" value="192.168.122.204"/>
+ <nvpair id="rsc_rhel8-3-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="rsc_rhel8-3-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="rsc_rhel8-4" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="rsc_rhel8-4-params">
+ <nvpair id="rsc_rhel8-4-ip" name="ip" value="192.168.122.205"/>
+ <nvpair id="rsc_rhel8-4-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="rsc_rhel8-4-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="rsc_rhel8-5" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="rsc_rhel8-5-params">
+ <nvpair id="rsc_rhel8-5-ip" name="ip" value="192.168.122.206"/>
+ <nvpair id="rsc_rhel8-5-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="rsc_rhel8-5-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="migrator" class="ocf" type="Dummy" provider="pacemaker">
+ <meta_attributes id="migrator-meta">
+ <nvpair id="migrator-resource-stickiness" name="resource-stickiness" value="1"/>
+ <nvpair id="migrator-allow-migrate" name="allow-migrate" value="1"/>
+ </meta_attributes>
+ <instance_attributes id="migrator-params">
+ <nvpair id="migrator-passwd" name="passwd" value="whatever"/>
+ </instance_attributes>
+ <operations>
+ <op id="migrator-monitor-P10S" name="monitor" interval="P10S"/>
+ </operations>
+ </primitive>
+ <clone id="Connectivity">
+ <meta_attributes id="Connectivity-meta">
+ <nvpair id="Connectivity-globally-unique" name="globally-unique" value="false"/>
+ </meta_attributes>
+ <primitive id="ping-1" class="ocf" type="ping" provider="pacemaker">
+ <instance_attributes id="ping-1-params">
+ <nvpair id="ping-1-host_list" name="host_list" value="192.168.122.80"/>
+ <nvpair id="ping-1-name" name="name" value="connected"/>
+ <nvpair id="ping-1-debug" name="debug" value="true"/>
+ </instance_attributes>
+ <operations>
+ <op id="ping-1-monitor-60s" name="monitor" interval="60s"/>
+ </operations>
+ </primitive>
+ </clone>
+ <clone id="promotable-1">
+ <meta_attributes id="promotable-1-meta">
+ <nvpair id="promotable-1-promotable" name="promotable" value="true"/>
+ <nvpair id="promotable-1-clone-max" name="clone-max" value="5"/>
+ <nvpair id="promotable-1-clone-node-max" name="clone-node-max" value="1"/>
+ <nvpair id="promotable-1-promoted-max" name="promoted-max" value="1"/>
+ <nvpair id="promotable-1-promoted-node-max" name="promoted-node-max" value="1"/>
+ </meta_attributes>
+ <primitive id="stateful-1" class="ocf" type="Stateful" provider="pacemaker">
+ <operations>
+ <op id="stateful-1-monitor-15s" name="monitor" interval="15s" timeout="60s"/>
+ <op id="stateful-1-monitor-16s" name="monitor" interval="16s" timeout="60s" role="Promoted"/>
+ </operations>
+ </primitive>
+ </clone>
+ <group id="group-1">
+ <primitive id="r192.168.122.207" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="r192.168.122.207-params">
+ <nvpair id="r192.168.122.207-ip" name="ip" value="192.168.122.207"/>
+ <nvpair id="r192.168.122.207-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="r192.168.122.207-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ <primitive id="petulant" class="service" type="pacemaker-cts-dummyd@10">
+ <operations>
+ <op id="petulant-monitor-P10S" name="monitor" interval="P10S"/>
+ </operations>
+ </primitive>
+ <primitive id="r192.168.122.208" class="ocf" type="IPaddr2" provider="heartbeat">
+ <instance_attributes id="r192.168.122.208-params">
+ <nvpair id="r192.168.122.208-ip" name="ip" value="192.168.122.208"/>
+ <nvpair id="r192.168.122.208-cidr_netmask" name="cidr_netmask" value="32"/>
+ </instance_attributes>
+ <operations>
+ <op id="r192.168.122.208-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ </group>
+ <primitive id="lsb-dummy" class="lsb" type="LSBDummy">
+ <operations>
+ <op id="lsb-dummy-monitor-5s" name="monitor" interval="5s"/>
+ </operations>
+ </primitive>
+ </resources>
+ <constraints>
+ <rsc_location id="prefer-rhel8-1" rsc="rsc_rhel8-1">
+ <rule id="prefer-rhel8-1-r" boolean-op="and" score="100">
+ <expression id="prefer-rhel8-1-e" attribute="#uname" operation="eq" value="rhel8-1"/>
+ </rule>
+ </rsc_location>
+ <rsc_location id="prefer-rhel8-2" rsc="rsc_rhel8-2">
+ <rule id="prefer-rhel8-2-r" boolean-op="and" score="100">
+ <expression id="prefer-rhel8-2-e" attribute="#uname" operation="eq" value="rhel8-2"/>
+ </rule>
+ </rsc_location>
+ <rsc_location id="prefer-rhel8-3" rsc="rsc_rhel8-3">
+ <rule id="prefer-rhel8-3-r" boolean-op="and" score="100">
+ <expression id="prefer-rhel8-3-e" attribute="#uname" operation="eq" value="rhel8-3"/>
+ </rule>
+ </rsc_location>
+ <rsc_location id="prefer-rhel8-4" rsc="rsc_rhel8-4">
+ <rule id="prefer-rhel8-4-r" boolean-op="and" score="100">
+ <expression id="prefer-rhel8-4-e" attribute="#uname" operation="eq" value="rhel8-4"/>
+ </rule>
+ </rsc_location>
+ <rsc_location id="prefer-rhel8-5" rsc="rsc_rhel8-5">
+ <rule id="prefer-rhel8-5-r" boolean-op="and" score="100">
+ <expression id="prefer-rhel8-5-e" attribute="#uname" operation="eq" value="rhel8-5"/>
+ </rule>
+ </rsc_location>
+ <rsc_location id="prefer-connected" rsc="promotable-1">
+ <rule id="connected" boolean-op="or" score="-INFINITY">
+ <expression id="m1-connected-1" attribute="connected" operation="lt" value="1"/>
+ <expression id="m1-connected-2" attribute="connected" operation="not_defined"/>
+ </rule>
+ </rsc_location>
+ <rsc_order id="group-1-after-promotable-1" first="promotable-1" then="group-1" kind="Mandatory" first-action="promote" then-action="start"/>
+ <rsc_colocation id="group-1-with-promotable-1" rsc="group-1" with-rsc="promotable-1" score="INFINITY" with-rsc-role="Promoted"/>
+ <rsc_order id="lsb-dummy-after-group-1" first="group-1" then="lsb-dummy" kind="Mandatory" first-action="start" then-action="start"/>
+ <rsc_colocation id="lsb-dummy-with-group-1" rsc="lsb-dummy" with-rsc="group-1" score="INFINITY"/>
+ </constraints>
+ <fencing-topology>
+ <fencing-level id="cts-remote-rhel8-2.1" target="remote-rhel8-2" index="1" devices="FencingPass,Fencing"/>
+ <fencing-level id="cts-rhel8-3.1" target="rhel8-3" index="1" devices="FencingPass,Fencing"/>
+ <fencing-level id="cts-remote-rhel8-3.1" target="remote-rhel8-3" index="1" devices="FencingPass,Fencing"/>
+ <fencing-level id="cts-rhel8-4.1" target="rhel8-4" index="1" devices="FencingFail"/>
+ <fencing-level id="cts-rhel8-4.2" target="rhel8-4" index="2" devices="Fencing"/>
+ <fencing-level id="cts-remote-rhel8-4.1" target="remote-rhel8-4" index="1" devices="FencingFail"/>
+ <fencing-level id="cts-remote-rhel8-4.2" target="remote-rhel8-4" index="2" devices="Fencing"/>
+ <fencing-level id="cts-remote-rhel8-5.1" target="remote-rhel8-5" index="1" devices="FencingPass,Fencing"/>
+ <fencing-level id="cts-fencing-levels-and.1" index="1" devices="FencingPass,Fencing" target-attribute="cts-fencing" target-value="levels-and"/>
+ </fencing-topology>
+ <op_defaults>
+ <meta_attributes id="cts-op_defaults-meta">
+ <nvpair id="cts-op_defaults-timeout" name="timeout" value="90s"/>
+ </meta_attributes>
+ </op_defaults>
+ <alerts>
+ <alert id="alert-1" path="/var/lib/pacemaker/notify.sh">
+ <recipient id="alert-1-recipient-1" value="/run/crm/alert.log"/>
+ </alert>
+ </alerts>
+ </configuration>
+ <status>
+ <node_state id="2" uname="rhel8-2" in_ccm="true" crmd="online" crm-debug-origin="do_state_transition" join="member" expected="member">
+ <lrm id="2">
+ <lrm_resources/>
+ </lrm>
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-.feature-set" name="#feature-set" value="3.16.2"/>
+ </instance_attributes>
+ </transient_attributes>
+ </node_state>
+ <node_state id="3" uname="rhel8-3" in_ccm="true" crmd="online" crm-debug-origin="do_state_transition" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-.feature-set" name="#feature-set" value="3.16.2"/>
+ <nvpair id="status-3-connected" name="connected" value="1"/>
+ <nvpair id="status-3-master-stateful-1" name="master-stateful-1" value="10"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="r192.168.122.207" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.207_last_0" operation_key="r192.168.122.207_start_0" operation="start" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="58:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;58:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="136" rc-code="0" op-status="0" interval="0" last-rc-change="1674162336" exec-time="55" queue-time="0" op-digest="455141de0d85faf791392b0857f9dea1"/>
+ <lrm_rsc_op id="r192.168.122.207_monitor_5000" operation_key="r192.168.122.207_monitor_5000" operation="monitor" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="59:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;59:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="138" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162336" exec-time="37" queue-time="0" op-digest="e265b034f446ca5c724ff25c223f1078"/>
+ </lrm_resource>
+ <lrm_resource id="r192.168.122.208" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.208_last_0" operation_key="r192.168.122.208_start_0" operation="start" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="62:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;62:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="144" rc-code="0" op-status="0" interval="0" last-rc-change="1674162346" exec-time="57" queue-time="0" op-digest="d62599e347d2c3a524c13e135846a774"/>
+ <lrm_rsc_op id="r192.168.122.208_monitor_5000" operation_key="r192.168.122.208_monitor_5000" operation="monitor" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="63:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;63:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="146" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162346" exec-time="43" queue-time="0" op-digest="10ff4c567237e36994b5c19f129f6a1e"/>
+ </lrm_resource>
+ <lrm_resource id="FencingFail" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingFail_last_0" operation_key="FencingFail_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="27:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;27:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-3" call-id="87" rc-code="0" op-status="0" interval="0" last-rc-change="1674162210" exec-time="0" queue-time="0" op-digest="d3c544c746b64c636fc7a3c0ebf35fdd"/>
+ </lrm_resource>
+ <lrm_resource id="lsb-dummy" type="LSBDummy" class="lsb">
+ <lrm_rsc_op id="lsb-dummy_last_0" operation_key="lsb-dummy_start_0" operation="start" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="68:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;68:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="148" rc-code="0" op-status="0" interval="0" last-rc-change="1674162346" exec-time="12" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="lsb-dummy_monitor_5000" operation_key="lsb-dummy_monitor_5000" operation="monitor" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="69:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;69:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="150" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162346" exec-time="12" queue-time="0" op-digest="8f6a313464b7f9e3a31cb448458b700e"/>
+ </lrm_resource>
+ <lrm_resource id="FencingPass" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingPass_last_0" operation_key="FencingPass_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="39:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;39:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="92" rc-code="0" op-status="0" interval="0" last-rc-change="1674162244" exec-time="0" queue-time="0" op-digest="147576adc6e9926464990826fe2d02ca"/>
+ </lrm_resource>
+ <lrm_resource id="Fencing" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="Fencing_last_0" operation_key="Fencing_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="21:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;21:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="127" rc-code="0" op-status="0" interval="0" last-rc-change="1674162323" exec-time="37" queue-time="0" op-digest="bf974d77f2d4d33e434be1f89e362a52"/>
+ <lrm_rsc_op id="Fencing_monitor_120000" operation_key="Fencing_monitor_120000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="22:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;22:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="129" rc-code="0" op-status="0" interval="120000" last-rc-change="1674162323" exec-time="52" queue-time="0" op-digest="24c9c9364f847dcb857d6fb4e1b4d3c8"/>
+ </lrm_resource>
+ <lrm_resource id="petulant" type="pacemaker-cts-dummyd@10" class="service">
+ <lrm_rsc_op id="petulant_last_0" operation_key="petulant_start_0" operation="start" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="60:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;60:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="140" rc-code="0" op-status="0" interval="0" last-rc-change="1674162346" exec-time="10215" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="petulant_monitor_10000" operation_key="petulant_monitor_10000" operation="monitor" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="61:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:0;61:0:0:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="142" rc-code="0" op-status="0" interval="10000" last-rc-change="1674162346" exec-time="9" queue-time="0" op-digest="8f6a313464b7f9e3a31cb448458b700e"/>
+ </lrm_resource>
+ <lrm_resource id="ping-1" type="ping" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="ping-1_last_0" operation_key="ping-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="62:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;62:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="56" rc-code="0" op-status="0" interval="0" last-rc-change="1674162118" exec-time="2139" queue-time="0" op-digest="a53fc9fb0118a43d3be0fceaf2348d38" op-force-restart=" use_fping failure_score options host_list multiplier name pidfile " op-restart-digest="b04a44b98b5edbf24eae263f0e6ee0c3"/>
+ <lrm_rsc_op id="ping-1_monitor_60000" operation_key="ping-1_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;63:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="75" rc-code="0" op-status="0" interval="60000" last-rc-change="1674162120" exec-time="2101" queue-time="0" op-digest="6b1eba5fe19d16fa21bf0501bbe5c0cd"/>
+ </lrm_resource>
+ <lrm_resource id="stateful-1" type="Stateful" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="stateful-1_last_0" operation_key="stateful-1_promote_0" operation="promote" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="43:19:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;43:19:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="131" rc-code="0" op-status="0" interval="0" last-rc-change="1674162334" exec-time="30" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="stateful-1_monitor_16000" operation_key="stateful-1_monitor_16000" operation="monitor" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="45:0:8:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" transition-magic="0:8;45:0:8:9001a158-ff9a-47dd-a9f7-ae46bd457f3c" exit-reason="" on_node="rhel8-3" call-id="134" rc-code="8" op-status="0" interval="16000" last-rc-change="1674162336" exec-time="16" queue-time="0" op-digest="873ed4f07792aa8ff18f3254244675ea"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-1" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-1_last_0" operation_key="rsc_rhel8-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="34:12:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;34:12:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="116" rc-code="0" op-status="0" interval="0" last-rc-change="1674162294" exec-time="62" queue-time="0" op-digest="75df1567eb9457f8f3c4486bbf875846"/>
+ <lrm_rsc_op id="rsc_rhel8-1_monitor_5000" operation_key="rsc_rhel8-1_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="35:12:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;35:12:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-3" call-id="120" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162294" exec-time="47" queue-time="0" op-digest="045c3d6f5e29b94dc4e3fbfd6c2c0693"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-2" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-2_last_0" operation_key="rsc_rhel8-2_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="24:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;24:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="26" rc-code="7" op-status="0" interval="0" last-rc-change="1674162117" exec-time="86" queue-time="0" op-digest="ced6f8a1916ebbe555cedafe69985e63"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-3" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-3_last_0" operation_key="rsc_rhel8-3_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="46:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;46:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="39" rc-code="0" op-status="0" interval="0" last-rc-change="1674162118" exec-time="166" queue-time="0" op-digest="3a5f279381f73d4be861526d72bb17a3"/>
+ <lrm_rsc_op id="rsc_rhel8-3_monitor_5000" operation_key="rsc_rhel8-3_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="47:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;47:9:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="50" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162118" exec-time="137" queue-time="0" op-digest="a1b2eeaa8d23ff33ffebd44f45931017"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-4" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-4_last_0" operation_key="rsc_rhel8-4_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="26:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;26:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="34" rc-code="7" op-status="0" interval="0" last-rc-change="1674162118" exec-time="76" queue-time="0" op-digest="b4b6b30b67042d5bc4c1735b0df27dc0"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-5" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-5_last_0" operation_key="rsc_rhel8-5_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="27:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;27:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="38" rc-code="7" op-status="0" interval="0" last-rc-change="1674162118" exec-time="87" queue-time="0" op-digest="aca525581410dfda70831f2846b9807d"/>
+ </lrm_resource>
+ <lrm_resource id="migrator" type="Dummy" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="migrator_last_0" operation_key="migrator_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="28:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;28:9:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-3" call-id="43" rc-code="7" op-status="0" interval="0" last-rc-change="1674162118" exec-time="21" queue-time="0" op-digest="5de129d7fe42dbcfe537f2c63b1921b6" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel8-4" in_ccm="true" crmd="online" crm-debug-origin="do_state_transition" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-.feature-set" name="#feature-set" value="3.16.2"/>
+ <nvpair id="status-4-connected" name="connected" value="1"/>
+ <nvpair id="status-4-master-stateful-1" name="master-stateful-1" value="5"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="r192.168.122.207" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.207_last_0" operation_key="r192.168.122.207_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="31:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;31:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="60" rc-code="7" op-status="0" interval="0" last-rc-change="1674162147" exec-time="87" queue-time="0" op-digest="455141de0d85faf791392b0857f9dea1"/>
+ </lrm_resource>
+ <lrm_resource id="r192.168.122.208" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.208_last_0" operation_key="r192.168.122.208_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="33:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;33:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="69" rc-code="7" op-status="0" interval="0" last-rc-change="1674162148" exec-time="45" queue-time="0" op-digest="d62599e347d2c3a524c13e135846a774"/>
+ </lrm_resource>
+ <lrm_resource id="FencingFail" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingFail_last_0" operation_key="FencingFail_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="41:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;41:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-4" call-id="94" rc-code="0" op-status="0" interval="0" last-rc-change="1674162244" exec-time="0" queue-time="0" op-digest="d3c544c746b64c636fc7a3c0ebf35fdd"/>
+ </lrm_resource>
+ <lrm_resource id="lsb-dummy" type="LSBDummy" class="lsb">
+ <lrm_rsc_op id="lsb-dummy_last_0" operation_key="lsb-dummy_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="34:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;34:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="73" rc-code="7" op-status="0" interval="0" last-rc-change="1674162148" exec-time="13" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="FencingPass" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingPass_last_0" operation_key="FencingPass_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="40:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;40:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-4" call-id="97" rc-code="0" op-status="0" interval="0" last-rc-change="1674162244" exec-time="28121" queue-time="0" op-digest="147576adc6e9926464990826fe2d02ca"/>
+ </lrm_resource>
+ <lrm_resource id="Fencing" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="Fencing_last_0" operation_key="Fencing_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="20:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;20:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="13" rc-code="7" op-status="0" interval="0" last-rc-change="1674162147" exec-time="3" queue-time="0" op-digest="bf974d77f2d4d33e434be1f89e362a52"/>
+ </lrm_resource>
+ <lrm_resource id="petulant" type="pacemaker-cts-dummyd@10" class="service">
+ <lrm_rsc_op id="petulant_last_0" operation_key="petulant_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="32:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;32:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="65" rc-code="7" op-status="0" interval="0" last-rc-change="1674162148" exec-time="25" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="ping-1" type="ping" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="ping-1_last_0" operation_key="ping-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="62:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;62:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="61" rc-code="0" op-status="0" interval="0" last-rc-change="1674162147" exec-time="2093" queue-time="0" op-digest="a53fc9fb0118a43d3be0fceaf2348d38" op-force-restart=" use_fping failure_score options host_list multiplier name pidfile " op-restart-digest="b04a44b98b5edbf24eae263f0e6ee0c3"/>
+ <lrm_rsc_op id="ping-1_monitor_60000" operation_key="ping-1_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;63:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="75" rc-code="0" op-status="0" interval="60000" last-rc-change="1674162150" exec-time="2104" queue-time="0" op-digest="6b1eba5fe19d16fa21bf0501bbe5c0cd"/>
+ </lrm_resource>
+ <lrm_resource id="stateful-1" type="Stateful" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="stateful-1_last_0" operation_key="stateful-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:16:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;63:16:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="77" rc-code="0" op-status="0" interval="0" last-rc-change="1674162155" exec-time="46" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="stateful-1_monitor_15000" operation_key="stateful-1_monitor_15000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="61:17:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;61:17:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="79" rc-code="0" op-status="0" interval="15000" last-rc-change="1674162155" exec-time="22" queue-time="0" op-digest="873ed4f07792aa8ff18f3254244675ea"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-1" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-1_last_0" operation_key="rsc_rhel8-1_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="23:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;23:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="22" rc-code="7" op-status="0" interval="0" last-rc-change="1674162147" exec-time="78" queue-time="0" op-digest="75df1567eb9457f8f3c4486bbf875846"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-2" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-2_last_0" operation_key="rsc_rhel8-2_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="30:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;30:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-4" call-id="104" rc-code="0" op-status="0" interval="0" last-rc-change="1674162323" exec-time="107" queue-time="0" op-digest="ced6f8a1916ebbe555cedafe69985e63"/>
+ <lrm_rsc_op id="rsc_rhel8-2_monitor_5000" operation_key="rsc_rhel8-2_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="31:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;31:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-4" call-id="106" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162324" exec-time="80" queue-time="0" op-digest="4385e7bd76844b9bc880a410b317b8ab"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-3" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-3_last_0" operation_key="rsc_rhel8-3_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="25:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;25:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="30" rc-code="7" op-status="0" interval="0" last-rc-change="1674162147" exec-time="86" queue-time="0" op-digest="3a5f279381f73d4be861526d72bb17a3"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-4" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-4_last_0" operation_key="rsc_rhel8-4_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="48:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;48:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="39" rc-code="0" op-status="0" interval="0" last-rc-change="1674162147" exec-time="123" queue-time="0" op-digest="b4b6b30b67042d5bc4c1735b0df27dc0"/>
+ <lrm_rsc_op id="rsc_rhel8-4_monitor_5000" operation_key="rsc_rhel8-4_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="49:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;49:15:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="49" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162147" exec-time="132" queue-time="0" op-digest="8ee22149973acaa2c4a338cde274ee1b"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-5" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-5_last_0" operation_key="rsc_rhel8-5_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="49:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;49:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-4" call-id="88" rc-code="0" op-status="0" interval="0" last-rc-change="1674162173" exec-time="76" queue-time="0" op-digest="aca525581410dfda70831f2846b9807d"/>
+ </lrm_resource>
+ <lrm_resource id="migrator" type="Dummy" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="migrator_last_0" operation_key="migrator_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="28:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:7;28:15:7:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-4" call-id="43" rc-code="7" op-status="0" interval="0" last-rc-change="1674162147" exec-time="17" queue-time="0" op-digest="5de129d7fe42dbcfe537f2c63b1921b6" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="5" uname="rhel8-5" in_ccm="true" crmd="online" crm-debug-origin="do_state_transition" join="member" expected="member">
+ <transient_attributes id="5">
+ <instance_attributes id="status-5">
+ <nvpair id="status-5-.feature-set" name="#feature-set" value="3.16.2"/>
+ <nvpair id="status-5-connected" name="connected" value="1"/>
+ <nvpair id="status-5-master-stateful-1" name="master-stateful-1" value="5"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="5">
+ <lrm_resources>
+ <lrm_resource id="r192.168.122.207" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.207_last_0" operation_key="r192.168.122.207_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="31:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;31:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="63" rc-code="7" op-status="0" interval="0" last-rc-change="1674162178" exec-time="44" queue-time="0" op-digest="455141de0d85faf791392b0857f9dea1"/>
+ </lrm_resource>
+ <lrm_resource id="r192.168.122.208" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.208_last_0" operation_key="r192.168.122.208_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="33:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;33:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="71" rc-code="7" op-status="0" interval="0" last-rc-change="1674162178" exec-time="47" queue-time="0" op-digest="d62599e347d2c3a524c13e135846a774"/>
+ </lrm_resource>
+ <lrm_resource id="FencingFail" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingFail_last_0" operation_key="FencingFail_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="42:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;42:1:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-5" call-id="86" rc-code="0" op-status="0" interval="0" last-rc-change="1674162244" exec-time="8094" queue-time="0" op-digest="d3c544c746b64c636fc7a3c0ebf35fdd"/>
+ </lrm_resource>
+ <lrm_resource id="lsb-dummy" type="LSBDummy" class="lsb">
+ <lrm_rsc_op id="lsb-dummy_last_0" operation_key="lsb-dummy_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="34:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;34:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="75" rc-code="7" op-status="0" interval="0" last-rc-change="1674162178" exec-time="12" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="FencingPass" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingPass_last_0" operation_key="FencingPass_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="21:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;21:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="13" rc-code="7" op-status="0" interval="0" last-rc-change="1674162173" exec-time="0" queue-time="0" op-digest="147576adc6e9926464990826fe2d02ca"/>
+ </lrm_resource>
+ <lrm_resource id="Fencing" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="Fencing_last_0" operation_key="Fencing_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="20:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;20:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="9" rc-code="7" op-status="0" interval="0" last-rc-change="1674162173" exec-time="0" queue-time="0" op-digest="bf974d77f2d4d33e434be1f89e362a52"/>
+ </lrm_resource>
+ <lrm_resource id="petulant" type="pacemaker-cts-dummyd@10" class="service">
+ <lrm_rsc_op id="petulant_last_0" operation_key="petulant_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="32:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;32:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="67" rc-code="7" op-status="0" interval="0" last-rc-change="1674162178" exec-time="26" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="ping-1" type="ping" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="ping-1_last_0" operation_key="ping-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="62:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;62:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="56" rc-code="0" op-status="0" interval="0" last-rc-change="1674162173" exec-time="2078" queue-time="0" op-digest="a53fc9fb0118a43d3be0fceaf2348d38" op-force-restart=" use_fping failure_score options host_list multiplier name pidfile " op-restart-digest="b04a44b98b5edbf24eae263f0e6ee0c3"/>
+ <lrm_rsc_op id="ping-1_monitor_60000" operation_key="ping-1_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;63:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="58" rc-code="0" op-status="0" interval="60000" last-rc-change="1674162176" exec-time="2112" queue-time="0" op-digest="6b1eba5fe19d16fa21bf0501bbe5c0cd"/>
+ </lrm_resource>
+ <lrm_resource id="stateful-1" type="Stateful" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="stateful-1_last_0" operation_key="stateful-1_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:2:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;63:2:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="76" rc-code="0" op-status="0" interval="0" last-rc-change="1674162181" exec-time="49" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="stateful-1_monitor_15000" operation_key="stateful-1_monitor_15000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:3:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;63:3:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="78" rc-code="0" op-status="0" interval="15000" last-rc-change="1674162181" exec-time="24" queue-time="0" op-digest="873ed4f07792aa8ff18f3254244675ea"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-1" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-1_last_0" operation_key="rsc_rhel8-1_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="38:2:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;38:2:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-5" call-id="89" rc-code="0" op-status="0" interval="0" last-rc-change="1674162273" exec-time="54" queue-time="0" op-digest="75df1567eb9457f8f3c4486bbf875846"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-2" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-2_last_0" operation_key="rsc_rhel8-2_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="24:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;24:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="25" rc-code="7" op-status="0" interval="0" last-rc-change="1674162173" exec-time="43" queue-time="0" op-digest="ced6f8a1916ebbe555cedafe69985e63"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-3" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-3_last_0" operation_key="rsc_rhel8-3_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="25:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;25:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="29" rc-code="7" op-status="0" interval="0" last-rc-change="1674162173" exec-time="43" queue-time="0" op-digest="3a5f279381f73d4be861526d72bb17a3"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-4" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-4_last_0" operation_key="rsc_rhel8-4_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="26:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:7;26:1:7:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="33" rc-code="7" op-status="0" interval="0" last-rc-change="1674162173" exec-time="45" queue-time="0" op-digest="b4b6b30b67042d5bc4c1735b0df27dc0"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-5" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-5_last_0" operation_key="rsc_rhel8-5_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="50:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;50:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="38" rc-code="0" op-status="0" interval="0" last-rc-change="1674162173" exec-time="69" queue-time="0" op-digest="aca525581410dfda70831f2846b9807d"/>
+ <lrm_rsc_op id="rsc_rhel8-5_monitor_5000" operation_key="rsc_rhel8-5_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="51:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;51:1:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-5" call-id="40" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162173" exec-time="73" queue-time="0" op-digest="51292f6c89131cf04bf857325f0e4041"/>
+ </lrm_resource>
+ <lrm_resource id="migrator" type="Dummy" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="migrator_migrate_from_0" operation_key="migrator_migrate_from_0" operation="migrate_from" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="42:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;42:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-5" call-id="97" rc-code="0" op-status="0" interval="0" last-rc-change="1674162324" exec-time="22" queue-time="0" migrate_source="rhel8-2" migrate_target="rhel8-5" op-digest="5de129d7fe42dbcfe537f2c63b1921b6" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="migrator_monitor_10000" operation_key="migrator_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="40:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" transition-magic="0:0;40:16:0:cf4a396e-f29c-4391-acd7-ee32f62dd8c7" exit-reason="" on_node="rhel8-5" call-id="99" rc-code="0" op-status="0" interval="10000" last-rc-change="1674162324" exec-time="21" queue-time="0" op-digest="9210327bce4f7670c7b350bf32101791" op-secure-params=" passwd " op-secure-digest="8f6a313464b7f9e3a31cb448458b700e"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="1" uname="rhel8-1" in_ccm="false" crmd="offline" crm-debug-origin="do_state_transition" join="down" expected="down">
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="r192.168.122.207" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.207_last_0" operation_key="r192.168.122.207_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="31:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;31:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="64" rc-code="7" op-status="0" interval="0" last-rc-change="1674162027" exec-time="44" queue-time="0" op-digest="455141de0d85faf791392b0857f9dea1"/>
+ </lrm_resource>
+ <lrm_resource id="r192.168.122.208" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="r192.168.122.208_last_0" operation_key="r192.168.122.208_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="33:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;33:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="72" rc-code="7" op-status="0" interval="0" last-rc-change="1674162028" exec-time="40" queue-time="0" op-digest="d62599e347d2c3a524c13e135846a774"/>
+ </lrm_resource>
+ <lrm_resource id="FencingFail" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingFail_last_0" operation_key="FencingFail_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="22:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;22:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="18" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="0" queue-time="0" op-digest="d3c544c746b64c636fc7a3c0ebf35fdd"/>
+ </lrm_resource>
+ <lrm_resource id="lsb-dummy" type="LSBDummy" class="lsb">
+ <lrm_rsc_op id="lsb-dummy_last_0" operation_key="lsb-dummy_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="34:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;34:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="76" rc-code="7" op-status="0" interval="0" last-rc-change="1674162028" exec-time="12" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="FencingPass" type="fence_dummy" class="stonith">
+ <lrm_rsc_op id="FencingPass_last_0" operation_key="FencingPass_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="21:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;21:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="14" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="0" queue-time="0" op-digest="147576adc6e9926464990826fe2d02ca"/>
+ </lrm_resource>
+ <lrm_resource id="Fencing" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="Fencing_last_0" operation_key="Fencing_stop_0" operation="stop" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="22:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;22:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="98" rc-code="0" op-status="0" interval="0" last-rc-change="1674162210" exec-time="0" queue-time="0" op-digest="bf974d77f2d4d33e434be1f89e362a52"/>
+ <lrm_rsc_op id="Fencing_monitor_120000" operation_key="Fencing_monitor_120000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="24:13:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:0;24:13:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="83" rc-code="0" op-status="0" interval="120000" last-rc-change="1674162031" exec-time="45" queue-time="0" op-digest="24c9c9364f847dcb857d6fb4e1b4d3c8"/>
+ </lrm_resource>
+ <lrm_resource id="petulant" type="pacemaker-cts-dummyd@10" class="service">
+ <lrm_rsc_op id="petulant_last_0" operation_key="petulant_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="32:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;32:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="68" rc-code="7" op-status="0" interval="0" last-rc-change="1674162028" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ </lrm_resource>
+ <lrm_resource id="ping-1" type="ping" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="ping-1_last_0" operation_key="ping-1_stop_0" operation="stop" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="53:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;53:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="105" rc-code="0" op-status="0" interval="0" last-rc-change="1674162210" exec-time="115" queue-time="0" op-digest="a53fc9fb0118a43d3be0fceaf2348d38" op-force-restart=" use_fping failure_score options host_list multiplier name pidfile " op-restart-digest="b04a44b98b5edbf24eae263f0e6ee0c3"/>
+ <lrm_rsc_op id="ping-1_monitor_60000" operation_key="ping-1_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="63:10:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:0;63:10:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="59" rc-code="0" op-status="0" interval="60000" last-rc-change="1674162025" exec-time="2110" queue-time="0" op-digest="6b1eba5fe19d16fa21bf0501bbe5c0cd"/>
+ </lrm_resource>
+ <lrm_resource id="stateful-1" type="Stateful" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="stateful-1_last_0" operation_key="stateful-1_stop_0" operation="stop" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="68:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;68:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="114" rc-code="0" op-status="0" interval="0" last-rc-change="1674162211" exec-time="83" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="stateful-1_monitor_15000" operation_key="stateful-1_monitor_15000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="65:12:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:0;65:12:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="79" rc-code="0" op-status="0" interval="15000" last-rc-change="1674162030" exec-time="21" queue-time="0" op-digest="873ed4f07792aa8ff18f3254244675ea"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-1" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-1_last_0" operation_key="rsc_rhel8-1_stop_0" operation="stop" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="29:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;29:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="100" rc-code="0" op-status="0" interval="0" last-rc-change="1674162210" exec-time="240" queue-time="0" op-digest="75df1567eb9457f8f3c4486bbf875846"/>
+ <lrm_rsc_op id="rsc_rhel8-1_monitor_5000" operation_key="rsc_rhel8-1_monitor_5000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="43:10:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:0;43:10:0:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="25" rc-code="0" op-status="0" interval="5000" last-rc-change="1674162023" exec-time="42" queue-time="0" op-digest="045c3d6f5e29b94dc4e3fbfd6c2c0693"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-2" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-2_last_0" operation_key="rsc_rhel8-2_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="24:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;24:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="30" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="41" queue-time="0" op-digest="ced6f8a1916ebbe555cedafe69985e63"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-3" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-3_last_0" operation_key="rsc_rhel8-3_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="25:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;25:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="34" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="41" queue-time="0" op-digest="3a5f279381f73d4be861526d72bb17a3"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-4" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-4_last_0" operation_key="rsc_rhel8-4_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="26:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;26:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="38" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="40" queue-time="0" op-digest="b4b6b30b67042d5bc4c1735b0df27dc0"/>
+ </lrm_resource>
+ <lrm_resource id="rsc_rhel8-5" type="IPaddr2" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="rsc_rhel8-5_last_0" operation_key="rsc_rhel8-5_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="27:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" transition-magic="0:7;27:10:7:51efc271-30bb-4fed-801e-bcd0cb1c3fe4" exit-reason="" on_node="rhel8-1" call-id="42" rc-code="7" op-status="0" interval="0" last-rc-change="1674162023" exec-time="41" queue-time="0" op-digest="aca525581410dfda70831f2846b9807d"/>
+ </lrm_resource>
+ <lrm_resource id="migrator" type="Dummy" class="ocf" provider="pacemaker">
+ <lrm_rsc_op id="migrator_migrate_from_0" operation_key="migrator_migrate_from_0" operation="migrate_from" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="39:11:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;39:11:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-1" call-id="89" rc-code="0" op-status="0" interval="0" last-rc-change="1674162129" exec-time="33" queue-time="0" migrate_source="rhel8-4" migrate_target="rhel8-1" op-digest="5de129d7fe42dbcfe537f2c63b1921b6" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="migrator_monitor_10000" operation_key="migrator_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.16.2" transition-key="38:11:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" transition-magic="0:0;38:11:0:46805950-c15e-4bfb-9bc7-0ad7b331f8ff" exit-reason="" on_node="rhel8-1" call-id="91" rc-code="0" op-status="0" interval="10000" last-rc-change="1674162129" exec-time="19" queue-time="0" op-digest="9210327bce4f7670c7b350bf32101791" op-secure-params=" passwd " op-secure-digest="8f6a313464b7f9e3a31cb448458b700e"/>
+ <lrm_rsc_op id="migrator_migrate_to_0" operation_key="migrator_migrate_to_0" operation="migrate_to" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="43:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;43:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="109" rc-code="0" op-status="0" interval="0" last-rc-change="1674162210" exec-time="66" queue-time="0" migrate_source="rhel8-1" migrate_target="rhel8-2" op-digest="5de129d7fe42dbcfe537f2c63b1921b6" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="migrator_last_0" operation_key="migrator_stop_0" operation="stop" crm-debug-origin="controld_update_resource_history" crm_feature_set="3.16.2" transition-key="40:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" transition-magic="0:0;40:4:0:a2ac5181-c5aa-4331-8e3b-5881893d51c7" exit-reason="" on_node="rhel8-1" call-id="116" rc-code="0" op-status="0" interval="0" last-rc-change="1674162211" exec-time="46" queue-time="0" op-digest="5de129d7fe42dbcfe537f2c63b1921b6"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state remote_node="true" id="remote-rhel8-1" uname="remote-rhel8-1" in_ccm="false" crm-debug-origin="do_state_transition"/>
+ </status>
+</cib>
--
2.31.1
From 1f9fadbb06baded3fc393cfe30a0cb620aca0829 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Wed, 1 Feb 2023 17:12:13 -0600
Subject: [PATCH 13/14] Fix: scheduler: handle cleaned migrate_from history
correctly
Fixes T623
---
lib/pengine/unpack.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index 14dc202..9c99183 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2990,6 +2990,15 @@ unpack_migrate_to_success(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op)
// The migrate_from is pending, complete but erased, or to be scheduled
+ /* If there is no history at all for the resource on an online target, then
+ * it was likely cleaned. Just return, and we'll schedule a probe. Once we
+ * have the probe result, it will be reflected in target_newer_state.
+ */
+ if ((target_node != NULL) && target_node->details->online
+ && unknown_on_node(rsc, target)) {
+ return;
+ }
+
if (active_on_target) {
pe_node_t *source_node = pe_find_node(rsc->cluster->nodes, source);
--
2.31.1
From d9d1bf19e8522ea29c87f0c39b05828947bc5b0f Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 2 Feb 2023 15:48:01 -0600
Subject: [PATCH 14/14] Test: scheduler: update expected output for migration
fix
---
.../dot/migration-intermediary-cleaned.dot | 8 --
.../exp/migration-intermediary-cleaned.exp | 88 ++++---------------
.../migration-intermediary-cleaned.scores | 2 +-
.../migration-intermediary-cleaned.summary | 9 +-
4 files changed, 22 insertions(+), 85 deletions(-)
diff --git a/cts/scheduler/dot/migration-intermediary-cleaned.dot b/cts/scheduler/dot/migration-intermediary-cleaned.dot
index 09568d0..f6eabba 100644
--- a/cts/scheduler/dot/migration-intermediary-cleaned.dot
+++ b/cts/scheduler/dot/migration-intermediary-cleaned.dot
@@ -7,15 +7,7 @@
"FencingPass_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
"Fencing_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
"lsb-dummy_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
-"migrator_monitor_0 rhel8-2" -> "migrator_start_0 rhel8-5" [ style = bold]
"migrator_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
-"migrator_monitor_10000 rhel8-5" [ style=bold color="green" fontcolor="black"]
-"migrator_start_0 rhel8-5" -> "migrator_monitor_10000 rhel8-5" [ style = bold]
-"migrator_start_0 rhel8-5" [ style=bold color="green" fontcolor="black"]
-"migrator_stop_0 rhel8-2" -> "migrator_start_0 rhel8-5" [ style = bold]
-"migrator_stop_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
-"migrator_stop_0 rhel8-5" -> "migrator_start_0 rhel8-5" [ style = bold]
-"migrator_stop_0 rhel8-5" [ style=bold color="green" fontcolor="black"]
"petulant_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
"ping-1_monitor_0 rhel8-2" -> "Connectivity_start_0" [ style = bold]
"ping-1_monitor_0 rhel8-2" [ style=bold color="green" fontcolor="black"]
diff --git a/cts/scheduler/exp/migration-intermediary-cleaned.exp b/cts/scheduler/exp/migration-intermediary-cleaned.exp
index 28fa776..8b9bb39 100644
--- a/cts/scheduler/exp/migration-intermediary-cleaned.exp
+++ b/cts/scheduler/exp/migration-intermediary-cleaned.exp
@@ -148,91 +148,41 @@
<inputs/>
</synapse>
<synapse id="14">
- <action_set>
- <rsc_op id="53" operation="start" operation_key="migrator_start_0" on_node="rhel8-5" on_node_uuid="5">
- <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
- <attributes CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
- </rsc_op>
- </action_set>
- <inputs>
- <trigger>
- <rsc_op id="26" operation="monitor" operation_key="migrator_monitor_0" on_node="rhel8-2" on_node_uuid="2"/>
- </trigger>
- <trigger>
- <rsc_op id="51" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-5" on_node_uuid="5"/>
- </trigger>
- <trigger>
- <rsc_op id="52" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-2" on_node_uuid="2"/>
- </trigger>
- </inputs>
- </synapse>
- <synapse id="15">
- <action_set>
- <rsc_op id="52" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-2" on_node_uuid="2">
- <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
- <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" passwd="whatever"/>
- </rsc_op>
- </action_set>
- <inputs/>
- </synapse>
- <synapse id="16">
- <action_set>
- <rsc_op id="51" operation="stop" operation_key="migrator_stop_0" on_node="rhel8-5" on_node_uuid="5">
- <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
- <attributes CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
- </rsc_op>
- </action_set>
- <inputs/>
- </synapse>
- <synapse id="17">
<action_set>
<rsc_op id="26" operation="monitor" operation_key="migrator_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
- <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" passwd="whatever"/>
+ <attributes CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_op_target_rc="7" CRM_meta_timeout="90000" passwd="whatever"/>
</rsc_op>
</action_set>
<inputs/>
</synapse>
- <synapse id="18">
- <action_set>
- <rsc_op id="17" operation="monitor" operation_key="migrator_monitor_10000" on_node="rhel8-5" on_node_uuid="5">
- <primitive id="migrator" class="ocf" provider="pacemaker" type="Dummy"/>
- <attributes CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_on_node="rhel8-5" CRM_meta_on_node_uuid="5" CRM_meta_timeout="90000" passwd="whatever"/>
- </rsc_op>
- </action_set>
- <inputs>
- <trigger>
- <rsc_op id="53" operation="start" operation_key="migrator_start_0" on_node="rhel8-5" on_node_uuid="5"/>
- </trigger>
- </inputs>
- </synapse>
- <synapse id="19">
+ <synapse id="15">
<action_set>
- <rsc_op id="61" operation="monitor" operation_key="ping-1_monitor_60000" internal_operation_key="ping-1:3_monitor_60000" on_node="rhel8-2" on_node_uuid="2">
+ <rsc_op id="60" operation="monitor" operation_key="ping-1_monitor_60000" internal_operation_key="ping-1:3_monitor_60000" on_node="rhel8-2" on_node_uuid="2">
<primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
<attributes CRM_meta_clone="3" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" debug="true" host_list="192.168.122.80" name="connected"/>
</rsc_op>
</action_set>
<inputs>
<trigger>
- <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ <rsc_op id="59" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
</trigger>
</inputs>
</synapse>
- <synapse id="20">
+ <synapse id="16">
<action_set>
- <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2">
+ <rsc_op id="59" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
<attributes CRM_meta_clone="3" CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_on_node="rhel8-2" CRM_meta_on_node_uuid="2" CRM_meta_timeout="90000" debug="true" host_list="192.168.122.80" name="connected"/>
</rsc_op>
</action_set>
<inputs>
<trigger>
- <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0"/>
+ <pseudo_event id="61" operation="start" operation_key="Connectivity_start_0"/>
</trigger>
</inputs>
</synapse>
- <synapse id="21">
+ <synapse id="17">
<action_set>
<rsc_op id="27" operation="monitor" operation_key="ping-1_monitor_0" internal_operation_key="ping-1:3_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="ping-1" long-id="ping-1:3" class="ocf" provider="pacemaker" type="ping"/>
@@ -241,24 +191,24 @@
</action_set>
<inputs/>
</synapse>
- <synapse id="22" priority="1000000">
+ <synapse id="18" priority="1000000">
<action_set>
- <pseudo_event id="63" operation="running" operation_key="Connectivity_running_0">
+ <pseudo_event id="62" operation="running" operation_key="Connectivity_running_0">
<attributes CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="90000" />
</pseudo_event>
</action_set>
<inputs>
<trigger>
- <rsc_op id="60" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
+ <rsc_op id="59" operation="start" operation_key="ping-1_start_0" internal_operation_key="ping-1:3_start_0" on_node="rhel8-2" on_node_uuid="2"/>
</trigger>
<trigger>
- <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0"/>
+ <pseudo_event id="61" operation="start" operation_key="Connectivity_start_0"/>
</trigger>
</inputs>
</synapse>
- <synapse id="23">
+ <synapse id="19">
<action_set>
- <pseudo_event id="62" operation="start" operation_key="Connectivity_start_0">
+ <pseudo_event id="61" operation="start" operation_key="Connectivity_start_0">
<attributes CRM_meta_clone_max="5" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="90000" />
</pseudo_event>
</action_set>
@@ -268,7 +218,7 @@
</trigger>
</inputs>
</synapse>
- <synapse id="24">
+ <synapse id="20">
<action_set>
<rsc_op id="28" operation="monitor" operation_key="stateful-1_monitor_0" internal_operation_key="stateful-1:0_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="stateful-1" long-id="stateful-1:0" class="ocf" provider="pacemaker" type="Stateful"/>
@@ -277,7 +227,7 @@
</action_set>
<inputs/>
</synapse>
- <synapse id="25">
+ <synapse id="21">
<action_set>
<rsc_op id="29" operation="monitor" operation_key="r192.168.122.207_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="r192.168.122.207" class="ocf" provider="heartbeat" type="IPaddr2"/>
@@ -286,7 +236,7 @@
</action_set>
<inputs/>
</synapse>
- <synapse id="26">
+ <synapse id="22">
<action_set>
<rsc_op id="30" operation="monitor" operation_key="petulant_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="petulant" class="service" type="pacemaker-cts-dummyd@10"/>
@@ -295,7 +245,7 @@
</action_set>
<inputs/>
</synapse>
- <synapse id="27">
+ <synapse id="23">
<action_set>
<rsc_op id="31" operation="monitor" operation_key="r192.168.122.208_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="r192.168.122.208" class="ocf" provider="heartbeat" type="IPaddr2"/>
@@ -304,7 +254,7 @@
</action_set>
<inputs/>
</synapse>
- <synapse id="28">
+ <synapse id="24">
<action_set>
<rsc_op id="32" operation="monitor" operation_key="lsb-dummy_monitor_0" on_node="rhel8-2" on_node_uuid="2">
<primitive id="lsb-dummy" class="lsb" type="LSBDummy"/>
diff --git a/cts/scheduler/scores/migration-intermediary-cleaned.scores b/cts/scheduler/scores/migration-intermediary-cleaned.scores
index b3b8dff..09f05d1 100644
--- a/cts/scheduler/scores/migration-intermediary-cleaned.scores
+++ b/cts/scheduler/scores/migration-intermediary-cleaned.scores
@@ -103,7 +103,7 @@ pcmk__primitive_assign: migrator allocation score on rhel8-1: 0
pcmk__primitive_assign: migrator allocation score on rhel8-2: 0
pcmk__primitive_assign: migrator allocation score on rhel8-3: 0
pcmk__primitive_assign: migrator allocation score on rhel8-4: 0
-pcmk__primitive_assign: migrator allocation score on rhel8-5: 0
+pcmk__primitive_assign: migrator allocation score on rhel8-5: 1
pcmk__primitive_assign: petulant allocation score on rhel8-1: -INFINITY
pcmk__primitive_assign: petulant allocation score on rhel8-2: -INFINITY
pcmk__primitive_assign: petulant allocation score on rhel8-3: 0
diff --git a/cts/scheduler/summary/migration-intermediary-cleaned.summary b/cts/scheduler/summary/migration-intermediary-cleaned.summary
index 5de1355..dd127a8 100644
--- a/cts/scheduler/summary/migration-intermediary-cleaned.summary
+++ b/cts/scheduler/summary/migration-intermediary-cleaned.summary
@@ -13,7 +13,7 @@ Current cluster status:
* rsc_rhel8-3 (ocf:heartbeat:IPaddr2): Started rhel8-3
* rsc_rhel8-4 (ocf:heartbeat:IPaddr2): Started rhel8-4
* rsc_rhel8-5 (ocf:heartbeat:IPaddr2): Started rhel8-5
- * migrator (ocf:pacemaker:Dummy): Started [ rhel8-5 rhel8-2 ]
+ * migrator (ocf:pacemaker:Dummy): Started rhel8-5
* Clone Set: Connectivity [ping-1]:
* Started: [ rhel8-3 rhel8-4 rhel8-5 ]
* Stopped: [ rhel8-1 rhel8-2 ]
@@ -30,7 +30,6 @@ Current cluster status:
Transition Summary:
* Move rsc_rhel8-1 ( rhel8-3 -> rhel8-2 )
* Move rsc_rhel8-2 ( rhel8-4 -> rhel8-2 )
- * Restart migrator ( rhel8-5 )
* Start ping-1:3 ( rhel8-2 )
Executing Cluster Transition:
@@ -44,8 +43,6 @@ Executing Cluster Transition:
* Resource action: rsc_rhel8-3 monitor on rhel8-2
* Resource action: rsc_rhel8-4 monitor on rhel8-2
* Resource action: rsc_rhel8-5 monitor on rhel8-2
- * Resource action: migrator stop on rhel8-2
- * Resource action: migrator stop on rhel8-5
* Resource action: migrator monitor on rhel8-2
* Resource action: ping-1 monitor on rhel8-2
* Pseudo action: Connectivity_start_0
@@ -56,8 +53,6 @@ Executing Cluster Transition:
* Resource action: lsb-dummy monitor on rhel8-2
* Resource action: rsc_rhel8-1 start on rhel8-2
* Resource action: rsc_rhel8-2 start on rhel8-2
- * Resource action: migrator start on rhel8-5
- * Resource action: migrator monitor=10000 on rhel8-5
* Resource action: ping-1 start on rhel8-2
* Pseudo action: Connectivity_running_0
* Resource action: rsc_rhel8-1 monitor=5000 on rhel8-2
@@ -79,7 +74,7 @@ Revised Cluster Status:
* rsc_rhel8-3 (ocf:heartbeat:IPaddr2): Started rhel8-3
* rsc_rhel8-4 (ocf:heartbeat:IPaddr2): Started rhel8-4
* rsc_rhel8-5 (ocf:heartbeat:IPaddr2): Started rhel8-5
- * migrator (ocf:pacemaker:Dummy): Started [ rhel8-2 rhel8-5 ]
+ * migrator (ocf:pacemaker:Dummy): Started rhel8-5
* Clone Set: Connectivity [ping-1]:
* Started: [ rhel8-2 rhel8-3 rhel8-4 rhel8-5 ]
* Stopped: [ rhel8-1 ]
--
2.31.1