From cef0ff51879e965c3b7d214a23b61e6bf61aa33d Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 17 Aug 2017 15:53:27 -0500 Subject: [PATCH 1/3] Refactor: crmd,pengine: prefix internal node attributes with '#' so crm_mon will hide them. Also, define constants for them. As a positive side effect, node_unfenced is no longer added as a meta-attribute to stonith "on" operations. --- crmd/te_callbacks.c | 14 +++++--------- include/crm/crm.h | 5 +++++ include/crm/msg_xml.h | 3 ++- lib/pengine/utils.c | 12 ++++++++---- pengine/native.c | 4 ++-- pengine/test10/start-then-stop-with-unfence.xml | 2 +- pengine/test10/unfence-definition.exp | 2 +- pengine/test10/unfence-definition.xml | 4 ++-- pengine/test10/unfence-parameters.exp | 2 +- pengine/test10/unfence-parameters.xml | 4 ++-- pengine/test10/unfence-startup.xml | 4 ++-- 11 files changed, 31 insertions(+), 25 deletions(-) diff --git a/crmd/te_callbacks.c b/crmd/te_callbacks.c index 4476d4a..2273b86 100644 --- a/crmd/te_callbacks.c +++ b/crmd/te_callbacks.c @@ -798,21 +797,17 @@ tengine_stonith_callback(stonith_t * stonith, stonith_callback_data_t * data) if (action->confirmed == FALSE) { te_action_confirmed(action); if (safe_str_eq("on", op)) { - const char *key = NULL; const char *value = NULL; char *now = crm_itoa(time(NULL)); - key = XML_NODE_IS_UNFENCED; - update_attrd(target, key, now, NULL, FALSE); + update_attrd(target, CRM_ATTR_UNFENCED, now, NULL, FALSE); free(now); - key = "digests-all"; - value = crm_meta_value(action->params, key); - update_attrd(target, key, value, NULL, FALSE); + value = crm_meta_value(action->params, XML_OP_ATTR_DIGESTS_ALL); + update_attrd(target, CRM_ATTR_DIGESTS_ALL, value, NULL, FALSE); - key = "digests-secure"; - value = crm_meta_value(action->params, key); - update_attrd(target, key, value, NULL, FALSE); + value = crm_meta_value(action->params, XML_OP_ATTR_DIGESTS_SECURE); + update_attrd(target, CRM_ATTR_DIGESTS_SECURE, value, NULL, FALSE); } else if (action->sent_update == FALSE) { send_stonith_update(action, target, uuid); diff --git a/include/crm/crm.h b/include/crm/crm.h index 0da6bfe..35ab6ca 100644 --- a/include/crm/crm.h +++ b/include/crm/crm.h @@ -94,6 +94,11 @@ extern char *crm_system_name; # define CRM_SYSTEM_STONITHD "stonithd" # define CRM_SYSTEM_MCP "pacemakerd" +// Names of internally generated node attributes +# define CRM_ATTR_UNFENCED "#node-unfenced" +# define CRM_ATTR_DIGESTS_ALL "#digests-all" +# define CRM_ATTR_DIGESTS_SECURE "#digests-secure" + /* Valid operations */ # define CRM_OP_NOOP "noop" diff --git a/include/crm/msg_xml.h b/include/crm/msg_xml.h index 8cf22f3..38183b5 100644 --- a/include/crm/msg_xml.h +++ b/include/crm/msg_xml.h @@ -228,6 +234,8 @@ # define XML_OP_ATTR_DEPENDENT "dependent-on" # define XML_OP_ATTR_ORIGIN "interval-origin" # define XML_OP_ATTR_PENDING "record-pending" +# define XML_OP_ATTR_DIGESTS_ALL "digests-all" +# define XML_OP_ATTR_DIGESTS_SECURE "digests-secure" # define XML_CIB_TAG_LRM "lrm" # define XML_LRM_TAG_RESOURCES "lrm_resources" @@ -254,7 +264,6 @@ # define XML_NODE_IS_PEER "crmd" # define XML_NODE_IS_REMOTE "remote_node" # define XML_NODE_IS_FENCED "node_fenced" -# define XML_NODE_IS_UNFENCED "node_unfenced" # define XML_NODE_IS_MAINTENANCE "node_in_maintenance" # define XML_CIB_ATTR_SHUTDOWN "shutdown" diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c index cb1ed08..848b311 100644 --- a/lib/pengine/utils.c +++ b/lib/pengine/utils.c @@ -2115,8 +1987,10 @@ fencing_action_digest_cmp(resource_t * rsc, node_t * node, pe_working_set_t * da char *key = generate_op_key(rsc->id, STONITH_DIGEST_TASK, 0); op_digest_cache_t *data = rsc_action_digest(rsc, STONITH_DIGEST_TASK, key, node, NULL, data_set); - const char *digest_all = g_hash_table_lookup(node->details->attrs, "digests-all"); - const char *digest_secure = g_hash_table_lookup(node->details->attrs, "digests-secure"); + const char *digest_all = g_hash_table_lookup(node->details->attrs, + CRM_ATTR_DIGESTS_ALL); + const char *digest_secure = g_hash_table_lookup(node->details->attrs, + CRM_ATTR_DIGESTS_SECURE); /* No 'reloads' for fencing device changes * @@ -2269,8 +2146,10 @@ pe_fence_op(node_t * node, const char *op, bool optional, const char *reason, pe digests_secure+digests_secure_offset, max-digests_secure_offset, "%s:%s:%s,", match->id, (const char*)g_hash_table_lookup(match->meta, XML_ATTR_TYPE), data->digest_secure_calc); } - add_hash_param(stonith_op->meta, strdup("digests-all"), digests_all); - add_hash_param(stonith_op->meta, strdup("digests-secure"), digests_secure); + add_hash_param(stonith_op->meta, strdup(XML_OP_ATTR_DIGESTS_ALL), + digests_all); + add_hash_param(stonith_op->meta, strdup(XML_OP_ATTR_DIGESTS_SECURE), + digests_secure); } } else { diff --git a/pengine/native.c b/pengine/native.c index fdbbf0c..18efa1d 100644 --- a/pengine/native.c +++ b/pengine/native.c @@ -2490,7 +2501,7 @@ StopRsc(resource_t * rsc, node_t * next, gboolean optional, pe_working_set_t * d if(is_set(rsc->flags, pe_rsc_needs_unfencing)) { action_t *unfence = pe_fence_op(current, "on", TRUE, NULL, data_set); - const char *unfenced = g_hash_table_lookup(current->details->attrs, XML_NODE_IS_UNFENCED); + const char *unfenced = g_hash_table_lookup(current->details->attrs, CRM_ATTR_UNFENCED); order_actions(stop, unfence, pe_order_implies_first); if (unfenced == NULL || safe_str_eq("0", unfenced)) { @@ -2513,7 +2524,7 @@ StartRsc(resource_t * rsc, node_t * next, gboolean optional, pe_working_set_t * if(is_set(rsc->flags, pe_rsc_needs_unfencing)) { action_t *unfence = pe_fence_op(next, "on", TRUE, NULL, data_set); - const char *unfenced = g_hash_table_lookup(next->details->attrs, XML_NODE_IS_UNFENCED); + const char *unfenced = g_hash_table_lookup(next->details->attrs, CRM_ATTR_UNFENCED); order_actions(unfence, start, pe_order_implies_then); diff --git a/pengine/test10/start-then-stop-with-unfence.xml b/pengine/test10/start-then-stop-with-unfence.xml index b856250..587b05a 100644 --- a/pengine/test10/start-then-stop-with-unfence.xml +++ b/pengine/test10/start-then-stop-with-unfence.xml @@ -95,7 +95,7 @@ - + diff --git a/pengine/test10/unfence-definition.exp b/pengine/test10/unfence-definition.exp index f9ad4c1..4e619fe 100644 --- a/pengine/test10/unfence-definition.exp +++ b/pengine/test10/unfence-definition.exp @@ -389,7 +389,7 @@ - + diff --git a/pengine/test10/unfence-definition.xml b/pengine/test10/unfence-definition.xml index cb189cd..90aa3da 100644 --- a/pengine/test10/unfence-definition.xml +++ b/pengine/test10/unfence-definition.xml @@ -43,7 +43,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/pengine/test10/unfence-parameters.exp b/pengine/test10/unfence-parameters.exp index 64286a8..8022591 100644 --- a/pengine/test10/unfence-parameters.exp +++ b/pengine/test10/unfence-parameters.exp @@ -373,7 +373,7 @@ - + diff --git a/pengine/test10/unfence-parameters.xml b/pengine/test10/unfence-parameters.xml index 26588bf..e1975b9 100644 --- a/pengine/test10/unfence-parameters.xml +++ b/pengine/test10/unfence-parameters.xml @@ -43,7 +43,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/pengine/test10/unfence-startup.xml b/pengine/test10/unfence-startup.xml index 28637e3..69e2df7 100644 --- a/pengine/test10/unfence-startup.xml +++ b/pengine/test10/unfence-startup.xml @@ -43,7 +43,7 @@ - + @@ -63,7 +63,7 @@ - + -- 1.8.3.1 From 8440151215e39a69eea55aae996329a11d7800a5 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 17 Aug 2017 17:38:30 -0500 Subject: [PATCH 2/3] Refactor: libpe_status: remove redundant constant definition --- lib/pengine/utils.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c index 848b311..b5794fb 100644 --- a/lib/pengine/utils.c +++ b/lib/pengine/utils.c @@ -2211,8 +2083,6 @@ find_unfencing_devices(GListPtr candidates, GListPtr matches) } -#define STONITH_DIGEST_TASK "stonith-on" - action_t * pe_fence_op(node_t * node, const char *op, bool optional, const char *reason, pe_working_set_t * data_set) { -- 1.8.3.1 From 04656184bcd4598a9b9d83b344c6f9f9cafe4df7 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 17 Aug 2017 17:42:55 -0500 Subject: [PATCH 3/3] Refactor: libpe_status: preserve backward API compatibility There isn't a well-defined line in the pengine libraries as to what's part of the public API, but be on the safe side ... --- include/crm/pengine/status.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h index fcd5226..b1f4d30 100644 --- a/include/crm/pengine/status.h +++ b/include/crm/pengine/status.h @@ -329,7 +329,6 @@ struct pe_action_s { char *task; char *uuid; - char *reason; char *cancel_task; enum pe_action_flags flags; @@ -374,6 +373,8 @@ struct pe_action_s { GListPtr actions_before; /* action_wrapper_t* */ GListPtr actions_after; /* action_wrapper_t* */ + + char *reason; }; struct ticket_s { -- 1.8.3.1