Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
pacemaker
pacemaker-crmd-validate-CIB-diffs-better.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pacemaker-crmd-validate-CIB-diffs-better.patch of Package pacemaker
commit 8c286edcef4e2b1dcaf4c2560574324903fa18ef Author: Ken Gaillot <kgaillot@redhat.com> Date: Mon Feb 26 11:44:19 2018 -0600 Low: crmd: validate CIB diffs better This contains refactoring and logging changes to make the diff processing code more readable, validate CIB diffs better, and log diff issues consistently. Index: pacemaker-1.1.18+20180126.bfe4e8042/crmd/te_callbacks.c =================================================================== --- pacemaker-1.1.18+20180126.bfe4e8042.orig/crmd/te_callbacks.c +++ pacemaker-1.1.18+20180126.bfe4e8042/crmd/te_callbacks.c @@ -241,38 +241,50 @@ te_legacy_update_diff(const char *event, freeXpathObject(xpathObj); } -static void process_resource_updates( - const char *node, xmlNode *xml, xmlNode *change, const char *op, const char *xpath) +static void +process_lrm_resource_diff(xmlNode *lrm_resource, const char *node) +{ + for (xmlNode *rsc_op = __xml_first_child(lrm_resource); rsc_op != NULL; + rsc_op = __xml_next(rsc_op)) { + process_graph_event(rsc_op, node); + } +} + +static void +process_resource_updates(const char *node, xmlNode *xml, xmlNode *change, + const char *op, const char *xpath) { xmlNode *cIter = NULL; xmlNode *rsc = NULL; - xmlNode *rsc_op = NULL; int num_resources = 0; - if(xml == NULL) { + if (xml == NULL) { return; - } else if(strcmp((const char*)xml->name, XML_CIB_TAG_LRM) == 0) { + } else if (strcmp((const char*)xml->name, XML_CIB_TAG_LRM) == 0) { xml = first_named_child(xml, XML_LRM_TAG_RESOURCES); crm_trace("Got %p in %s", xml, XML_CIB_TAG_LRM); } CRM_ASSERT(strcmp((const char*)xml->name, XML_LRM_TAG_RESOURCES) == 0); - for(cIter = xml->children; cIter; cIter = cIter->next) { + for (cIter = xml->children; cIter; cIter = cIter->next) { num_resources++; } - if(num_resources > 1) { + if (num_resources > 1) { /* - * Check for and fast-track the processing of LRM refreshes - * In large clusters this can result in _huge_ speedups + * Updates by, or in response to, TE actions will never contain updates + * for more than one resource at a time, so such updates indicate an + * LRM refresh. * - * Unfortunately we can only do so when there are no pending actions - * Otherwise we could miss updates we're waiting for and stall + * In that case, start a new transition rather than check each result + * individually, which can result in _huge_ speedups in large clusters. * + * Unfortunately, we can only do so when there are no pending actions. + * Otherwise, we could mistakenly throw away those results here, and + * the cluster will stall waiting for them and time out the operation. */ - crm_debug("Detected LRM refresh - %d resources updated", num_resources); crm_log_xml_trace(change, "lrm-refresh"); abort_transition(INFINITY, tg_restart, "LRM Refresh", NULL); @@ -281,10 +293,7 @@ static void process_resource_updates( for (rsc = __xml_first_child(xml); rsc != NULL; rsc = __xml_next(rsc)) { crm_trace("Processing %s", ID(rsc)); - for (rsc_op = __xml_first_child(rsc); rsc_op != NULL; rsc_op = __xml_next(rsc_op)) { - crm_trace("Processing %s", ID(rsc_op)); - process_graph_event(rsc_op, node); - } + process_lrm_resource_diff(rsc, node); } }
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