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
21
22 pcmk__colocation_t *invert_constraint(pcmk__colocation_t *constraint);
23
24 pe__location_t *copy_constraint(pe__location_t *constraint);
25
26 pe__location_t *rsc2node_new(const char *id, pe_resource_t *rsc, int weight,
27 const char *discovery_mode, pe_node_t *node,
28 pe_working_set_t *data_set);
29
30 void pcmk__new_colocation(const char *id, const char *node_attr, int score,
31 pe_resource_t *rsc_lh, pe_resource_t *rsc_rh,
32 const char *state_lh, const char *state_rh,
33 bool influence, pe_working_set_t *data_set);
34
35 extern gboolean rsc_ticket_new(const char *id, pe_resource_t * rsc_lh, pe_ticket_t * ticket,
36 const char *state_lh, const char *loss_policy,
37 pe_working_set_t * data_set);
38
39 GHashTable *pcmk__copy_node_table(GHashTable *nodes);
40 GList *pcmk__copy_node_list(const GList *list, bool reset);
41 GList *sort_nodes_by_weight(GList *nodes, pe_node_t *active_node,
42 pe_working_set_t *data_set);
43
44 extern gboolean can_run_resources(const pe_node_t * node);
45 extern gboolean native_assign_node(pe_resource_t *rsc, pe_node_t *chosen,
46 gboolean force);
47 void native_deallocate(pe_resource_t * rsc);
48
49 extern void log_action(unsigned int log_level, const char *pre_text,
50 pe_action_t * action, gboolean details);
51
52 gboolean can_run_any(GHashTable * nodes);
53 pe_resource_t *find_compatible_child(pe_resource_t *local_child,
54 pe_resource_t *rsc, enum rsc_role_e filter,
55 gboolean current,
56 pe_working_set_t *data_set);
57 pe_resource_t *find_compatible_child_by_node(pe_resource_t * local_child, pe_node_t * local_node, pe_resource_t * rsc,
58 enum rsc_role_e filter, gboolean current);
59 gboolean is_child_compatible(pe_resource_t *child_rsc, pe_node_t * local_node, enum rsc_role_e filter, gboolean current);
60 bool assign_node(pe_resource_t * rsc, pe_node_t * node, gboolean force);
61 enum pe_action_flags summary_action_flags(pe_action_t * action, GList *children, pe_node_t * node);
62 enum action_tasks clone_child_action(pe_action_t * action);
63 int copies_per_node(pe_resource_t * rsc);
64
65 enum filter_colocation_res {
66 influence_nothing = 0,
67 influence_rsc_location,
68 influence_rsc_priority,
69 };
70
71 extern enum filter_colocation_res
72 filter_colocation_constraint(pe_resource_t * rsc_lh, pe_resource_t * rsc_rh,
73 pcmk__colocation_t *constraint, gboolean preview);
74
75 extern int compare_capacity(const pe_node_t * node1, const pe_node_t * node2);
76 extern void calculate_utilization(GHashTable * current_utilization,
77 GHashTable * utilization, gboolean plus);
78
79 extern void process_utilization(pe_resource_t * rsc, pe_node_t ** prefer, pe_working_set_t * data_set);
80 pe_action_t *create_pseudo_resource_op(pe_resource_t * rsc, const char *task, bool optional, bool runnable, pe_working_set_t *data_set);
81 pe_action_t *pe_cancel_op(pe_resource_t *rsc, const char *name,
82 guint interval_ms, pe_node_t *node,
83 pe_working_set_t *data_set);
84 pe_action_t *sched_shutdown_op(pe_node_t *node, pe_working_set_t *data_set);
85
86 xmlNode *pcmk__create_history_xml(xmlNode *parent, lrmd_event_data_t *event,
87 const char *caller_version, int target_rc,
88 const char *node, const char *origin,
89 int level);
90
91 # define LOAD_STOPPED "load_stopped"
92
93 void modify_configuration(
94 pe_working_set_t * data_set, cib_t *cib,
95 const char *quorum, const char *watchdog, GList *node_up, GList *node_down, GList *node_fail,
96 GList *op_inject, GList *ticket_grant, GList *ticket_revoke,
97 GList *ticket_standby, GList *ticket_activate);
98
99 int run_simulation(pe_working_set_t * data_set, cib_t *cib, GList *op_fail_list);
100
101 pcmk__output_t *pcmk__new_logger(void);
102
103 #endif