pacemaker 2.1.4-dc6eb4362e
Scalable High-Availability cluster resource manager
libpacemaker_private.h
Go to the documentation of this file.
1/*
2 * Copyright 2021-2022 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#ifndef PCMK__LIBPACEMAKER_PRIVATE__H
11# define PCMK__LIBPACEMAKER_PRIVATE__H
12
13/* This header is for the sole use of libpacemaker, so that functions can be
14 * declared with G_GNUC_INTERNAL for efficiency.
15 */
16
17#include <crm/pengine/pe_types.h> // pe_action_t, pe_node_t, pe_working_set_t
18
19// Actions (pcmk_sched_actions.c)
20
21G_GNUC_INTERNAL
24
25G_GNUC_INTERNAL
26void pcmk__log_action(const char *pre_text, pe_action_t *action, bool details);
27
28G_GNUC_INTERNAL
30 bool optional, bool runnable);
31
32G_GNUC_INTERNAL
34 guint interval_ms, pe_node_t *node);
35
36G_GNUC_INTERNAL
39
40G_GNUC_INTERNAL
42
43G_GNUC_INTERNAL
45
46G_GNUC_INTERNAL
48
49G_GNUC_INTERNAL
51 xmlNode *xml_op);
52
53G_GNUC_INTERNAL
55
56// Producing transition graphs (pcmk_graph_producer.c)
57
58G_GNUC_INTERNAL
61
62G_GNUC_INTERNAL
64
65G_GNUC_INTERNAL
67
68
69// Fencing (pcmk_sched_fencing.c)
70
71G_GNUC_INTERNAL
73
74G_GNUC_INTERNAL
76 pe_action_t *action, enum pe_ordering order,
78
79G_GNUC_INTERNAL
81
82G_GNUC_INTERNAL
84
85G_GNUC_INTERNAL
88
89
90// Injected scheduler inputs (pcmk_sched_injections.c)
91
93 pcmk_injections_t *injections);
94
95
96// Constraints of any type (pcmk_sched_constraints.c)
97
98G_GNUC_INTERNAL
99pe_resource_t *pcmk__find_constraint_resource(GList *rsc_list, const char *id);
100
101G_GNUC_INTERNAL
102xmlNode *pcmk__expand_tags_in_sets(xmlNode *xml_obj,
104
105G_GNUC_INTERNAL
107 pe_resource_t **rsc, pe_tag_t **tag);
108
109G_GNUC_INTERNAL
110bool pcmk__tag_to_set(xmlNode *xml_obj, xmlNode **rsc_set, const char *attr,
111 bool convert_rsc, pe_working_set_t *data_set);
112
113G_GNUC_INTERNAL
115
116
117// Location constraints
118
119G_GNUC_INTERNAL
120void pcmk__unpack_location(xmlNode *xml_obj, pe_working_set_t *data_set);
121
122G_GNUC_INTERNAL
124 int node_weight, const char *discover_mode,
125 pe_node_t *foo_node,
127
128G_GNUC_INTERNAL
130
131G_GNUC_INTERNAL
133
134
135// Colocation constraints
136
141};
142
143G_GNUC_INTERNAL
145 pe_resource_t *primary,
146 pcmk__colocation_t *constraint,
147 bool preview);
148
149G_GNUC_INTERNAL
151 pe_resource_t *primary,
152 pcmk__colocation_t *constraint);
153
154G_GNUC_INTERNAL
156 pe_resource_t *primary,
157 pcmk__colocation_t *constraint);
158
159G_GNUC_INTERNAL
160void pcmk__unpack_colocation(xmlNode *xml_obj, pe_working_set_t *data_set);
161
162G_GNUC_INTERNAL
163void pcmk__new_colocation(const char *id, const char *node_attr, int score,
164 pe_resource_t *dependent, pe_resource_t *primary,
165 const char *dependent_role, const char *primary_role,
166 bool influence, pe_working_set_t *data_set);
167
168G_GNUC_INTERNAL
171
172
173// Ordering constraints (pcmk_sched_ordering.c)
174
175G_GNUC_INTERNAL
176void pcmk__new_ordering(pe_resource_t *lh_rsc, char *lh_task,
177 pe_action_t *lh_action, pe_resource_t *rh_rsc,
178 char *rh_task, pe_action_t *rh_action,
180
181G_GNUC_INTERNAL
182void pcmk__unpack_ordering(xmlNode *xml_obj, pe_working_set_t *data_set);
183
184G_GNUC_INTERNAL
186
187G_GNUC_INTERNAL
189 pe_action_t *shutdown_op,
191
192G_GNUC_INTERNAL
194
195G_GNUC_INTERNAL
196void pcmk__order_after_each(pe_action_t *after, GList *list);
197
198
210#define pcmk__order_resource_actions(lh_rsc, lh_task, rh_rsc, rh_task, \
211 flags, data_set) \
212 pcmk__new_ordering((lh_rsc), pcmk__op_key((lh_rsc)->id, (lh_task), 0), \
213 NULL, \
214 (rh_rsc), pcmk__op_key((rh_rsc)->id, (rh_task), 0), \
215 NULL, (flags), (data_set))
216
217#define pcmk__order_starts(rsc1, rsc2, type, data_set) \
218 pcmk__order_resource_actions((rsc1), CRMD_ACTION_START, \
219 (rsc2), CRMD_ACTION_START, (type), (data_set))
220
221#define pcmk__order_stops(rsc1, rsc2, type, data_set) \
222 pcmk__order_resource_actions((rsc1), CRMD_ACTION_STOP, \
223 (rsc2), CRMD_ACTION_STOP, (type), (data_set))
224
225G_GNUC_INTERNAL
226void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pe_working_set_t *data_set);
227
228G_GNUC_INTERNAL
230
231G_GNUC_INTERNAL
233
234G_GNUC_INTERNAL
236
237G_GNUC_INTERNAL
239
240G_GNUC_INTERNAL
241void pcmk__substitute_remote_addr(pe_resource_t *rsc, GHashTable *params,
243
244G_GNUC_INTERNAL
245void pcmk__add_bundle_meta_to_xml(xmlNode *args_xml, pe_action_t *action);
246
247
248// Groups (pcmk_sched_group.c)
249
250G_GNUC_INTERNAL
252 pe_resource_t *orig_rsc,
253 GList *colocated_rscs);
254
255
256// Bundles (pcmk_sched_bundle.c)
257
258G_GNUC_INTERNAL
260
261
262// Injections (pcmk_injections.c)
263
264G_GNUC_INTERNAL
265xmlNode *pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid);
266
267G_GNUC_INTERNAL
268xmlNode *pcmk__inject_node_state_change(cib_t *cib_conn, const char *node,
269 bool up);
270
271G_GNUC_INTERNAL
272xmlNode *pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node,
273 const char *resource,
274 const char *lrm_name,
275 const char *rclass,
276 const char *rtype,
277 const char *rprovider);
278
279G_GNUC_INTERNAL
280void pcmk__inject_failcount(pcmk__output_t *out, xmlNode *cib_node,
281 const char *resource, const char *task,
282 guint interval_ms, int rc);
283
284G_GNUC_INTERNAL
285xmlNode *pcmk__inject_action_result(xmlNode *cib_resource,
286 lrmd_event_data_t *op, int target_rc);
287
288
289// Nodes (pcmk_sched_nodes.c)
290
291G_GNUC_INTERNAL
292bool pcmk__node_available(const pe_node_t *node);
293
294G_GNUC_INTERNAL
295bool pcmk__any_node_available(GHashTable *nodes);
296
297G_GNUC_INTERNAL
298GHashTable *pcmk__copy_node_table(GHashTable *nodes);
299
300G_GNUC_INTERNAL
301GList *pcmk__sort_nodes(GList *nodes, pe_node_t *active_node,
303
304G_GNUC_INTERNAL
306
307
308// Clone notifictions (pcmk_sched_notif.c)
309
310G_GNUC_INTERNAL
312
313G_GNUC_INTERNAL
315 const char *task,
317 pe_action_t *complete);
318
319G_GNUC_INTERNAL
321
322G_GNUC_INTERNAL
324 pe_action_t *stonith_op);
325
326
327// Functions applying to more than one variant (pcmk_sched_resource.c)
328
329G_GNUC_INTERNAL
331
332G_GNUC_INTERNAL
334 const xmlNode *rsc_entry, bool active_on_node);
335
336G_GNUC_INTERNAL
337GList *pcmk__rscs_matching_id(const char *id, pe_working_set_t *data_set);
338
339G_GNUC_INTERNAL
341 GList *colocated_rscs);
342
343G_GNUC_INTERNAL
345
346G_GNUC_INTERNAL
347bool pcmk__assign_primitive(pe_resource_t *rsc, pe_node_t *chosen, bool force);
348
349G_GNUC_INTERNAL
350bool pcmk__assign_resource(pe_resource_t *rsc, pe_node_t *node, bool force);
351
352G_GNUC_INTERNAL
354
355G_GNUC_INTERNAL
357 pe_resource_t **failed);
358
359G_GNUC_INTERNAL
361
362
363// Functions related to probes (pcmk_sched_probes.c)
364
365G_GNUC_INTERNAL
367
368G_GNUC_INTERNAL
370
371
372// Functions related to node utilization (pcmk_sched_utilization.c)
373
374G_GNUC_INTERNAL
376 const pe_node_t *node2);
377
378G_GNUC_INTERNAL
379void pcmk__consume_node_capacity(GHashTable *current_utilization,
380 pe_resource_t *rsc);
381
382G_GNUC_INTERNAL
383void pcmk__release_node_capacity(GHashTable *current_utilization,
384 pe_resource_t *rsc);
385
386G_GNUC_INTERNAL
389
390G_GNUC_INTERNAL
392 GList *allowed_nodes);
393
394G_GNUC_INTERNAL
396
397#endif // PCMK__LIBPACEMAKER_PRIVATE__H
const char * name
Definition: cib.c:24
enum crm_ais_msg_types type
Definition: cpg.c:3
G_GNUC_INTERNAL void pcmk__apply_coloc_to_weights(pe_resource_t *dependent, pe_resource_t *primary, pcmk__colocation_t *constraint)
G_GNUC_INTERNAL GList * pcmk__group_colocated_resources(pe_resource_t *rsc, pe_resource_t *orig_rsc, GList *colocated_rscs)
G_GNUC_INTERNAL xmlNode * pcmk__expand_tags_in_sets(xmlNode *xml_obj, pe_working_set_t *data_set)
G_GNUC_INTERNAL enum pcmk__coloc_affects pcmk__colocation_affects(pe_resource_t *dependent, pe_resource_t *primary, pcmk__colocation_t *constraint, bool preview)
G_GNUC_INTERNAL void pcmk__handle_rsc_config_changes(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__new_colocation(const char *id, const char *node_attr, int score, pe_resource_t *dependent, pe_resource_t *primary, const char *dependent_role, const char *primary_role, bool influence, pe_working_set_t *data_set)
G_GNUC_INTERNAL pe_node_t * pcmk__connection_host_for_action(pe_action_t *action)
G_GNUC_INTERNAL bool pcmk__check_action_config(pe_resource_t *rsc, pe_node_t *node, xmlNode *xml_op)
G_GNUC_INTERNAL void pcmk__log_action(const char *pre_text, pe_action_t *action, bool details)
G_GNUC_INTERNAL void pcmk__apply_location(pe__location_t *constraint, pe_resource_t *rsc)
G_GNUC_INTERNAL notify_data_t * pcmk__clone_notif_pseudo_ops(pe_resource_t *rsc, const char *task, pe_action_t *action, pe_action_t *complete)
G_GNUC_INTERNAL void pcmk__output_resource_actions(pe_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__unassign_resource(pe_resource_t *rsc)
G_GNUC_INTERNAL GList * pcmk__sort_nodes(GList *nodes, pe_node_t *active_node, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__set_allocation_methods(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__block_colocated_starts(pe_action_t *action, pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__any_node_available(GHashTable *nodes)
G_GNUC_INTERNAL void pcmk__unpack_ordering(xmlNode *xml_obj, pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__rsc_corresponds_to_guest(pe_resource_t *rsc, pe_node_t *node)
G_GNUC_INTERNAL void pcmk__create_internal_constraints(pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__assign_primitive(pe_resource_t *rsc, pe_node_t *chosen, bool force)
G_GNUC_INTERNAL void pcmk__free_notification_data(notify_data_t *n_data)
G_GNUC_INTERNAL void pcmk__disable_invalid_orderings(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__apply_node_health(pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__valid_resource_or_tag(pe_working_set_t *data_set, const char *id, pe_resource_t **rsc, pe_tag_t **tag)
G_GNUC_INTERNAL pe__location_t * pcmk__new_location(const char *id, pe_resource_t *rsc, int node_weight, const char *discover_mode, pe_node_t *foo_node, pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__action_locks_rsc_to_node(const pe_action_t *action)
G_GNUC_INTERNAL void pcmk__output_actions(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__create_utilization_constraints(pe_resource_t *rsc, GList *allowed_nodes)
G_GNUC_INTERNAL pe_action_t * pcmk__new_shutdown_action(pe_node_t *node, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__update_action_for_orderings(pe_action_t *action, pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__graph_has_loop(pe_action_t *init_action, pe_action_t *action, pe_action_wrapper_t *input)
G_GNUC_INTERNAL void pcmk__apply_orderings(pe_working_set_t *data_set)
pcmk__coloc_affects
@ pcmk__coloc_affects_nothing
@ pcmk__coloc_affects_location
@ pcmk__coloc_affects_role
G_GNUC_INTERNAL void pcmk__substitute_remote_addr(pe_resource_t *rsc, GHashTable *params, pe_working_set_t *data_set)
G_GNUC_INTERNAL pe_resource_t * pcmk__find_constraint_resource(GList *rsc_list, const char *id)
G_GNUC_INTERNAL void pcmk__unpack_colocation(xmlNode *xml_obj, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__output_bundle_actions(pe_resource_t *rsc)
G_GNUC_INTERNAL GList * pcmk__colocated_resources(pe_resource_t *rsc, pe_resource_t *orig_rsc, GList *colocated_rscs)
G_GNUC_INTERNAL void pcmk__new_ordering(pe_resource_t *lh_rsc, char *lh_task, pe_action_t *lh_action, pe_resource_t *rh_rsc, char *rh_task, pe_action_t *rh_action, enum pe_ordering type, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__create_graph(pe_working_set_t *data_set)
G_GNUC_INTERNAL int pcmk__compare_node_capacities(const pe_node_t *node1, const pe_node_t *node2)
G_GNUC_INTERNAL void pcmk__create_notifications(pe_resource_t *rsc, notify_data_t *n_data)
G_GNUC_INTERNAL bool pcmk__tag_to_set(xmlNode *xml_obj, xmlNode **rsc_set, const char *attr, bool convert_rsc, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__ban_insufficient_capacity(pe_resource_t *rsc, pe_node_t **prefer, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__order_probes(pe_working_set_t *data_set)
G_GNUC_INTERNAL xmlNode * pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid)
void pcmk__inject_scheduler_input(pe_working_set_t *data_set, cib_t *cib, pcmk_injections_t *injections)
G_GNUC_INTERNAL void pcmk__order_vs_unfence(pe_resource_t *rsc, pe_node_t *node, pe_action_t *action, enum pe_ordering order, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__order_remote_connection_actions(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__release_node_capacity(GHashTable *current_utilization, pe_resource_t *rsc)
G_GNUC_INTERNAL bool pcmk__assign_resource(pe_resource_t *rsc, pe_node_t *node, bool force)
G_GNUC_INTERNAL void pcmk__add_action_to_graph(pe_action_t *action, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__inject_failcount(pcmk__output_t *out, xmlNode *cib_node, const char *resource, const char *task, guint interval_ms, int rc)
G_GNUC_INTERNAL void pcmk__add_bundle_meta_to_xml(xmlNode *args_xml, pe_action_t *action)
Add special bundle meta-attributes to XML.
G_GNUC_INTERNAL bool pcmk__is_unfence_device(const pe_resource_t *rsc, const pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__order_vs_fence(pe_action_t *stonith_op, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pe_working_set_t *data_set)
G_GNUC_INTERNAL xmlNode * pcmk__inject_node_state_change(cib_t *cib_conn, const char *node, bool up)
G_GNUC_INTERNAL pe_action_t * pcmk__new_rsc_pseudo_action(pe_resource_t *rsc, const char *task, bool optional, bool runnable)
G_GNUC_INTERNAL void pcmk__deduplicate_action_inputs(pe_action_t *action)
G_GNUC_INTERNAL bool pcmk__is_failed_remote_node(pe_node_t *node)
G_GNUC_INTERNAL bool pcmk__node_available(const pe_node_t *node)
G_GNUC_INTERNAL void pcmk__sort_resources(pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__apply_locations(pe_working_set_t *data_set)
G_GNUC_INTERNAL bool pcmk__threshold_reached(pe_resource_t *rsc, pe_node_t *node, pe_resource_t **failed)
G_GNUC_INTERNAL bool pcmk__node_unfenced(pe_node_t *node)
G_GNUC_INTERNAL void pcmk__order_stops_before_shutdown(pe_node_t *node, pe_action_t *shutdown_op, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__apply_coloc_to_priority(pe_resource_t *dependent, pe_resource_t *primary, pcmk__colocation_t *constraint)
G_GNUC_INTERNAL GList * pcmk__rscs_matching_id(const char *id, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__unpack_location(xmlNode *xml_obj, pe_working_set_t *data_set)
G_GNUC_INTERNAL xmlNode * pcmk__inject_action_result(xmlNode *cib_resource, lrmd_event_data_t *op, int target_rc)
G_GNUC_INTERNAL pe_action_t * pcmk__new_cancel_action(pe_resource_t *rsc, const char *name, guint interval_ms, pe_node_t *node)
G_GNUC_INTERNAL void pcmk__show_node_capacities(const char *desc, pe_working_set_t *data_set)
G_GNUC_INTERNAL void pcmk__order_notifs_after_fencing(pe_action_t *action, pe_resource_t *rsc, pe_action_t *stonith_op)
G_GNUC_INTERNAL void pcmk__fence_guest(pe_node_t *node, pe_working_set_t *data_set)
G_GNUC_INTERNAL xmlNode * pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node, const char *resource, const char *lrm_name, const char *rclass, const char *rtype, const char *rprovider)
G_GNUC_INTERNAL void pcmk__order_after_each(pe_action_t *after, GList *list)
G_GNUC_INTERNAL void pcmk__consume_node_capacity(GHashTable *current_utilization, pe_resource_t *rsc)
G_GNUC_INTERNAL GHashTable * pcmk__copy_node_table(GHashTable *nodes)
G_GNUC_INTERNAL bool pcmk__rsc_agent_changed(pe_resource_t *rsc, pe_node_t *node, const xmlNode *rsc_entry, bool active_on_node)
G_GNUC_INTERNAL void pcmk__schedule_probes(pe_working_set_t *data_set)
pe_working_set_t * data_set
xmlNode * input
const char * action
Definition: pcmk_fence.c:29
Data types for cluster status.
pe_ordering
Definition: pe_types.h:497
This structure contains everything that makes up a single output formatter.
Synthetic cluster events that can be injected into the cluster for running simulations.
Definition: pacemaker.h:50