1
2
3
4
5
6
7
8
9
10 #ifndef PENGINE_AUTILS__H
11 # define PENGINE_AUTILS__H
12
13 #include <stdbool.h>
14 #include <glib.h>
15 #include <crm/lrmd.h>
16 #include <crm/cib.h>
17 #include <crm/pengine/pe_types.h>
18 #include <crm/pengine/internal.h>
19 #include <pcmki/pcmki_scheduler.h>
20 #include <pcmki/pcmki_transition.h>
21 #include <pacemaker.h>
22
23
24 pcmk__colocation_t *invert_constraint(pcmk__colocation_t *constraint);
25
26 pe__location_t *copy_constraint(pe__location_t *constraint);
27
28 GHashTable *pcmk__copy_node_table(GHashTable *nodes);
29 GList *pcmk__copy_node_list(const GList *list, bool reset);
30 GList *sort_nodes_by_weight(GList *nodes, pe_node_t *active_node,
31 pe_working_set_t *data_set);
32
33 extern gboolean can_run_resources(const pe_node_t * node);
34 extern gboolean native_assign_node(pe_resource_t *rsc, pe_node_t *chosen,
35 gboolean force);
36 void native_deallocate(pe_resource_t * rsc);
37
38 extern void log_action(unsigned int log_level, const char *pre_text,
39 pe_action_t * action, gboolean details);
40
41 gboolean can_run_any(GHashTable * nodes);
42 pe_resource_t *find_compatible_child(pe_resource_t *local_child,
43 pe_resource_t *rsc, enum rsc_role_e filter,
44 gboolean current,
45 pe_working_set_t *data_set);
46 pe_resource_t *find_compatible_child_by_node(pe_resource_t * local_child, pe_node_t * local_node, pe_resource_t * rsc,
47 enum rsc_role_e filter, gboolean current);
48 gboolean is_child_compatible(pe_resource_t *child_rsc, pe_node_t * local_node, enum rsc_role_e filter, gboolean current);
49 bool assign_node(pe_resource_t * rsc, pe_node_t * node, gboolean force);
50 enum pe_action_flags summary_action_flags(pe_action_t * action, GList *children, pe_node_t * node);
51 enum action_tasks clone_child_action(pe_action_t * action);
52 int copies_per_node(pe_resource_t * rsc);
53
54 extern int compare_capacity(const pe_node_t * node1, const pe_node_t * node2);
55 extern void calculate_utilization(GHashTable * current_utilization,
56 GHashTable * utilization, gboolean plus);
57
58 extern void process_utilization(pe_resource_t * rsc, pe_node_t ** prefer, pe_working_set_t * data_set);
59 pe_action_t *create_pseudo_resource_op(pe_resource_t * rsc, const char *task, bool optional, bool runnable, pe_working_set_t *data_set);
60 pe_action_t *pe_cancel_op(pe_resource_t *rsc, const char *name,
61 guint interval_ms, pe_node_t *node,
62 pe_working_set_t *data_set);
63 pe_action_t *sched_shutdown_op(pe_node_t *node, pe_working_set_t *data_set);
64
65 xmlNode *pcmk__create_history_xml(xmlNode *parent, lrmd_event_data_t *event,
66 const char *caller_version, int target_rc,
67 const char *node, const char *origin,
68 int level);
69
70 # define LOAD_STOPPED "load_stopped"
71
72 void modify_configuration(pe_working_set_t *data_set, cib_t *cib,
73 pcmk_injections_t *injections);
74
75 enum transition_status run_simulation(pe_working_set_t * data_set, cib_t *cib, GList *op_fail_list);
76
77 pcmk__output_t *pcmk__new_logger(void);
78
79 bool pcmk__threshold_reached(pe_resource_t *rsc, pe_node_t *node,
80 pe_working_set_t *data_set,
81 pe_resource_t **failed);
82
83 #endif