59#define XPATH_DEPRECATED_RULES \
60 "//" PCMK_XE_OP_DEFAULTS "//" PCMK_XE_EXPRESSION \
61 "|//" PCMK_XE_OP "//" PCMK_XE_EXPRESSION
76 if (deprecated != NULL) {
78 "Support for rules with node attribute expressions in "
80 "and will be dropped in a future release");
98 const char *new_version = NULL;
99 xmlNode *section = NULL;
108 pcmk__config_err(
"Can't process CIB with feature set '%s' greater than our own '%s'",
150 "due to lack of quorum");
181 crm_trace(
"Cluster resource count: %d (%d disabled, %d blocked)",
202pe_free_resources(GList *resources)
205 GList *iterator = resources;
207 while (iterator != NULL) {
209 iterator = iterator->next;
212 if (resources != NULL) {
213 g_list_free(resources);
218pe_free_actions(GList *actions)
220 GList *iterator = actions;
222 while (iterator != NULL) {
224 iterator = iterator->next;
226 if (actions != NULL) {
227 g_list_free(actions);
232pe_free_nodes(GList *nodes)
234 for (GList *iterator = nodes; iterator != NULL; iterator = iterator->next) {
241 if (node->details == NULL) {
249 crm_trace(
"Freeing node %s", (pcmk__is_pacemaker_remote_node(node)?
250 "(guest or remote)" : pcmk__node_name(node)));
252 if (node->details->attrs != NULL) {
253 g_hash_table_destroy(node->details->attrs);
255 if (node->details->utilization != NULL) {
256 g_hash_table_destroy(node->details->utilization);
258 if (node->details->digest_cache != NULL) {
259 g_hash_table_destroy(node->details->digest_cache);
261 g_list_free(node->details->running_rsc);
262 g_list_free(node->details->allocated_rsc);
272pe__free_ordering(GList *constraints)
274 GList *iterator = constraints;
276 while (iterator != NULL) {
279 iterator = iterator->next;
285 if (constraints != NULL) {
286 g_list_free(constraints);
291pe__free_location(GList *constraints)
293 GList *iterator = constraints;
295 while (iterator != NULL) {
298 iterator = iterator->next;
300 g_list_free_full(cons->
nodes, free);
304 if (constraints != NULL) {
305 g_list_free(constraints);
383 crm_trace(
"Deleting %d ordering constraints",
388 crm_trace(
"Deleting %d location constraints",
393 crm_trace(
"Deleting %d colocation constraints",
398 crm_trace(
"Deleting %d ticket constraints",
440 for (rIter = rsc_list;
id && rIter; rIter = rIter->next) {
472 if ((match == NULL) && (
uname != NULL)) {
489 for (
const GList *iter = nodes; iter != NULL; iter = iter->next) {
int pcmk__check_feature_set(const char *cib_version)
bool pcmk__xe_attr_is_true(const xmlNode *node, const char *name)
#define pcmk_is_set(g, f)
Convenience alias for pcmk_all_flags_set(), to check single flag.
#define PCMK__CONCURRENT_FENCING_DEFAULT
void crm_time_free(crm_time_t *dt)
crm_time_t * crm_time_new(const char *string)
#define CRM_CHECK(expr, failure_action)
#define crm_trace(fmt, args...)
#define pcmk__config_err(fmt...)
#define pcmk__warn_once(wo_flag, fmt...)
pcmk_scheduler_t * scheduler
pcmk_node_t * pcmk__find_node_in_list(const GList *nodes, const char *node_name)
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute.
char * crm_element_value_copy(const xmlNode *data, const char *name)
Retrieve a copy of the value of an XML attribute.
G_GNUC_INTERNAL gboolean unpack_resources(const xmlNode *xml_resources, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL gboolean unpack_tags(xmlNode *xml_tags, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__unpack_fencing_topology(const xmlNode *xml_fencing_topology, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL gboolean unpack_remote_nodes(xmlNode *xml_resources, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL gboolean unpack_status(xmlNode *status, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL gboolean unpack_nodes(xmlNode *xml_nodes, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL gboolean unpack_config(xmlNode *config, pcmk_scheduler_t *scheduler)
void pe__free_param_checks(pcmk_scheduler_t *scheduler)
void pe_free_action(pcmk_action_t *action)
pe_find
Search options for resources (exact resource ID always matches)
@ pcmk_rsc_match_history
Also match clone instance ID from resource history.
@ pcmk_sched_stop_removed_resources
@ pcmk_sched_symmetric_cluster
@ pcmk_sched_location_only
@ pcmk_sched_concurrent_fencing
@ pcmk_sched_cancel_removed_actions
#define pcmk__clear_scheduler_flags(scheduler, flags_to_clear)
#define pcmk__sched_warn(fmt...)
#define pcmk__set_scheduler_flags(scheduler, flags_to_set)
pcmk_node_t * pe_find_node_id(const GList *nodes, const char *id)
Find a node by ID in a list of nodes.
pcmk_node_t * pe_find_node(const GList *nodes, const char *node_name)
Find a node by name in a list of nodes.
void pe_free_working_set(pcmk_scheduler_t *scheduler)
Free scheduler data.
void pe_reset_working_set(pcmk_scheduler_t *scheduler)
Reset scheduler data to default state without freeing it.
pcmk_node_t * pe_find_node_any(const GList *nodes, const char *id, const char *uname)
Find a node by name or ID in a list of nodes.
pcmk_resource_t * pe_find_resource(GList *rsc_list, const char *id)
pcmk_scheduler_t * pe_new_working_set(void)
Create a new object to hold scheduler data.
gboolean cluster_status(pcmk_scheduler_t *scheduler)
void cleanup_calculations(pcmk_scheduler_t *scheduler)
Reset scheduler data to defaults without freeing it or constraints.
void set_working_set_defaults(pcmk_scheduler_t *scheduler)
#define XPATH_DEPRECATED_RULES
pcmk_resource_t * pe_find_resource_with_flags(GList *rsc_list, const char *id, enum pe_find flags)
Deprecated Pacemaker scheduler utilities.
Location constraint object.
struct pe_node_shared_s * details
GList * colocation_constraints
GList * ticket_constraints
GHashTable * template_rsc_sets
enum pe_quorum_policy no_quorum_policy
GList * placement_constraints
GList * ordering_constraints
void(* free)(pcmk_resource_t *rsc)
pcmk_resource_t *(* find_rsc)(pcmk_resource_t *rsc, const char *search, const pcmk_node_t *node, int flags)
Wrappers for and extensions to libxml2.
xmlNode * get_xpath_object(const char *xpath, xmlNode *xml_obj, int error_level)
void free_xml(xmlNode *child)
xmlNode * pcmk__xe_create(xmlNode *parent, const char *name)
#define PCMK_XE_OP_DEFAULTS
#define PCMK_XE_CRM_CONFIG
#define PCMK_XE_RESOURCES
#define PCMK_XA_HAVE_QUORUM
#define PCMK_XE_FENCING_TOPOLOGY
#define PCMK_XA_CRM_FEATURE_SET
#define PCMK_XE_RSC_DEFAULTS