Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:FrontRunner
pacemaker.21298
bsc#1177212-0005-Low-scheduler-only-successful-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bsc#1177212-0005-Low-scheduler-only-successful-ops-count-for-migratio.patch of Package pacemaker.21298
From c79c12fe1786000ab30e2b949222d15cc947e28c Mon Sep 17 00:00:00 2001 From: Ken Gaillot <kgaillot@redhat.com> Date: Fri, 5 Jul 2019 16:31:45 -0500 Subject: [PATCH 5/8] Low: scheduler: only successful ops count for migration comparisons --- lib/pengine/unpack.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c index 4dba8ab00..03b651ba6 100644 --- a/lib/pengine/unpack.c +++ b/lib/pengine/unpack.c @@ -2349,10 +2349,11 @@ set_node_score(gpointer key, gpointer value, gpointer user_data) #define STATUS_PATH_MAX 1024 static xmlNode * find_lrm_op(const char *resource, const char *op, const char *node, const char *source, - pe_working_set_t * data_set) + bool success_only, pe_working_set_t *data_set) { int offset = 0; char xpath[STATUS_PATH_MAX]; + xmlNode *xml = NULL; offset += snprintf(xpath + offset, STATUS_PATH_MAX - offset, "//node_state[@uname='%s']", node); offset += @@ -2377,7 +2378,19 @@ find_lrm_op(const char *resource, const char *op, const char *node, const char * } CRM_LOG_ASSERT(offset > 0); - return get_xpath_object(xpath, data_set->input, LOG_DEBUG); + xml = get_xpath_object(xpath, data_set->input, LOG_DEBUG); + + if (xml && success_only) { + int rc = PCMK_OCF_UNKNOWN_ERROR; + int status = PCMK_LRM_OP_ERROR; + + crm_element_value_int(xml, XML_LRM_ATTR_RC, &rc); + crm_element_value_int(xml, XML_LRM_ATTR_OPSTATUS, &status); + if ((rc != PCMK_OCF_OK) || (status != PCMK_LRM_OP_DONE)) { + return NULL; + } + } + return xml; } /*! @@ -2401,7 +2414,7 @@ stop_happened_after(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op, pe_working_set_t *data_set) { xmlNode *stop_op = find_lrm_op(rsc->id, CRMD_ACTION_STOP, - node->details->uname, NULL, data_set); + node->details->uname, NULL, TRUE, data_set); if (stop_op) { int stop_id = 0; @@ -2460,7 +2473,7 @@ 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, data_set); + source, FALSE, data_set); 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); @@ -2531,7 +2544,7 @@ unpack_migrate_to_failure(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op, // Check for stop on the target target_stop = find_lrm_op(rsc->id, CRMD_ACTION_STOP, target, NULL, - data_set); + TRUE, data_set); if (target_stop) { crm_element_value_int(target_stop, XML_LRM_ATTR_CALLID, &target_stop_id); @@ -2539,7 +2552,7 @@ unpack_migrate_to_failure(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op, // Check for migrate_from on the target target_migrate_from = find_lrm_op(rsc->id, CRMD_ACTION_MIGRATED, target, - source, data_set); + source, TRUE, data_set); if (target_migrate_from) { crm_element_value_int(target_migrate_from, XML_LRM_ATTR_CALLID, &target_migrate_from_id); @@ -2588,7 +2601,7 @@ unpack_migrate_from_failure(pe_resource_t *rsc, pe_node_t *node, // Check for a stop on the source source_stop = find_lrm_op(rsc->id, CRMD_ACTION_STOP, source, NULL, - data_set); + TRUE, data_set); if (source_stop) { crm_element_value_int(source_stop, XML_LRM_ATTR_CALLID, &source_stop_id); @@ -2596,7 +2609,7 @@ unpack_migrate_from_failure(pe_resource_t *rsc, pe_node_t *node, // Check for a migrate_to on the source source_migrate_to = find_lrm_op(rsc->id, CRMD_ACTION_MIGRATE, - source, target, data_set); + source, target, TRUE, data_set); if (source_migrate_to) { crm_element_value_int(source_migrate_to, XML_LRM_ATTR_CALLID, &source_migrate_to_id); -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor