summaryrefslogtreecommitdiffstats
path: root/lib/pengine/clone.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pengine/clone.c')
-rw-r--r--lib/pengine/clone.c250
1 files changed, 147 insertions, 103 deletions
diff --git a/lib/pengine/clone.c b/lib/pengine/clone.c
index a92a4b7..596b00e 100644
--- a/lib/pengine/clone.c
+++ b/lib/pengine/clone.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2023 the Pacemaker project contributors
+ * Copyright 2004-2024 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
@@ -15,7 +15,7 @@
#include <crm/pengine/status.h>
#include <crm/pengine/internal.h>
#include <pe_status_private.h>
-#include <crm/msg_xml.h>
+#include <crm/common/xml.h>
#include <crm/common/output.h>
#include <crm/common/xml_internal.h>
#include <crm/common/scheduler_internal.h>
@@ -24,8 +24,8 @@
#define PROMOTED_INSTANCES PCMK__ROLE_PROMOTED_LEGACY "s"
#define UNPROMOTED_INSTANCES PCMK__ROLE_UNPROMOTED_LEGACY "s"
#else
-#define PROMOTED_INSTANCES PCMK__ROLE_PROMOTED
-#define UNPROMOTED_INSTANCES PCMK__ROLE_UNPROMOTED
+#define PROMOTED_INSTANCES PCMK_ROLE_PROMOTED
+#define UNPROMOTED_INSTANCES PCMK_ROLE_UNPROMOTED
#endif
typedef struct clone_variant_data_s {
@@ -47,8 +47,8 @@ typedef struct clone_variant_data_s {
xmlNode *xml_obj_child;
} clone_variant_data_t;
-#define get_clone_variant_data(data, rsc) \
- CRM_ASSERT((rsc != NULL) && (rsc->variant == pcmk_rsc_variant_clone)); \
+#define get_clone_variant_data(data, rsc) \
+ CRM_ASSERT(pcmk__is_clone(rsc) && (rsc->variant_opaque != NULL)); \
data = (clone_variant_data_t *) rsc->variant_opaque;
/*!
@@ -194,13 +194,15 @@ clone_header(pcmk__output_t *out, int *rc, const pcmk_resource_t *rsc,
if (attrs != NULL) {
PCMK__OUTPUT_LIST_HEADER(out, FALSE, *rc, "Clone Set: %s [%s] (%s)%s%s%s",
- rsc->id, ID(clone_data->xml_obj_child),
+ rsc->id,
+ pcmk__xe_id(clone_data->xml_obj_child),
(const char *) attrs->str, desc ? " (" : "",
desc ? desc : "", desc ? ")" : "");
g_string_free(attrs, TRUE);
} else {
PCMK__OUTPUT_LIST_HEADER(out, FALSE, *rc, "Clone Set: %s [%s]%s%s%s",
- rsc->id, ID(clone_data->xml_obj_child),
+ rsc->id,
+ pcmk__xe_id(clone_data->xml_obj_child),
desc ? " (" : "", desc ? desc : "",
desc ? ")" : "");
}
@@ -210,12 +212,12 @@ void
pe__force_anon(const char *standard, pcmk_resource_t *rsc, const char *rid,
pcmk_scheduler_t *scheduler)
{
- if (pe_rsc_is_clone(rsc)) {
+ if (pcmk__is_clone(rsc)) {
clone_variant_data_t *clone_data = rsc->variant_opaque;
- pe_warn("Ignoring " XML_RSC_ATTR_UNIQUE " for %s because %s resources "
- "such as %s can be used only as anonymous clones",
- rsc->id, standard, rid);
+ pcmk__config_warn("Ignoring " PCMK_META_GLOBALLY_UNIQUE " for %s "
+ "because %s resources such as %s can be used only as "
+ "anonymous clones", rsc->id, standard, rid);
clone_data->clone_node_max = 1;
clone_data->clone_max = QB_MIN(clone_data->clone_max,
@@ -233,7 +235,7 @@ find_clone_instance(const pcmk_resource_t *rsc, const char *sub_id)
get_clone_variant_data(clone_data, rsc);
- child_base = ID(clone_data->xml_obj_child);
+ child_base = pcmk__xe_id(clone_data->xml_obj_child);
child_id = crm_strdup_printf("%s:%s", child_base, sub_id);
child = pe_find_resource(rsc->children, child_id);
@@ -264,9 +266,9 @@ pe__create_clone_child(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
inc_num = pcmk__itoa(clone_data->total_clones);
inc_max = pcmk__itoa(clone_data->clone_max);
- child_copy = copy_xml(clone_data->xml_obj_child);
+ child_copy = pcmk__xml_copy(NULL, clone_data->xml_obj_child);
- crm_xml_add(child_copy, XML_RSC_ATTR_INCARNATION, inc_num);
+ crm_xml_add(child_copy, PCMK__META_CLONE, inc_num);
if (pe__unpack_resource(child_copy, &child_rsc, rsc,
scheduler) != pcmk_rc_ok) {
@@ -276,14 +278,15 @@ pe__create_clone_child(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
CRM_ASSERT(child_rsc);
clone_data->total_clones += 1;
- pe_rsc_trace(child_rsc, "Setting clone attributes for: %s", child_rsc->id);
+ pcmk__rsc_trace(child_rsc, "Setting clone attributes for: %s",
+ child_rsc->id);
rsc->children = g_list_append(rsc->children, child_rsc);
if (as_orphan) {
pe__set_resource_flags_recursive(child_rsc, pcmk_rsc_removed);
}
- add_hash_param(child_rsc->meta, PCMK_META_CLONE_MAX, inc_max);
- pe_rsc_trace(rsc, "Added %s instance %s", rsc->id, child_rsc->id);
+ pcmk__insert_meta(child_rsc, PCMK_META_CLONE_MAX, inc_max);
+ pcmk__rsc_trace(rsc, "Added %s instance %s", rsc->id, child_rsc->id);
bail:
free(inc_num);
@@ -314,6 +317,26 @@ unpack_meta_int(const pcmk_resource_t *rsc, const char *meta_name,
if ((value == NULL) && (deprecated_name != NULL)) {
value = g_hash_table_lookup(rsc->meta, deprecated_name);
+
+ if (value != NULL) {
+ if (pcmk__str_eq(deprecated_name, PCMK__META_PROMOTED_MAX_LEGACY,
+ pcmk__str_none)) {
+ pcmk__warn_once(pcmk__wo_clone_master_max,
+ "Support for the " PCMK__META_PROMOTED_MAX_LEGACY
+ " meta-attribute (such as in %s) is deprecated "
+ "and will be removed in a future release. Use the "
+ PCMK_META_PROMOTED_MAX " meta-attribute instead.",
+ rsc->id);
+ } else if (pcmk__str_eq(deprecated_name, PCMK__META_PROMOTED_NODE_MAX_LEGACY,
+ pcmk__str_none)) {
+ pcmk__warn_once(pcmk__wo_clone_master_node_max,
+ "Support for the " PCMK__META_PROMOTED_NODE_MAX_LEGACY
+ " meta-attribute (such as in %s) is deprecated "
+ "and will be removed in a future release. Use the "
+ PCMK_META_PROMOTED_NODE_MAX " meta-attribute instead.",
+ rsc->id);
+ }
+ }
}
if (value != NULL) {
pcmk__scan_min_int(value, &integer, 0);
@@ -329,28 +352,25 @@ clone_unpack(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
xmlNode *xml_obj = rsc->xml;
clone_variant_data_t *clone_data = NULL;
- pe_rsc_trace(rsc, "Processing resource %s...", rsc->id);
+ pcmk__rsc_trace(rsc, "Processing resource %s...", rsc->id);
- clone_data = calloc(1, sizeof(clone_variant_data_t));
+ clone_data = pcmk__assert_alloc(1, sizeof(clone_variant_data_t));
rsc->variant_opaque = clone_data;
if (pcmk_is_set(rsc->flags, pcmk_rsc_promotable)) {
// Use 1 as default but 0 for minimum and invalid
- // @COMPAT PCMK_XA_PROMOTED_MAX_LEGACY deprecated since 2.0.0
- clone_data->promoted_max = unpack_meta_int(rsc, PCMK_META_PROMOTED_MAX,
- PCMK_XA_PROMOTED_MAX_LEGACY,
- 1);
+ // @COMPAT PCMK__META_PROMOTED_MAX_LEGACY deprecated since 2.0.0
+ clone_data->promoted_max =
+ unpack_meta_int(rsc, PCMK_META_PROMOTED_MAX,
+ PCMK__META_PROMOTED_MAX_LEGACY, 1);
// Use 1 as default but 0 for minimum and invalid
- // @COMPAT PCMK_XA_PROMOTED_NODE_MAX_LEGACY deprecated since 2.0.0
+ // @COMPAT PCMK__META_PROMOTED_NODE_MAX_LEGACY deprecated since 2.0.0
clone_data->promoted_node_max =
unpack_meta_int(rsc, PCMK_META_PROMOTED_NODE_MAX,
- PCMK_XA_PROMOTED_NODE_MAX_LEGACY, 1);
+ PCMK__META_PROMOTED_NODE_MAX_LEGACY, 1);
}
- // Implied by calloc()
- /* clone_data->xml_obj_child = NULL; */
-
// Use 1 as default but 0 for minimum and invalid
clone_data->clone_node_max = unpack_meta_int(rsc, PCMK_META_CLONE_NODE_MAX,
NULL, 1);
@@ -361,7 +381,7 @@ clone_unpack(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
clone_data->clone_max = unpack_meta_int(rsc, PCMK_META_CLONE_MAX, NULL,
QB_MAX(1, g_list_length(scheduler->nodes)));
- if (crm_is_true(g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_ORDERED))) {
+ if (crm_is_true(g_hash_table_lookup(rsc->meta, PCMK_META_ORDERED))) {
clone_data->flags = pcmk__set_flags_as(__func__, __LINE__, LOG_TRACE,
"Clone", rsc->id,
clone_data->flags,
@@ -378,19 +398,20 @@ clone_unpack(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
clone_data->clone_node_max = 1;
}
- pe_rsc_trace(rsc, "Options for %s", rsc->id);
- pe_rsc_trace(rsc, "\tClone max: %d", clone_data->clone_max);
- pe_rsc_trace(rsc, "\tClone node max: %d", clone_data->clone_node_max);
- pe_rsc_trace(rsc, "\tClone is unique: %s",
- pe__rsc_bool_str(rsc, pcmk_rsc_unique));
- pe_rsc_trace(rsc, "\tClone is promotable: %s",
- pe__rsc_bool_str(rsc, pcmk_rsc_promotable));
+ pcmk__rsc_trace(rsc, "Options for %s", rsc->id);
+ pcmk__rsc_trace(rsc, "\tClone max: %d", clone_data->clone_max);
+ pcmk__rsc_trace(rsc, "\tClone node max: %d", clone_data->clone_node_max);
+ pcmk__rsc_trace(rsc, "\tClone is unique: %s",
+ pcmk__flag_text(rsc->flags, pcmk_rsc_unique));
+ pcmk__rsc_trace(rsc, "\tClone is promotable: %s",
+ pcmk__flag_text(rsc->flags, pcmk_rsc_promotable));
// Clones may contain a single group or primitive
- for (a_child = pcmk__xe_first_child(xml_obj); a_child != NULL;
- a_child = pcmk__xe_next(a_child)) {
+ for (a_child = pcmk__xe_first_child(xml_obj, NULL, NULL, NULL);
+ a_child != NULL; a_child = pcmk__xe_next(a_child)) {
- if (pcmk__str_any_of((const char *)a_child->name, XML_CIB_TAG_RESOURCE, XML_CIB_TAG_GROUP, NULL)) {
+ if (pcmk__str_any_of((const char *) a_child->name,
+ PCMK_XE_PRIMITIVE, PCMK_XE_GROUP, NULL)) {
clone_data->xml_obj_child = a_child;
break;
}
@@ -407,15 +428,16 @@ clone_unpack(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
* This helps ensure clone instances are not shuffled around the cluster
* for no benefit in situations when pre-allocation is not appropriate
*/
- if (g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_STICKINESS) == NULL) {
- add_hash_param(rsc->meta, XML_RSC_ATTR_STICKINESS, "1");
+ if (g_hash_table_lookup(rsc->meta, PCMK_META_RESOURCE_STICKINESS) == NULL) {
+ pcmk__insert_meta(rsc, PCMK_META_RESOURCE_STICKINESS, "1");
}
- /* This ensures that the globally-unique value always exists for children to
- * inherit when being unpacked, as well as in resource agents' environment.
+ /* This ensures that the PCMK_META_GLOBALLY_UNIQUE value always exists for
+ * children to inherit when being unpacked, as well as in resource agents'
+ * environment.
*/
- add_hash_param(rsc->meta, XML_RSC_ATTR_UNIQUE,
- pe__rsc_bool_str(rsc, pcmk_rsc_unique));
+ pcmk__insert_meta(rsc, PCMK_META_GLOBALLY_UNIQUE,
+ pcmk__flag_text(rsc->flags, pcmk_rsc_unique));
if (clone_data->clone_max <= 0) {
/* Create one child instance so that unpack_find_resource() will hook up
@@ -434,7 +456,8 @@ clone_unpack(pcmk_resource_t *rsc, pcmk_scheduler_t *scheduler)
}
}
- pe_rsc_trace(rsc, "Added %d children to resource %s...", clone_data->clone_max, rsc->id);
+ pcmk__rsc_trace(rsc, "Added %d children to resource %s...",
+ clone_data->clone_max, rsc->id);
return TRUE;
}
@@ -495,13 +518,13 @@ static const char *
configured_role_str(pcmk_resource_t * rsc)
{
const char *target_role = g_hash_table_lookup(rsc->meta,
- XML_RSC_ATTR_TARGET_ROLE);
+ PCMK_META_TARGET_ROLE);
if ((target_role == NULL) && rsc->children && rsc->children->data) {
pcmk_resource_t *instance = rsc->children->data; // Any instance will do
target_role = g_hash_table_lookup(instance->meta,
- XML_RSC_ATTR_TARGET_ROLE);
+ PCMK_META_TARGET_ROLE);
}
return target_role;
}
@@ -509,12 +532,17 @@ configured_role_str(pcmk_resource_t * rsc)
static enum rsc_role_e
configured_role(pcmk_resource_t *rsc)
{
+ enum rsc_role_e role = pcmk_role_unknown;
const char *target_role = configured_role_str(rsc);
- if (target_role) {
- return text2role(target_role);
+ if (target_role != NULL) {
+ role = pcmk_parse_role(target_role);
+ if (role == pcmk_role_unknown) {
+ pcmk__config_err("Invalid " PCMK_META_TARGET_ROLE
+ " for resource %s", rsc->id);
+ }
}
- return pcmk_role_unknown;
+ return role;
}
/*!
@@ -530,15 +558,17 @@ clone_print_xml(pcmk_resource_t *rsc, const char *pre_text, long options,
GList *gIter = rsc->children;
status_print("%s<clone ", pre_text);
- status_print(XML_ATTR_ID "=\"%s\" ", rsc->id);
+ status_print(PCMK_XA_ID "=\"%s\" ", rsc->id);
status_print("multi_state=\"%s\" ",
- pe__rsc_bool_str(rsc, pcmk_rsc_promotable));
- status_print("unique=\"%s\" ", pe__rsc_bool_str(rsc, pcmk_rsc_unique));
+ pcmk__flag_text(rsc->flags, pcmk_rsc_promotable));
+ status_print("unique=\"%s\" ",
+ pcmk__flag_text(rsc->flags, pcmk_rsc_unique));
status_print("managed=\"%s\" ",
- pe__rsc_bool_str(rsc, pcmk_rsc_managed));
- status_print("failed=\"%s\" ", pe__rsc_bool_str(rsc, pcmk_rsc_failed));
+ pcmk__flag_text(rsc->flags, pcmk_rsc_managed));
+ status_print("failed=\"%s\" ",
+ pcmk__flag_text(rsc->flags, pcmk_rsc_failed));
status_print("failure_ignored=\"%s\" ",
- pe__rsc_bool_str(rsc, pcmk_rsc_ignore_failure));
+ pcmk__flag_text(rsc->flags, pcmk_rsc_ignore_failure));
if (target_role) {
status_print("target_role=\"%s\" ", target_role);
}
@@ -618,7 +648,8 @@ clone_print(pcmk_resource_t *rsc, const char *pre_text, long options,
child_text = crm_strdup_printf("%s ", pre_text);
status_print("%sClone Set: %s [%s]%s%s%s",
- pre_text ? pre_text : "", rsc->id, ID(clone_data->xml_obj_child),
+ pcmk__s(pre_text, ""), rsc->id,
+ pcmk__xe_id(clone_data->xml_obj_child),
pcmk_is_set(rsc->flags, pcmk_rsc_promotable)? " (promotable)" : "",
pcmk_is_set(rsc->flags, pcmk_rsc_unique)? " (unique)" : "",
pcmk_is_set(rsc->flags, pcmk_rsc_managed)? "" : " (unmanaged)");
@@ -742,8 +773,8 @@ clone_print(pcmk_resource_t *rsc, const char *pre_text, long options,
if (role == pcmk_role_unpromoted) {
short_print((const char *) list_text->str, child_text,
- UNPROMOTED_INSTANCES " (target-role)", NULL,
- options, print_data);
+ UNPROMOTED_INSTANCES " (" PCMK_META_TARGET_ROLE ")",
+ NULL, options, print_data);
} else {
short_print((const char *) list_text->str, child_text,
UNPROMOTED_INSTANCES, NULL, options, print_data);
@@ -777,8 +808,9 @@ clone_print(pcmk_resource_t *rsc, const char *pre_text, long options,
}
if (list == NULL) {
- /* Clusters with symmetrical=false haven't calculated allowed_nodes yet
- * If we've not probed for them yet, the Stopped list will be empty
+ /* Clusters with PCMK_OPT_SYMMETRIC_CLUSTER=false haven't
+ * calculated allowed_nodes yet. If we've not probed for them
+ * yet, the Stopped list will be empty.
*/
list = g_hash_table_get_values(rsc->known_on);
}
@@ -787,7 +819,8 @@ clone_print(pcmk_resource_t *rsc, const char *pre_text, long options,
for (nIter = list; nIter != NULL; nIter = nIter->next) {
pcmk_node_t *node = (pcmk_node_t *) nIter->data;
- if (pe_find_node(rsc->running_on, node->details->uname) == NULL) {
+ if (pcmk__find_node_in_list(rsc->running_on,
+ node->details->uname) == NULL) {
pcmk__add_word(&stopped_list, 1024, node->details->uname);
}
}
@@ -824,16 +857,12 @@ pe__clone_xml(pcmk__output_t *out, va_list args)
GList *only_node = va_arg(args, GList *);
GList *only_rsc = va_arg(args, GList *);
-
- const char *desc = NULL;
GList *gIter = rsc->children;
GList *all = NULL;
int rc = pcmk_rc_no_output;
gboolean printed_header = FALSE;
gboolean print_everything = TRUE;
-
-
if (rsc->fns->is_filtered(rsc, only_rsc, TRUE)) {
return rc;
}
@@ -855,27 +884,37 @@ pe__clone_xml(pcmk__output_t *out, va_list args)
}
if (!printed_header) {
+ const char *multi_state = pcmk__flag_text(rsc->flags,
+ pcmk_rsc_promotable);
+ const char *unique = pcmk__flag_text(rsc->flags, pcmk_rsc_unique);
+ const char *maintenance = pcmk__flag_text(rsc->flags,
+ pcmk_rsc_maintenance);
+ const char *managed = pcmk__flag_text(rsc->flags, pcmk_rsc_managed);
+ const char *disabled = pcmk__btoa(pe__resource_is_disabled(rsc));
+ const char *failed = pcmk__flag_text(rsc->flags, pcmk_rsc_failed);
+ const char *ignored = pcmk__flag_text(rsc->flags,
+ pcmk_rsc_ignore_failure);
+ const char *target_role = configured_role_str(rsc);
+ const char *desc = pe__resource_description(rsc, show_opts);
+
printed_header = TRUE;
- desc = pe__resource_description(rsc, show_opts);
- rc = pe__name_and_nvpairs_xml(out, true, "clone", 10,
- "id", rsc->id,
- "multi_state",
- pe__rsc_bool_str(rsc, pcmk_rsc_promotable),
- "unique", pe__rsc_bool_str(rsc, pcmk_rsc_unique),
- "maintenance",
- pe__rsc_bool_str(rsc, pcmk_rsc_maintenance),
- "managed", pe__rsc_bool_str(rsc, pcmk_rsc_managed),
- "disabled", pcmk__btoa(pe__resource_is_disabled(rsc)),
- "failed", pe__rsc_bool_str(rsc, pcmk_rsc_failed),
- "failure_ignored",
- pe__rsc_bool_str(rsc, pcmk_rsc_ignore_failure),
- "target_role", configured_role_str(rsc),
- "description", desc);
+ rc = pe__name_and_nvpairs_xml(out, true, PCMK_XE_CLONE,
+ PCMK_XA_ID, rsc->id,
+ PCMK_XA_MULTI_STATE, multi_state,
+ PCMK_XA_UNIQUE, unique,
+ PCMK_XA_MAINTENANCE, maintenance,
+ PCMK_XA_MANAGED, managed,
+ PCMK_XA_DISABLED, disabled,
+ PCMK_XA_FAILED, failed,
+ PCMK_XA_FAILURE_IGNORED, ignored,
+ PCMK_XA_TARGET_ROLE, target_role,
+ PCMK_XA_DESCRIPTION, desc,
+ NULL);
CRM_ASSERT(rc == pcmk_rc_ok);
}
- out->message(out, crm_map_element_name(child_rsc->xml), show_opts,
+ out->message(out, (const char *) child_rsc->xml->name, show_opts,
child_rsc, only_node, all);
}
@@ -963,7 +1002,7 @@ pe__clone_default(pcmk__output_t *out, va_list args)
if (stopped == NULL) {
stopped = pcmk__strkey_table(free, free);
}
- g_hash_table_insert(stopped, strdup(child_rsc->id), strdup("Stopped"));
+ pcmk__insert_dup(stopped, child_rsc->id, "Stopped");
}
} else if (is_set_recursive(child_rsc, pcmk_rsc_removed, TRUE)
@@ -1011,7 +1050,7 @@ pe__clone_default(pcmk__output_t *out, va_list args)
/* Print every resource that's a child of this clone. */
all = g_list_prepend(all, (gpointer) "*");
- out->message(out, crm_map_element_name(child_rsc->xml), show_opts,
+ out->message(out, (const char *) child_rsc->xml->name, show_opts,
child_rsc, only_node, all);
g_list_free(all);
}
@@ -1068,7 +1107,8 @@ pe__clone_default(pcmk__output_t *out, va_list args)
if (role == pcmk_role_unpromoted) {
out->list_item(out, NULL,
- UNPROMOTED_INSTANCES " (target-role): [ %s ]",
+ UNPROMOTED_INSTANCES
+ " (" PCMK_META_TARGET_ROLE "): [ %s ]",
(const char *) list_text->str);
} else {
out->list_item(out, NULL, UNPROMOTED_INSTANCES ": [ %s ]",
@@ -1099,8 +1139,9 @@ pe__clone_default(pcmk__output_t *out, va_list args)
}
if (list == NULL) {
- /* Clusters with symmetrical=false haven't calculated allowed_nodes yet
- * If we've not probed for them yet, the Stopped list will be empty
+ /* Clusters with PCMK_OPT_SYMMETRIC_CLUSTER=false haven't
+ * calculated allowed_nodes yet. If we've not probed for them
+ * yet, the Stopped list will be empty.
*/
list = g_hash_table_get_values(rsc->known_on);
}
@@ -1109,9 +1150,10 @@ pe__clone_default(pcmk__output_t *out, va_list args)
for (nIter = list; nIter != NULL; nIter = nIter->next) {
pcmk_node_t *node = (pcmk_node_t *) nIter->data;
- if (pe_find_node(rsc->running_on, node->details->uname) == NULL &&
- pcmk__str_in_list(node->details->uname, only_node,
- pcmk__str_star_matches|pcmk__str_casei)) {
+ if ((pcmk__find_node_in_list(rsc->running_on,
+ node->details->uname) == NULL)
+ && pcmk__str_in_list(node->details->uname, only_node,
+ pcmk__str_star_matches|pcmk__str_casei)) {
xmlNode *probe_op = pe__failed_probe_for_rsc(rsc, node->details->uname);
const char *state = "Stopped";
@@ -1125,12 +1167,13 @@ pe__clone_default(pcmk__output_t *out, va_list args)
if (probe_op != NULL) {
int rc;
- pcmk__scan_min_int(crm_element_value(probe_op, XML_LRM_ATTR_RC), &rc, 0);
+ pcmk__scan_min_int(crm_element_value(probe_op,
+ PCMK__XA_RC_CODE),
+ &rc, 0);
g_hash_table_insert(stopped, strdup(node->details->uname),
crm_strdup_printf("Stopped (%s)", services_ocf_exitcode_str(rc)));
} else {
- g_hash_table_insert(stopped, strdup(node->details->uname),
- strdup(state));
+ pcmk__insert_dup(stopped, node->details->uname, state);
}
}
}
@@ -1183,13 +1226,13 @@ clone_free(pcmk_resource_t * rsc)
get_clone_variant_data(clone_data, rsc);
- pe_rsc_trace(rsc, "Freeing %s", rsc->id);
+ pcmk__rsc_trace(rsc, "Freeing %s", rsc->id);
for (GList *gIter = rsc->children; gIter != NULL; gIter = gIter->next) {
pcmk_resource_t *child_rsc = (pcmk_resource_t *) gIter->data;
CRM_ASSERT(child_rsc);
- pe_rsc_trace(child_rsc, "Freeing child %s", child_rsc->id);
+ pcmk__rsc_trace(child_rsc, "Freeing child %s", child_rsc->id);
free_xml(child_rsc->xml);
child_rsc->xml = NULL;
/* There could be a saved unexpanded xml */
@@ -1225,7 +1268,7 @@ clone_resource_state(const pcmk_resource_t * rsc, gboolean current)
}
}
- pe_rsc_trace(rsc, "%s role: %s", rsc->id, role2text(clone_role));
+ pcmk__rsc_trace(rsc, "%s role: %s", rsc->id, pcmk_role_text(clone_role));
return clone_role;
}
@@ -1240,7 +1283,7 @@ bool
pe__is_universal_clone(const pcmk_resource_t *rsc,
const pcmk_scheduler_t *scheduler)
{
- if (pe_rsc_is_clone(rsc)) {
+ if (pcmk__is_clone(rsc)) {
clone_variant_data_t *clone_data = rsc->variant_opaque;
if (clone_data->clone_max == g_list_length(scheduler->nodes)) {
@@ -1261,7 +1304,8 @@ pe__clone_is_filtered(const pcmk_resource_t *rsc, GList *only_rsc,
passes = TRUE;
} else {
get_clone_variant_data(clone_data, rsc);
- passes = pcmk__str_in_list(ID(clone_data->xml_obj_child), only_rsc, pcmk__str_star_matches);
+ passes = pcmk__str_in_list(pcmk__xe_id(clone_data->xml_obj_child),
+ only_rsc, pcmk__str_star_matches);
if (!passes) {
for (const GList *iter = rsc->children;
@@ -1285,7 +1329,7 @@ pe__clone_child_id(const pcmk_resource_t *rsc)
{
clone_variant_data_t *clone_data = NULL;
get_clone_variant_data(clone_data, rsc);
- return ID(clone_data->xml_obj_child);
+ return pcmk__xe_id(clone_data->xml_obj_child);
}
/*!
@@ -1375,7 +1419,7 @@ pe__create_promotable_pseudo_ops(pcmk_resource_t *clone, bool any_promoting,
// Create a "promoted" action for when all promotions are done
action_complete = pe__new_rsc_pseudo_action(clone, PCMK_ACTION_PROMOTED,
!any_promoting, true);
- action_complete->priority = INFINITY;
+ action_complete->priority = PCMK_SCORE_INFINITY;
// Create notification pseudo-actions for promotion
if (clone_data->promote_notify == NULL) {
@@ -1392,7 +1436,7 @@ pe__create_promotable_pseudo_ops(pcmk_resource_t *clone, bool any_promoting,
// Create a "demoted" action for when all demotions are done
action_complete = pe__new_rsc_pseudo_action(clone, PCMK_ACTION_DEMOTED,
!any_demoting, true);
- action_complete->priority = INFINITY;
+ action_complete->priority = PCMK_SCORE_INFINITY;
// Create notification pseudo-actions for demotion
if (clone_data->demote_notify == NULL) {