Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
No build reason found for SLE-Module-Containers:ppc64le
SUSE:SLE-12-SP2:Update
pacemaker
pacemaker-attrd-Synchronize-attributes-held-onl...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pacemaker-attrd-Synchronize-attributes-held-only-on-own-node.patch of Package pacemaker
commit d1ddeb89941cafaa52457468cd83f6c00277faa6 Author: Hideo Yamauchi <renayama19661014@ybb.ne.jp> Date: Fri Feb 23 09:28:47 2018 +0900 Mid: attrd: Synchronize attributes held only on own node. Index: pacemaker-1.1.16+20170320.77ea74d/attrd/commands.c =================================================================== --- pacemaker-1.1.16+20170320.77ea74d.orig/attrd/commands.c +++ pacemaker-1.1.16+20170320.77ea74d/attrd/commands.c @@ -81,11 +81,13 @@ typedef struct attribute_value_s { char *nodename; char *current; char *requested; + gboolean seen; } attribute_value_t; void write_attribute(attribute_t *a); void write_or_elect_attribute(attribute_t *a); +void attrd_current_only_attribute_update(crm_node_t *peer, xmlNode *xml); void attrd_peer_update(crm_node_t *peer, xmlNode *xml, const char *host, bool filter); void attrd_peer_sync(crm_node_t *peer, xmlNode *xml); void attrd_peer_remove(const char *host, gboolean uncache, const char *source); @@ -158,6 +160,24 @@ build_attribute_xml( return xml; } +static void +clear_attribute_value_seen(void) +{ + GHashTableIter aIter; + GHashTableIter vIter; + attribute_t *a; + attribute_value_t *v = NULL; + + g_hash_table_iter_init(&aIter, attributes); + while (g_hash_table_iter_next(&aIter, NULL, (gpointer *) & a)) { + g_hash_table_iter_init(&vIter, a->values); + while (g_hash_table_iter_next(&vIter, NULL, (gpointer *) & v)) { + v->seen = FALSE; + crm_trace("Clear seen flag %s[%s] = %s.", a->id, v->nodename, v->current); + } + } +} + static attribute_t * create_attribute(xmlNode *xml) { @@ -670,10 +690,21 @@ attrd_peer_message(crm_node_t *peer, xml xmlNode *child = NULL; crm_info("Processing %s from %s", op, peer->uname); + + /* Clear the seen flag for attribute processing held only in the own node. */ + if (peer_state == election_won) { + clear_attribute_value_seen(); + } + for (child = __xml_first_child(xml); child != NULL; child = __xml_next(child)) { host = crm_element_value(child, F_ATTRD_HOST); attrd_peer_update(peer, child, host, TRUE); } + + if (peer_state == election_won) { + /* Synchronize if there is an attribute held only by own node that Writer does not have. */ + attrd_current_only_attribute_update(peer, xml); + } } } @@ -778,6 +809,42 @@ attrd_lookup_or_create_value(GHashTable return(v); } +void +attrd_current_only_attribute_update(crm_node_t *peer, xmlNode *xml) +{ + GHashTableIter aIter; + GHashTableIter vIter; + attribute_t *a; + attribute_value_t *v = NULL; + xmlNode *sync = create_xml_node(NULL, __FUNCTION__); + gboolean build = FALSE; + + crm_xml_add(sync, F_ATTRD_TASK, ATTRD_OP_SYNC_RESPONSE); + + g_hash_table_iter_init(&aIter, attributes); + while (g_hash_table_iter_next(&aIter, NULL, (gpointer *) & a)) { + g_hash_table_iter_init(&vIter, a->values); + while (g_hash_table_iter_next(&vIter, NULL, (gpointer *) & v)) { + if (safe_str_eq(v->nodename, attrd_cluster->uname) && v->seen == FALSE) { + crm_trace("Syncing %s[%s] = %s to everyone.(from local only attributes)", a->id, v->nodename, v->current); + + build = TRUE; + build_attribute_xml(sync, a->id, a->set, a->uuid, a->timeout_ms, a->user, a->is_private, + v->nodename, v->nodeid, v->current); + } else { + crm_trace("Local attribute(%s[%s] = %s) was ignore.(another host) : [%s]", a->id, v->nodename, v->current, attrd_cluster->uname); + continue; + } + } + } + + if (build) { + crm_debug("Syncing values to everyone.(from local only attributes)"); + send_attrd_message(NULL, sync); + } + free_xml(sync); +} + void attrd_peer_update(crm_node_t *peer, xmlNode *xml, const char *host, bool filter) { @@ -906,6 +973,9 @@ attrd_peer_update(crm_node_t *peer, xmlN crm_trace("Unchanged %s[%s] from %s is %s", attr, host, peer->uname, value); } + /* Set the seen flag for attribute processing held only in the own node. */ + v->seen = TRUE; + /* If this is a cluster node whose node ID we are learning, remember it */ if ((v->nodeid == 0) && (v->is_remote == FALSE) && (crm_element_value_int(xml, F_ATTRD_HOST_ID, (int*)&v->nodeid) == 0)) {
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