|
|
60de42 |
From 2c91b4a54d5b70204409ea2f7e92fbc7748e4257 Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Fri, 17 Mar 2017 16:32:45 -0500
|
|
|
60de42 |
Subject: [PATCH 1/5] Log: various: minor improvements
|
|
|
60de42 |
|
|
|
60de42 |
add missing newline, reword to avoid singular/plural issue,
|
|
|
60de42 |
and correct misspellings (in log messages and comments)
|
|
|
60de42 |
---
|
|
|
60de42 |
configure.ac | 2 +-
|
|
|
60de42 |
crmd/join_dc.c | 2 +-
|
|
|
60de42 |
crmd/lrm.c | 4 ++--
|
|
|
60de42 |
fencing/remote.c | 4 ++--
|
|
|
60de42 |
include/crm/pengine/status.h | 8 ++++----
|
|
|
60de42 |
lib/cluster/election.c | 2 +-
|
|
|
60de42 |
lib/common/xml.c | 2 +-
|
|
|
60de42 |
lib/pengine/utils.c | 4 ++--
|
|
|
60de42 |
lrmd/lrmd.c | 5 +++--
|
|
|
60de42 |
pengine/graph.c | 2 +-
|
|
|
60de42 |
pengine/native.c | 2 +-
|
|
|
60de42 |
tools/fake_transition.c | 4 ++--
|
|
|
60de42 |
12 files changed, 21 insertions(+), 20 deletions(-)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/configure.ac b/configure.ac
|
|
|
60de42 |
index b1465a3..687d3fe 100644
|
|
|
60de42 |
--- a/configure.ac
|
|
|
60de42 |
+++ b/configure.ac
|
|
|
60de42 |
@@ -1759,7 +1759,7 @@ if test "$GCC" != yes; then
|
|
|
60de42 |
else
|
|
|
60de42 |
CFLAGS="$CFLAGS -ggdb"
|
|
|
60de42 |
|
|
|
60de42 |
-dnl when we don't have diagnostic push / pull we can't explicitely disable
|
|
|
60de42 |
+dnl When we don't have diagnostic push / pull, we can't explicitly disable
|
|
|
60de42 |
dnl checking for nonliteral formats in the places where they occur on purpose
|
|
|
60de42 |
dnl thus we disable nonliteral format checking globally as we are aborting
|
|
|
60de42 |
dnl on warnings.
|
|
|
60de42 |
diff --git a/crmd/join_dc.c b/crmd/join_dc.c
|
|
|
60de42 |
index 6af0884..d5ecc55 100644
|
|
|
60de42 |
--- a/crmd/join_dc.c
|
|
|
60de42 |
+++ b/crmd/join_dc.c
|
|
|
60de42 |
@@ -385,7 +385,7 @@ do_dc_join_finalize(long long action,
|
|
|
60de42 |
/* This we can do straight away and avoid clients timing us out
|
|
|
60de42 |
* while we compute the latest CIB
|
|
|
60de42 |
*/
|
|
|
60de42 |
- crm_debug("Finializing join-%d for %d clients",
|
|
|
60de42 |
+ crm_debug("Finalizing join-%d for %d clients",
|
|
|
60de42 |
current_join_id, crmd_join_phase_count(crm_join_integrated));
|
|
|
60de42 |
|
|
|
60de42 |
crmd_join_phase_log(LOG_INFO);
|
|
|
60de42 |
diff --git a/crmd/lrm.c b/crmd/lrm.c
|
|
|
60de42 |
index 2d553cd..f7aefbf 100644
|
|
|
60de42 |
--- a/crmd/lrm.c
|
|
|
60de42 |
+++ b/crmd/lrm.c
|
|
|
60de42 |
@@ -231,8 +231,8 @@ update_history_cache(lrm_state_t * lrm_state, lrmd_rsc_info_t * rsc, lrmd_event_
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
} else if (did_rsc_op_fail(op, target_rc)) {
|
|
|
60de42 |
- /* We must store failed monitors here
|
|
|
60de42 |
- * - otherwise the block below will cause them to be forgetten them when a stop happens
|
|
|
60de42 |
+ /* Store failed monitors here, otherwise the block below will cause them
|
|
|
60de42 |
+ * to be forgotten when a stop happens.
|
|
|
60de42 |
*/
|
|
|
60de42 |
if (entry->failed) {
|
|
|
60de42 |
lrmd_free_event(entry->failed);
|
|
|
60de42 |
diff --git a/fencing/remote.c b/fencing/remote.c
|
|
|
60de42 |
index 6c47f65..4a47d49 100644
|
|
|
60de42 |
--- a/fencing/remote.c
|
|
|
60de42 |
+++ b/fencing/remote.c
|
|
|
60de42 |
@@ -1558,13 +1558,13 @@ call_remote_stonith(remote_fencing_op_t * op, st_query_result_t * peer)
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
if (op->state == st_query) {
|
|
|
60de42 |
- crm_info("None of the %d peers have devices capable of fencing (%s) %s for %s (%d)",
|
|
|
60de42 |
+ crm_info("No peers (out of %d) have devices capable of fencing (%s) %s for %s (%d)",
|
|
|
60de42 |
op->replies, op->action, op->target, op->client_name,
|
|
|
60de42 |
op->state);
|
|
|
60de42 |
|
|
|
60de42 |
rc = -ENODEV;
|
|
|
60de42 |
} else {
|
|
|
60de42 |
- crm_info("None of the %d peers are capable of fencing (%s) %s for %s (%d)",
|
|
|
60de42 |
+ crm_info("No peers (out of %d) are capable of fencing (%s) %s for %s (%d)",
|
|
|
60de42 |
op->replies, op->action, op->target, op->client_name,
|
|
|
60de42 |
op->state);
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
|
|
|
60de42 |
index 79e4572..e748792 100644
|
|
|
60de42 |
--- a/include/crm/pengine/status.h
|
|
|
60de42 |
+++ b/include/crm/pengine/status.h
|
|
|
60de42 |
@@ -343,8 +343,8 @@ struct pe_action_s {
|
|
|
60de42 |
* requires at minimum X number of cloned instances to be running
|
|
|
60de42 |
* before an order dependency can run. Another option that uses
|
|
|
60de42 |
* this is 'require-all=false' in ordering constrants. This option
|
|
|
60de42 |
- * says "only required one instance of a resource to start before
|
|
|
60de42 |
- * allowing dependencies to start" basicall require-all=false is
|
|
|
60de42 |
+ * says "only require one instance of a resource to start before
|
|
|
60de42 |
+ * allowing dependencies to start" -- basically, require-all=false is
|
|
|
60de42 |
* the same as clone-min=1.
|
|
|
60de42 |
*/
|
|
|
60de42 |
|
|
|
60de42 |
@@ -354,8 +354,8 @@ struct pe_action_s {
|
|
|
60de42 |
* to be considered runnable */
|
|
|
60de42 |
int required_runnable_before;
|
|
|
60de42 |
|
|
|
60de42 |
- GListPtr actions_before; /* action_warpper_t* */
|
|
|
60de42 |
- GListPtr actions_after; /* action_warpper_t* */
|
|
|
60de42 |
+ GListPtr actions_before; /* action_wrapper_t* */
|
|
|
60de42 |
+ GListPtr actions_after; /* action_wrapper_t* */
|
|
|
60de42 |
};
|
|
|
60de42 |
|
|
|
60de42 |
struct ticket_s {
|
|
|
60de42 |
diff --git a/lib/cluster/election.c b/lib/cluster/election.c
|
|
|
60de42 |
index a8902d3..a5bb1da 100644
|
|
|
60de42 |
--- a/lib/cluster/election.c
|
|
|
60de42 |
+++ b/lib/cluster/election.c
|
|
|
60de42 |
@@ -461,7 +461,7 @@ election_count_vote(election_t *e, xmlNode *vote, bool can_win)
|
|
|
60de42 |
int peers = 1 + g_hash_table_size(crm_peer_cache);
|
|
|
60de42 |
|
|
|
60de42 |
/* If every node has to vote down every other node, thats N*(N-1) total elections
|
|
|
60de42 |
- * Allow some leway before _really_ complaining
|
|
|
60de42 |
+ * Allow some leeway before _really_ complaining
|
|
|
60de42 |
*/
|
|
|
60de42 |
election_wins++;
|
|
|
60de42 |
if (election_wins > (peers * peers)) {
|
|
|
60de42 |
diff --git a/lib/common/xml.c b/lib/common/xml.c
|
|
|
60de42 |
index 6dce4cb..c566956 100644
|
|
|
60de42 |
--- a/lib/common/xml.c
|
|
|
60de42 |
+++ b/lib/common/xml.c
|
|
|
60de42 |
@@ -3190,7 +3190,7 @@ crm_xml_escape(const char *text)
|
|
|
60de42 |
* converted back to their escape sequences.
|
|
|
60de42 |
*
|
|
|
60de42 |
* However xmlNodeDump() is randomly dog slow, even with the same
|
|
|
60de42 |
- * input. So we need to replicate the escapeing in our custom
|
|
|
60de42 |
+ * input. So we need to replicate the escaping in our custom
|
|
|
60de42 |
* version so that the result can be re-parsed by xmlCtxtReadDoc()
|
|
|
60de42 |
* when necessary.
|
|
|
60de42 |
*/
|
|
|
60de42 |
diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c
|
|
|
60de42 |
index 2b53999..74856fe 100644
|
|
|
60de42 |
--- a/lib/pengine/utils.c
|
|
|
60de42 |
+++ b/lib/pengine/utils.c
|
|
|
60de42 |
@@ -1099,8 +1099,8 @@ pe_free_action(action_t * action)
|
|
|
60de42 |
if (action == NULL) {
|
|
|
60de42 |
return;
|
|
|
60de42 |
}
|
|
|
60de42 |
- g_list_free_full(action->actions_before, free); /* action_warpper_t* */
|
|
|
60de42 |
- g_list_free_full(action->actions_after, free); /* action_warpper_t* */
|
|
|
60de42 |
+ g_list_free_full(action->actions_before, free); /* action_wrapper_t* */
|
|
|
60de42 |
+ g_list_free_full(action->actions_after, free); /* action_wrapper_t* */
|
|
|
60de42 |
if (action->extra) {
|
|
|
60de42 |
g_hash_table_destroy(action->extra);
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/lrmd/lrmd.c b/lrmd/lrmd.c
|
|
|
60de42 |
index 5669d34..c874aa5 100644
|
|
|
60de42 |
--- a/lrmd/lrmd.c
|
|
|
60de42 |
+++ b/lrmd/lrmd.c
|
|
|
60de42 |
@@ -1464,9 +1464,10 @@ free_rsc(gpointer data)
|
|
|
60de42 |
|
|
|
60de42 |
if (is_stonith) {
|
|
|
60de42 |
cmd->lrmd_op_status = PCMK_LRM_OP_CANCELLED;
|
|
|
60de42 |
- /* if a stonith cmd is in-flight, mark just mark it as cancelled,
|
|
|
60de42 |
+ /* If a stonith command is in-flight, just mark it as cancelled;
|
|
|
60de42 |
* it is not safe to finalize/free the cmd until the stonith api
|
|
|
60de42 |
- * says it has either completed or timed out.*/
|
|
|
60de42 |
+ * says it has either completed or timed out.
|
|
|
60de42 |
+ */
|
|
|
60de42 |
if (rsc->active != cmd) {
|
|
|
60de42 |
cmd_finalize(cmd, NULL);
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/pengine/graph.c b/pengine/graph.c
|
|
|
60de42 |
index 81d8355..8098f9e 100644
|
|
|
60de42 |
--- a/pengine/graph.c
|
|
|
60de42 |
+++ b/pengine/graph.c
|
|
|
60de42 |
@@ -1005,7 +1005,7 @@ action2xml(action_t * action, gboolean as_input, pe_working_set_t *data_set)
|
|
|
60de42 |
*
|
|
|
60de42 |
* If anyone toggles the unique flag to 'on', the
|
|
|
60de42 |
* 'instance free' name will correspond to an orphan
|
|
|
60de42 |
- * and fall into the claus above instead
|
|
|
60de42 |
+ * and fall into the clause above instead
|
|
|
60de42 |
*/
|
|
|
60de42 |
crm_xml_add(rsc_xml, XML_ATTR_ID, xml_id);
|
|
|
60de42 |
if (action->rsc->clone_name && safe_str_neq(xml_id, action->rsc->clone_name)) {
|
|
|
60de42 |
diff --git a/pengine/native.c b/pengine/native.c
|
|
|
60de42 |
index 52eba4f..a968fc7 100644
|
|
|
60de42 |
--- a/pengine/native.c
|
|
|
60de42 |
+++ b/pengine/native.c
|
|
|
60de42 |
@@ -1647,7 +1647,7 @@ colocation_match(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocation_t * co
|
|
|
60de42 |
|
|
|
60de42 |
} else if (constraint->score < 0) {
|
|
|
60de42 |
/* nothing to do:
|
|
|
60de42 |
- * anti-colocation with something thats not running
|
|
|
60de42 |
+ * anti-colocation with something that is not running
|
|
|
60de42 |
*/
|
|
|
60de42 |
return;
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/tools/fake_transition.c b/tools/fake_transition.c
|
|
|
60de42 |
index 251f9bb..26f55a2 100644
|
|
|
60de42 |
--- a/tools/fake_transition.c
|
|
|
60de42 |
+++ b/tools/fake_transition.c
|
|
|
60de42 |
@@ -70,8 +70,8 @@ inject_transient_attr(xmlNode * cib_node, const char *name, const char *value)
|
|
|
60de42 |
char *nvp_id = crm_concat(name, node_uuid, '-');
|
|
|
60de42 |
|
|
|
60de42 |
node_path = xmlGetNodePath(cib_node);
|
|
|
60de42 |
- quiet_log("Injecting attribute %s=%s into %s '%s'", name, value, node_path,
|
|
|
60de42 |
- ID(cib_node));
|
|
|
60de42 |
+ quiet_log(" + Injecting attribute %s=%s into %s '%s'\n",
|
|
|
60de42 |
+ name, value, node_path, ID(cib_node));
|
|
|
60de42 |
free(node_path);
|
|
|
60de42 |
|
|
|
60de42 |
attrs = first_named_child(cib_node, XML_TAG_TRANSIENT_NODEATTRS);
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|
|
|
60de42 |
|
|
|
60de42 |
From 9251c17d97250103679aada63729d54a9537874f Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Fri, 17 Mar 2017 16:58:48 -0500
|
|
|
60de42 |
Subject: [PATCH 2/5] Log: libcrmcluster,crmd: log join phase as text rather
|
|
|
60de42 |
than integer
|
|
|
60de42 |
|
|
|
60de42 |
---
|
|
|
60de42 |
crmd/join_dc.c | 51 +++++++++++++++------------------------------------
|
|
|
60de42 |
include/crm/cluster.h | 14 ++++++++++++++
|
|
|
60de42 |
2 files changed, 29 insertions(+), 36 deletions(-)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/crmd/join_dc.c b/crmd/join_dc.c
|
|
|
60de42 |
index d5ecc55..71311de 100644
|
|
|
60de42 |
--- a/crmd/join_dc.c
|
|
|
60de42 |
+++ b/crmd/join_dc.c
|
|
|
60de42 |
@@ -45,8 +45,9 @@ crm_update_peer_join(const char *source, crm_node_t * node, enum crm_join_phase
|
|
|
60de42 |
enum crm_join_phase last = 0;
|
|
|
60de42 |
|
|
|
60de42 |
if(node == NULL) {
|
|
|
60de42 |
- crm_err("Could not update join because node not specified" CRM_XS
|
|
|
60de42 |
- " join-%u source=%s phase=%d", source, current_join_id, phase);
|
|
|
60de42 |
+ crm_err("Could not update join because node not specified"
|
|
|
60de42 |
+ CRM_XS " join-%u source=%s phase=%s",
|
|
|
60de42 |
+ current_join_id, source, crm_join_phase_str(phase));
|
|
|
60de42 |
return;
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
@@ -58,23 +59,21 @@ crm_update_peer_join(const char *source, crm_node_t * node, enum crm_join_phase
|
|
|
60de42 |
last = node->join;
|
|
|
60de42 |
|
|
|
60de42 |
if(phase == last) {
|
|
|
60de42 |
- crm_trace("%s: Node %s[%u] - join-%u phase still %u",
|
|
|
60de42 |
- source, node->uname, node->id, current_join_id, last);
|
|
|
60de42 |
+ crm_trace("%s: Node %s[%u] - join-%u phase still %s",
|
|
|
60de42 |
+ source, node->uname, node->id, current_join_id,
|
|
|
60de42 |
+ crm_join_phase_str(last));
|
|
|
60de42 |
|
|
|
60de42 |
- } else if (phase <= crm_join_none) {
|
|
|
60de42 |
+ } else if ((phase <= crm_join_none) || (phase == (last + 1))) {
|
|
|
60de42 |
node->join = phase;
|
|
|
60de42 |
- crm_info("%s: Node %s[%u] - join-%u phase %u -> %u",
|
|
|
60de42 |
- source, node->uname, node->id, current_join_id, last, phase);
|
|
|
60de42 |
+ crm_info("%s: Node %s[%u] - join-%u phase %s -> %s",
|
|
|
60de42 |
+ source, node->uname, node->id, current_join_id,
|
|
|
60de42 |
+ crm_join_phase_str(last), crm_join_phase_str(phase));
|
|
|
60de42 |
|
|
|
60de42 |
- } else if(phase == last + 1) {
|
|
|
60de42 |
- node->join = phase;
|
|
|
60de42 |
- crm_info("%s: Node %s[%u] - join-%u phase %u -> %u",
|
|
|
60de42 |
- source, node->uname, node->id, current_join_id, last, phase);
|
|
|
60de42 |
} else {
|
|
|
60de42 |
crm_err("Could not update join for node %s because phase transition invalid "
|
|
|
60de42 |
- CRM_XS " join-%u source=%s node_id=%u last=%u new=%u",
|
|
|
60de42 |
- node->uname, current_join_id, source, node->id, last, phase);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ CRM_XS " join-%u source=%s node_id=%u last=%s new=%s",
|
|
|
60de42 |
+ node->uname, current_join_id, source, node->id,
|
|
|
60de42 |
+ crm_join_phase_str(last), crm_join_phase_str(phase));
|
|
|
60de42 |
}
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
@@ -691,27 +690,7 @@ void crmd_join_phase_log(int level)
|
|
|
60de42 |
|
|
|
60de42 |
g_hash_table_iter_init(&iter, crm_peer_cache);
|
|
|
60de42 |
while (g_hash_table_iter_next(&iter, NULL, (gpointer *) &peer)) {
|
|
|
60de42 |
- const char *state = "unknown";
|
|
|
60de42 |
- switch(peer->join) {
|
|
|
60de42 |
- case crm_join_nack:
|
|
|
60de42 |
- state = "nack";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- case crm_join_none:
|
|
|
60de42 |
- state = "none";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- case crm_join_welcomed:
|
|
|
60de42 |
- state = "welcomed";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- case crm_join_integrated:
|
|
|
60de42 |
- state = "integrated";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- case crm_join_finalized:
|
|
|
60de42 |
- state = "finalized";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- case crm_join_confirmed:
|
|
|
60de42 |
- state = "confirmed";
|
|
|
60de42 |
- break;
|
|
|
60de42 |
- }
|
|
|
60de42 |
- do_crm_log(level, "join-%d: %s=%s", current_join_id, peer->uname, state);
|
|
|
60de42 |
+ do_crm_log(level, "join-%d: %s=%s", current_join_id, peer->uname,
|
|
|
60de42 |
+ crm_join_phase_str(peer->join));
|
|
|
60de42 |
}
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/include/crm/cluster.h b/include/crm/cluster.h
|
|
|
60de42 |
index 27ee9eb..343ce08 100644
|
|
|
60de42 |
--- a/include/crm/cluster.h
|
|
|
60de42 |
+++ b/include/crm/cluster.h
|
|
|
60de42 |
@@ -235,4 +235,18 @@ char *pcmk_message_common_cs(cpg_handle_t handle, uint32_t nodeid, uint32_t pid,
|
|
|
60de42 |
uint32_t *kind, const char **from);
|
|
|
60de42 |
# endif
|
|
|
60de42 |
|
|
|
60de42 |
+static inline const char *
|
|
|
60de42 |
+crm_join_phase_str(enum crm_join_phase phase)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ switch (phase) {
|
|
|
60de42 |
+ case crm_join_nack: return "nack";
|
|
|
60de42 |
+ case crm_join_none: return "none";
|
|
|
60de42 |
+ case crm_join_welcomed: return "welcomed";
|
|
|
60de42 |
+ case crm_join_integrated: return "integrated";
|
|
|
60de42 |
+ case crm_join_finalized: return "finalized";
|
|
|
60de42 |
+ case crm_join_confirmed: return "confirmed";
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+ return "invalid";
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
#endif
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|
|
|
60de42 |
|
|
|
60de42 |
From dc977b614de9ce4018fa44c4f00c2b6b43c65c75 Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Fri, 17 Mar 2017 17:23:22 -0500
|
|
|
60de42 |
Subject: [PATCH 3/5] Feature: libcrmcommon: add convenience functions for
|
|
|
60de42 |
managing XML IDs
|
|
|
60de42 |
|
|
|
60de42 |
These handle ID sanitization and memory management for callers,
|
|
|
60de42 |
reducing the chance for mistakes.
|
|
|
60de42 |
---
|
|
|
60de42 |
include/crm/common/xml.h | 4 ++++
|
|
|
60de42 |
lib/common/xml.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
|
|
|
60de42 |
2 files changed, 49 insertions(+)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/include/crm/common/xml.h b/include/crm/common/xml.h
|
|
|
60de42 |
index a948915..f896464 100644
|
|
|
60de42 |
--- a/include/crm/common/xml.h
|
|
|
60de42 |
+++ b/include/crm/common/xml.h
|
|
|
60de42 |
@@ -373,4 +373,8 @@ void save_xml_to_file(xmlNode * xml, const char *desc, const char *filename);
|
|
|
60de42 |
char *xml_get_path(xmlNode *xml);
|
|
|
60de42 |
|
|
|
60de42 |
char * crm_xml_escape(const char *text);
|
|
|
60de42 |
+void crm_xml_sanitize_id(char *id);
|
|
|
60de42 |
+void crm_xml_set_id(xmlNode *xml, const char *format, ...)
|
|
|
60de42 |
+ __attribute__ ((__format__ (__printf__, 2, 3)));
|
|
|
60de42 |
+
|
|
|
60de42 |
#endif
|
|
|
60de42 |
diff --git a/lib/common/xml.c b/lib/common/xml.c
|
|
|
60de42 |
index c566956..0ea33d9 100644
|
|
|
60de42 |
--- a/lib/common/xml.c
|
|
|
60de42 |
+++ b/lib/common/xml.c
|
|
|
60de42 |
@@ -3036,6 +3036,51 @@ crm_xml_add_last_written(xmlNode *xml_node)
|
|
|
60de42 |
return crm_xml_add(xml_node, XML_CIB_ATTR_WRITTEN, now_str);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Sanitize a string so it is usable as an XML ID
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in,out] id String to sanitize
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+void
|
|
|
60de42 |
+crm_xml_sanitize_id(char *id)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ char *c;
|
|
|
60de42 |
+
|
|
|
60de42 |
+ for (c = id; *c; ++c) {
|
|
|
60de42 |
+ /* @TODO Sanitize more comprehensively */
|
|
|
60de42 |
+ switch (*c) {
|
|
|
60de42 |
+ case ':':
|
|
|
60de42 |
+ case '#':
|
|
|
60de42 |
+ *c = '.';
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Set the ID of an XML element using a format
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in,out] xml XML element
|
|
|
60de42 |
+ * \param[in] fmt printf-style format
|
|
|
60de42 |
+ * \param[in] ... any arguments required by format
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+void
|
|
|
60de42 |
+crm_xml_set_id(xmlNode *xml, const char *format, ...)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ va_list ap;
|
|
|
60de42 |
+ int len = 0;
|
|
|
60de42 |
+ char *id = NULL;
|
|
|
60de42 |
+
|
|
|
60de42 |
+ /* equivalent to crm_strdup_printf() */
|
|
|
60de42 |
+ va_start(ap, format);
|
|
|
60de42 |
+ len = vasprintf(&id, format, ap);
|
|
|
60de42 |
+ va_end(ap);
|
|
|
60de42 |
+ CRM_ASSERT(len > 0);
|
|
|
60de42 |
+
|
|
|
60de42 |
+ crm_xml_sanitize_id(id);
|
|
|
60de42 |
+ crm_xml_add(xml, XML_ATTR_ID, id);
|
|
|
60de42 |
+ free(id);
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
static int
|
|
|
60de42 |
write_xml_stream(xmlNode * xml_node, const char *filename, FILE * stream, gboolean compress)
|
|
|
60de42 |
{
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|
|
|
60de42 |
|
|
|
60de42 |
From bf39184154405621a07ce05a201fded861db2357 Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Fri, 17 Mar 2017 18:21:05 -0500
|
|
|
60de42 |
Subject: [PATCH 4/5] Refactor: various: use new convenience functions for
|
|
|
60de42 |
generating XML IDs
|
|
|
60de42 |
|
|
|
60de42 |
---
|
|
|
60de42 |
attrd/commands.c | 41 +++++++++++-------------------------
|
|
|
60de42 |
crmd/pengine.c | 8 +++----
|
|
|
60de42 |
lib/cluster/corosync.c | 5 +----
|
|
|
60de42 |
lib/pengine/unpack.c | 37 ++++++++-------------------------
|
|
|
60de42 |
tools/crm_node.c | 12 +++--------
|
|
|
60de42 |
tools/crm_resource_ban.c | 54 +++++++++++-------------------------------------
|
|
|
60de42 |
tools/fake_transition.c | 5 +----
|
|
|
60de42 |
7 files changed, 41 insertions(+), 121 deletions(-)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/attrd/commands.c b/attrd/commands.c
|
|
|
60de42 |
index 486efb6..98b4215 100644
|
|
|
60de42 |
--- a/attrd/commands.c
|
|
|
60de42 |
+++ b/attrd/commands.c
|
|
|
60de42 |
@@ -928,31 +928,9 @@ write_attributes(bool all, bool peer_discovered)
|
|
|
60de42 |
static void
|
|
|
60de42 |
build_update_element(xmlNode *parent, attribute_t *a, const char *nodeid, const char *value)
|
|
|
60de42 |
{
|
|
|
60de42 |
- char *set = NULL;
|
|
|
60de42 |
- char *uuid = NULL;
|
|
|
60de42 |
+ const char *set = NULL;
|
|
|
60de42 |
xmlNode *xml_obj = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
- if(a->set) {
|
|
|
60de42 |
- set = strdup(a->set);
|
|
|
60de42 |
- } else {
|
|
|
60de42 |
- set = crm_strdup_printf("%s-%s", XML_CIB_TAG_STATUS, nodeid);
|
|
|
60de42 |
- }
|
|
|
60de42 |
-
|
|
|
60de42 |
- if(a->uuid) {
|
|
|
60de42 |
- uuid = strdup(a->uuid);
|
|
|
60de42 |
- } else {
|
|
|
60de42 |
- int lpc;
|
|
|
60de42 |
- uuid = crm_strdup_printf("%s-%s", set, a->id);
|
|
|
60de42 |
-
|
|
|
60de42 |
- /* Minimal attempt at sanitizing automatic IDs */
|
|
|
60de42 |
- for (lpc = 0; uuid[lpc] != 0; lpc++) {
|
|
|
60de42 |
- switch (uuid[lpc]) {
|
|
|
60de42 |
- case ':':
|
|
|
60de42 |
- uuid[lpc] = '.';
|
|
|
60de42 |
- }
|
|
|
60de42 |
- }
|
|
|
60de42 |
- }
|
|
|
60de42 |
-
|
|
|
60de42 |
xml_obj = create_xml_node(parent, XML_CIB_TAG_STATE);
|
|
|
60de42 |
crm_xml_add(xml_obj, XML_ATTR_ID, nodeid);
|
|
|
60de42 |
|
|
|
60de42 |
@@ -960,10 +938,19 @@ build_update_element(xmlNode *parent, attribute_t *a, const char *nodeid, const
|
|
|
60de42 |
crm_xml_add(xml_obj, XML_ATTR_ID, nodeid);
|
|
|
60de42 |
|
|
|
60de42 |
xml_obj = create_xml_node(xml_obj, XML_TAG_ATTR_SETS);
|
|
|
60de42 |
- crm_xml_add(xml_obj, XML_ATTR_ID, set);
|
|
|
60de42 |
+ if (a->set) {
|
|
|
60de42 |
+ crm_xml_set_id(xml_obj, "%s", a->set);
|
|
|
60de42 |
+ } else {
|
|
|
60de42 |
+ crm_xml_set_id(xml_obj, "%s-%s", XML_CIB_TAG_STATUS, nodeid);
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+ set = ID(xml_obj);
|
|
|
60de42 |
|
|
|
60de42 |
xml_obj = create_xml_node(xml_obj, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- crm_xml_add(xml_obj, XML_ATTR_ID, uuid);
|
|
|
60de42 |
+ if (a->uuid) {
|
|
|
60de42 |
+ crm_xml_set_id(xml_obj, "%s", a->uuid);
|
|
|
60de42 |
+ } else {
|
|
|
60de42 |
+ crm_xml_set_id(xml_obj, "%s-%s", set, a->id);
|
|
|
60de42 |
+ }
|
|
|
60de42 |
crm_xml_add(xml_obj, XML_NVPAIR_ATTR_NAME, a->id);
|
|
|
60de42 |
|
|
|
60de42 |
if(value) {
|
|
|
60de42 |
@@ -973,9 +960,6 @@ build_update_element(xmlNode *parent, attribute_t *a, const char *nodeid, const
|
|
|
60de42 |
crm_xml_add(xml_obj, XML_NVPAIR_ATTR_VALUE, "");
|
|
|
60de42 |
crm_xml_add(xml_obj, "__delete__", XML_NVPAIR_ATTR_VALUE);
|
|
|
60de42 |
}
|
|
|
60de42 |
-
|
|
|
60de42 |
- free(uuid);
|
|
|
60de42 |
- free(set);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
void
|
|
|
60de42 |
diff --git a/crmd/pengine.c b/crmd/pengine.c
|
|
|
60de42 |
index 5a301c5..17613cf 100644
|
|
|
60de42 |
--- a/crmd/pengine.c
|
|
|
60de42 |
+++ b/crmd/pengine.c
|
|
|
60de42 |
@@ -264,12 +264,12 @@ force_local_option(xmlNode *xml, const char *attr_name, const char *attr_value)
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
if(max == 0) {
|
|
|
60de42 |
- char *attr_id = crm_concat(CIB_OPTIONS_FIRST, attr_name, '-');
|
|
|
60de42 |
xmlNode *configuration = NULL;
|
|
|
60de42 |
xmlNode *crm_config = NULL;
|
|
|
60de42 |
xmlNode *cluster_property_set = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
- crm_trace("Creating %s/%s = %s", attr_id, attr_name, attr_value);
|
|
|
60de42 |
+ crm_trace("Creating %s-%s for %s=%s",
|
|
|
60de42 |
+ CIB_OPTIONS_FIRST, attr_name, attr_name, attr_value);
|
|
|
60de42 |
|
|
|
60de42 |
configuration = find_entity(xml, XML_CIB_TAG_CONFIGURATION, NULL);
|
|
|
60de42 |
if (configuration == NULL) {
|
|
|
60de42 |
@@ -289,11 +289,9 @@ force_local_option(xmlNode *xml, const char *attr_name, const char *attr_value)
|
|
|
60de42 |
|
|
|
60de42 |
xml = create_xml_node(cluster_property_set, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
|
|
|
60de42 |
- crm_xml_add(xml, XML_ATTR_ID, attr_id);
|
|
|
60de42 |
+ crm_xml_set_id(xml, "%s-%s", CIB_OPTIONS_FIRST, attr_name);
|
|
|
60de42 |
crm_xml_add(xml, XML_NVPAIR_ATTR_NAME, attr_name);
|
|
|
60de42 |
crm_xml_add(xml, XML_NVPAIR_ATTR_VALUE, attr_value);
|
|
|
60de42 |
-
|
|
|
60de42 |
- free(attr_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
freeXpathObject(xpathObj);
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/lib/cluster/corosync.c b/lib/cluster/corosync.c
|
|
|
60de42 |
index b02ae73..dfc781c 100644
|
|
|
60de42 |
--- a/lib/cluster/corosync.c
|
|
|
60de42 |
+++ b/lib/cluster/corosync.c
|
|
|
60de42 |
@@ -548,12 +548,9 @@ corosync_initialize_nodelist(void *cluster, gboolean force_member, xmlNode * xml
|
|
|
60de42 |
any = TRUE;
|
|
|
60de42 |
|
|
|
60de42 |
if (xml_parent) {
|
|
|
60de42 |
- char buffer[64];
|
|
|
60de42 |
xmlNode *node = create_xml_node(xml_parent, XML_CIB_TAG_NODE);
|
|
|
60de42 |
|
|
|
60de42 |
- if(snprintf(buffer, 63, "%u", nodeid) > 0) {
|
|
|
60de42 |
- crm_xml_add(node, XML_ATTR_ID, buffer);
|
|
|
60de42 |
- }
|
|
|
60de42 |
+ crm_xml_set_id(node, "%u", nodeid);
|
|
|
60de42 |
crm_xml_add(node, XML_ATTR_UNAME, name);
|
|
|
60de42 |
if (force_member) {
|
|
|
60de42 |
crm_xml_add(node, XML_ATTR_TYPE, CRM_NODE_MEMBER);
|
|
|
60de42 |
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
|
|
|
60de42 |
index e6a8f58..57aa5f2 100644
|
|
|
60de42 |
--- a/lib/pengine/unpack.c
|
|
|
60de42 |
+++ b/lib/pengine/unpack.c
|
|
|
60de42 |
@@ -373,7 +373,6 @@ expand_remote_rsc_meta(xmlNode *xml_obj, xmlNode *parent, GHashTable **rsc_name_
|
|
|
60de42 |
const char *remote_port = NULL;
|
|
|
60de42 |
const char *connect_timeout = "60s";
|
|
|
60de42 |
const char *remote_allow_migrate=NULL;
|
|
|
60de42 |
- char *tmp_id = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
for (attr_set = __xml_first_child(xml_obj); attr_set != NULL; attr_set = __xml_next_element(attr_set)) {
|
|
|
60de42 |
if (safe_str_neq((const char *)attr_set->name, XML_TAG_META_SETS)) {
|
|
|
60de42 |
@@ -427,73 +426,55 @@ expand_remote_rsc_meta(xmlNode *xml_obj, xmlNode *parent, GHashTable **rsc_name_
|
|
|
60de42 |
crm_xml_add(xml_rsc, XML_ATTR_TYPE, "remote");
|
|
|
60de42 |
|
|
|
60de42 |
xml_tmp = create_xml_node(xml_rsc, XML_TAG_META_SETS);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, XML_TAG_META_SETS, '_');
|
|
|
60de42 |
- crm_xml_add(xml_tmp, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(xml_tmp, "%s_%s", remote_name, XML_TAG_META_SETS);
|
|
|
60de42 |
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "meta-attributes-container", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "meta-attributes-container");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, XML_RSC_ATTR_CONTAINER);
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_VALUE, container_id);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "meta-attributes-internal", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "meta-attributes-internal");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, XML_RSC_ATTR_INTERNAL_RSC);
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_VALUE, "true");
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
|
|
|
60de42 |
if (remote_allow_migrate) {
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "meta-attributes-container", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "meta-attributes-container");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, XML_OP_ATTR_ALLOW_MIGRATE);
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_VALUE, remote_allow_migrate);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
xml_tmp = create_xml_node(xml_rsc, "operations");
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_ATTR_OP);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "monitor-interval-30s", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "monitor-interval-30s");
|
|
|
60de42 |
crm_xml_add(attr, XML_ATTR_TIMEOUT, "30s");
|
|
|
60de42 |
crm_xml_add(attr, XML_LRM_ATTR_INTERVAL, "30s");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, "monitor");
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
|
|
|
60de42 |
if (connect_timeout) {
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_ATTR_OP);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "start-interval-0", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "start-interval-0");
|
|
|
60de42 |
crm_xml_add(attr, XML_ATTR_TIMEOUT, connect_timeout);
|
|
|
60de42 |
crm_xml_add(attr, XML_LRM_ATTR_INTERVAL, "0");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, "start");
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
if (remote_port || remote_server) {
|
|
|
60de42 |
xml_tmp = create_xml_node(xml_rsc, XML_TAG_ATTR_SETS);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, XML_TAG_ATTR_SETS, '_');
|
|
|
60de42 |
- crm_xml_add(xml_tmp, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(xml_tmp, "%s_%s", remote_name, XML_TAG_ATTR_SETS);
|
|
|
60de42 |
|
|
|
60de42 |
if (remote_server) {
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "instance-attributes-addr", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "instance-attributes-addr");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, "addr");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_VALUE, remote_server);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
if (remote_port) {
|
|
|
60de42 |
attr = create_xml_node(xml_tmp, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- tmp_id = crm_concat(remote_name, "instance-attributes-port", '_');
|
|
|
60de42 |
- crm_xml_add(attr, XML_ATTR_ID, tmp_id);
|
|
|
60de42 |
+ crm_xml_set_id(attr, "%s_%s", remote_name, "instance-attributes-port");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_NAME, "port");
|
|
|
60de42 |
crm_xml_add(attr, XML_NVPAIR_ATTR_VALUE, remote_port);
|
|
|
60de42 |
- free(tmp_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/tools/crm_node.c b/tools/crm_node.c
|
|
|
60de42 |
index 7092db4..9b60c55 100644
|
|
|
60de42 |
--- a/tools/crm_node.c
|
|
|
60de42 |
+++ b/tools/crm_node.c
|
|
|
60de42 |
@@ -105,11 +105,8 @@ cib_remove_node(uint32_t id, const char *name)
|
|
|
60de42 |
crm_xml_add(node, XML_ATTR_UNAME, name);
|
|
|
60de42 |
crm_xml_add(node_state, XML_ATTR_UNAME, name);
|
|
|
60de42 |
if(id) {
|
|
|
60de42 |
- char buffer[64];
|
|
|
60de42 |
- if(snprintf(buffer, 63, "%u", id) > 0) {
|
|
|
60de42 |
- crm_xml_add(node, XML_ATTR_ID, buffer);
|
|
|
60de42 |
- crm_xml_add(node_state, XML_ATTR_ID, buffer);
|
|
|
60de42 |
- }
|
|
|
60de42 |
+ crm_xml_set_id(node, "%u", id);
|
|
|
60de42 |
+ crm_xml_add(node_state, XML_ATTR_ID, ID(node));
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
cib = cib_new();
|
|
|
60de42 |
@@ -200,10 +197,7 @@ int tools_remove_node_cache(const char *node, const char *target)
|
|
|
60de42 |
cmd = create_request(CRM_OP_RM_NODE_CACHE,
|
|
|
60de42 |
NULL, NULL, target, crm_system_name, admin_uuid);
|
|
|
60de42 |
if (n) {
|
|
|
60de42 |
- char buffer[64];
|
|
|
60de42 |
- if(snprintf(buffer, 63, "%u", n) > 0) {
|
|
|
60de42 |
- crm_xml_add(cmd, XML_ATTR_ID, buffer);
|
|
|
60de42 |
- }
|
|
|
60de42 |
+ crm_xml_set_id(cmd, "%u", n);
|
|
|
60de42 |
}
|
|
|
60de42 |
crm_xml_add(cmd, XML_ATTR_UNAME, name);
|
|
|
60de42 |
}
|
|
|
60de42 |
diff --git a/tools/crm_resource_ban.c b/tools/crm_resource_ban.c
|
|
|
60de42 |
index 2f7b366..69b49bf 100644
|
|
|
60de42 |
--- a/tools/crm_resource_ban.c
|
|
|
60de42 |
+++ b/tools/crm_resource_ban.c
|
|
|
60de42 |
@@ -62,7 +62,6 @@ cli_resource_ban(const char *rsc_id, const char *host, GListPtr allnodes, cib_t
|
|
|
60de42 |
{
|
|
|
60de42 |
char *later_s = NULL;
|
|
|
60de42 |
int rc = pcmk_ok;
|
|
|
60de42 |
- char *id = NULL;
|
|
|
60de42 |
xmlNode *fragment = NULL;
|
|
|
60de42 |
xmlNode *location = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
@@ -83,10 +82,8 @@ cli_resource_ban(const char *rsc_id, const char *host, GListPtr allnodes, cib_t
|
|
|
60de42 |
|
|
|
60de42 |
fragment = create_xml_node(NULL, XML_CIB_TAG_CONSTRAINTS);
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s", rsc_id, host);
|
|
|
60de42 |
location = create_xml_node(fragment, XML_CONS_TAG_RSC_LOCATION);
|
|
|
60de42 |
- crm_xml_add(location, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
+ crm_xml_set_id(location, "cli-ban-%s-on-%s", rsc_id, host);
|
|
|
60de42 |
|
|
|
60de42 |
if (BE_QUIET == FALSE) {
|
|
|
60de42 |
CMD_ERR("WARNING: Creating rsc_location constraint '%s'"
|
|
|
60de42 |
@@ -117,27 +114,18 @@ cli_resource_ban(const char *rsc_id, const char *host, GListPtr allnodes, cib_t
|
|
|
60de42 |
xmlNode *rule = create_xml_node(location, XML_TAG_RULE);
|
|
|
60de42 |
xmlNode *expr = create_xml_node(rule, XML_TAG_EXPRESSION);
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s-rule", rsc_id, host);
|
|
|
60de42 |
- crm_xml_add(rule, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(rule, "cli-ban-%s-on-%s-rule", rsc_id, host);
|
|
|
60de42 |
crm_xml_add(rule, XML_RULE_ATTR_SCORE, MINUS_INFINITY_S);
|
|
|
60de42 |
crm_xml_add(rule, XML_RULE_ATTR_BOOLEAN_OP, "and");
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s-expr", rsc_id, host);
|
|
|
60de42 |
- crm_xml_add(expr, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(expr, "cli-ban-%s-on-%s-expr", rsc_id, host);
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_ATTRIBUTE, "#uname");
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_OPERATION, "eq");
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_VALUE, host);
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_TYPE, "string");
|
|
|
60de42 |
|
|
|
60de42 |
expr = create_xml_node(rule, "date_expression");
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s-lifetime", rsc_id, host);
|
|
|
60de42 |
- crm_xml_add(expr, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(expr, "cli-ban-%s-on-%s-lifetime", rsc_id, host);
|
|
|
60de42 |
crm_xml_add(expr, "operation", "lt");
|
|
|
60de42 |
crm_xml_add(expr, "end", later_s);
|
|
|
60de42 |
}
|
|
|
60de42 |
@@ -156,7 +144,6 @@ cli_resource_prefer(const char *rsc_id, const char *host, cib_t * cib_conn)
|
|
|
60de42 |
{
|
|
|
60de42 |
char *later_s = parse_cli_lifetime(move_lifetime);
|
|
|
60de42 |
int rc = pcmk_ok;
|
|
|
60de42 |
- char *id = NULL;
|
|
|
60de42 |
xmlNode *location = NULL;
|
|
|
60de42 |
xmlNode *fragment = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
@@ -171,10 +158,8 @@ cli_resource_prefer(const char *rsc_id, const char *host, cib_t * cib_conn)
|
|
|
60de42 |
|
|
|
60de42 |
fragment = create_xml_node(NULL, XML_CIB_TAG_CONSTRAINTS);
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-prefer-%s", rsc_id);
|
|
|
60de42 |
location = create_xml_node(fragment, XML_CONS_TAG_RSC_LOCATION);
|
|
|
60de42 |
- crm_xml_add(location, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
+ crm_xml_set_id(location, "cli-prefer-%s", rsc_id);
|
|
|
60de42 |
|
|
|
60de42 |
crm_xml_add(location, XML_LOC_ATTR_SOURCE, rsc_id);
|
|
|
60de42 |
if(scope_master) {
|
|
|
60de42 |
@@ -192,27 +177,18 @@ cli_resource_prefer(const char *rsc_id, const char *host, cib_t * cib_conn)
|
|
|
60de42 |
xmlNode *rule = create_xml_node(location, XML_TAG_RULE);
|
|
|
60de42 |
xmlNode *expr = create_xml_node(rule, XML_TAG_EXPRESSION);
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_concat("cli-prefer-rule", rsc_id, '-');
|
|
|
60de42 |
- crm_xml_add(rule, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(rule, "cli-prefer-rule-%s", rsc_id);
|
|
|
60de42 |
crm_xml_add(rule, XML_RULE_ATTR_SCORE, INFINITY_S);
|
|
|
60de42 |
crm_xml_add(rule, XML_RULE_ATTR_BOOLEAN_OP, "and");
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_concat("cli-prefer-expr", rsc_id, '-');
|
|
|
60de42 |
- crm_xml_add(expr, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(expr, "cli-prefer-expr-%s", rsc_id);
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_ATTRIBUTE, "#uname");
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_OPERATION, "eq");
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_VALUE, host);
|
|
|
60de42 |
crm_xml_add(expr, XML_EXPR_ATTR_TYPE, "string");
|
|
|
60de42 |
|
|
|
60de42 |
expr = create_xml_node(rule, "date_expression");
|
|
|
60de42 |
- id = crm_concat("cli-prefer-lifetime-end", rsc_id, '-');
|
|
|
60de42 |
- crm_xml_add(expr, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
-
|
|
|
60de42 |
+ crm_xml_set_id(expr, "cli-prefer-lifetime-end-%s", rsc_id);
|
|
|
60de42 |
crm_xml_add(expr, "operation", "lt");
|
|
|
60de42 |
crm_xml_add(expr, "end", later_s);
|
|
|
60de42 |
}
|
|
|
60de42 |
@@ -228,7 +204,6 @@ cli_resource_prefer(const char *rsc_id, const char *host, cib_t * cib_conn)
|
|
|
60de42 |
int
|
|
|
60de42 |
cli_resource_clear(const char *rsc_id, const char *host, GListPtr allnodes, cib_t * cib_conn)
|
|
|
60de42 |
{
|
|
|
60de42 |
- char *id = NULL;
|
|
|
60de42 |
int rc = pcmk_ok;
|
|
|
60de42 |
xmlNode *fragment = NULL;
|
|
|
60de42 |
xmlNode *location = NULL;
|
|
|
60de42 |
@@ -240,30 +215,25 @@ cli_resource_clear(const char *rsc_id, const char *host, GListPtr allnodes, cib_
|
|
|
60de42 |
fragment = create_xml_node(NULL, XML_CIB_TAG_CONSTRAINTS);
|
|
|
60de42 |
|
|
|
60de42 |
if(host) {
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s", rsc_id, host);
|
|
|
60de42 |
location = create_xml_node(fragment, XML_CONS_TAG_RSC_LOCATION);
|
|
|
60de42 |
- crm_xml_add(location, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
+ crm_xml_set_id(location, "cli-ban-%s-on-%s", rsc_id, host);
|
|
|
60de42 |
|
|
|
60de42 |
} else {
|
|
|
60de42 |
GListPtr n = allnodes;
|
|
|
60de42 |
for(; n; n = n->next) {
|
|
|
60de42 |
node_t *target = n->data;
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-ban-%s-on-%s", rsc_id, target->details->uname);
|
|
|
60de42 |
location = create_xml_node(fragment, XML_CONS_TAG_RSC_LOCATION);
|
|
|
60de42 |
- crm_xml_add(location, XML_ATTR_ID, id);
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
+ crm_xml_set_id(location, "cli-ban-%s-on-%s",
|
|
|
60de42 |
+ rsc_id, target->details->uname);
|
|
|
60de42 |
}
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
- id = crm_strdup_printf("cli-prefer-%s", rsc_id);
|
|
|
60de42 |
location = create_xml_node(fragment, XML_CONS_TAG_RSC_LOCATION);
|
|
|
60de42 |
- crm_xml_add(location, XML_ATTR_ID, id);
|
|
|
60de42 |
+ crm_xml_set_id(location, "cli-prefer-%s", rsc_id);
|
|
|
60de42 |
if(host && do_force == FALSE) {
|
|
|
60de42 |
crm_xml_add(location, XML_CIB_TAG_NODE, host);
|
|
|
60de42 |
}
|
|
|
60de42 |
- free(id);
|
|
|
60de42 |
|
|
|
60de42 |
crm_log_xml_info(fragment, "Delete");
|
|
|
60de42 |
rc = cib_conn->cmds->delete(cib_conn, XML_CIB_TAG_CONSTRAINTS, fragment, cib_options);
|
|
|
60de42 |
diff --git a/tools/fake_transition.c b/tools/fake_transition.c
|
|
|
60de42 |
index 26f55a2..9f9eaed 100644
|
|
|
60de42 |
--- a/tools/fake_transition.c
|
|
|
60de42 |
+++ b/tools/fake_transition.c
|
|
|
60de42 |
@@ -67,7 +67,6 @@ inject_transient_attr(xmlNode * cib_node, const char *name, const char *value)
|
|
|
60de42 |
xmlNode *nvp = NULL;
|
|
|
60de42 |
xmlChar *node_path;
|
|
|
60de42 |
const char *node_uuid = ID(cib_node);
|
|
|
60de42 |
- char *nvp_id = crm_concat(name, node_uuid, '-');
|
|
|
60de42 |
|
|
|
60de42 |
node_path = xmlGetNodePath(cib_node);
|
|
|
60de42 |
quiet_log(" + Injecting attribute %s=%s into %s '%s'\n",
|
|
|
60de42 |
@@ -87,11 +86,9 @@ inject_transient_attr(xmlNode * cib_node, const char *name, const char *value)
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
nvp = create_xml_node(container, XML_CIB_TAG_NVPAIR);
|
|
|
60de42 |
- crm_xml_add(nvp, XML_ATTR_ID, nvp_id);
|
|
|
60de42 |
+ crm_xml_set_id(nvp, "%s-%s", name, node_uuid);
|
|
|
60de42 |
crm_xml_add(nvp, XML_NVPAIR_ATTR_NAME, name);
|
|
|
60de42 |
crm_xml_add(nvp, XML_NVPAIR_ATTR_VALUE, value);
|
|
|
60de42 |
-
|
|
|
60de42 |
- free(nvp_id);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
static void
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|
|
|
60de42 |
|
|
|
60de42 |
From c37145733538ee92153dc26e5b40c6fcfad47fdb Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Mon, 20 Mar 2017 10:52:42 -0500
|
|
|
60de42 |
Subject: [PATCH 5/5] Refactor: libpe_status: add convenience functions for
|
|
|
60de42 |
clone detection
|
|
|
60de42 |
|
|
|
60de42 |
---
|
|
|
60de42 |
include/crm/pengine/status.h | 41 +++++++++++++++++++++++++++++++++++++++++
|
|
|
60de42 |
1 file changed, 41 insertions(+)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
|
|
|
60de42 |
index e748792..ce3236b 100644
|
|
|
60de42 |
--- a/include/crm/pengine/status.h
|
|
|
60de42 |
+++ b/include/crm/pengine/status.h
|
|
|
60de42 |
@@ -19,6 +19,7 @@
|
|
|
60de42 |
# define PENGINE_STATUS__H
|
|
|
60de42 |
|
|
|
60de42 |
# include <glib.h>
|
|
|
60de42 |
+# include <stdbool.h>
|
|
|
60de42 |
# include <crm/common/iso8601.h>
|
|
|
60de42 |
# include <crm/pengine/common.h>
|
|
|
60de42 |
|
|
|
60de42 |
@@ -433,4 +434,44 @@ node_t *pe_find_node_id(GListPtr node_list, const char *id);
|
|
|
60de42 |
node_t *pe_find_node_any(GListPtr node_list, const char *id, const char *uname);
|
|
|
60de42 |
GListPtr find_operations(const char *rsc, const char *node, gboolean active_filter,
|
|
|
60de42 |
pe_working_set_t * data_set);
|
|
|
60de42 |
+
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Check whether a resource is any clone type
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in] rsc Resource to check
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \return TRUE if resource is clone, FALSE otherwise
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+static inline bool
|
|
|
60de42 |
+pe_rsc_is_clone(resource_t *rsc)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ return rsc && ((rsc->variant == pe_clone) || (rsc->variant == pe_master));
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Check whether a resource is a globally unique clone
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in] rsc Resource to check
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \return TRUE if resource is unique clone, FALSE otherwise
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+static inline bool
|
|
|
60de42 |
+pe_rsc_is_unique_clone(resource_t *rsc)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ return pe_rsc_is_clone(rsc) && is_set(rsc->flags, pe_rsc_unique);
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Check whether a resource is an anonymous clone
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in] rsc Resource to check
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \return TRUE if resource is anonymous clone, FALSE otherwise
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+static inline bool
|
|
|
60de42 |
+pe_rsc_is_anon_clone(resource_t *rsc)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ return pe_rsc_is_clone(rsc) && is_not_set(rsc->flags, pe_rsc_unique);
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
#endif
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|