1
2
3
4
5
6
7
8
9
10 #ifndef PE_TYPES__H
11 # define PE_TYPES__H
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17
18
19
20
21
22
23 # include <stdbool.h>
24 # include <sys/types.h>
25 # include <libxml/tree.h>
26 # include <glib.h>
27 # include <crm/common/iso8601.h>
28 # include <crm/pengine/common.h>
29
30 typedef struct pe_node_s pe_node_t;
31 typedef struct pe_action_s pe_action_t;
32 typedef struct pe_resource_s pe_resource_t;
33 typedef struct pe_working_set_s pe_working_set_t;
34
35 enum pe_obj_types {
36 pe_unknown = -1,
37 pe_native = 0,
38 pe_group = 1,
39 pe_clone = 2,
40 pe_container = 3,
41 };
42
43 typedef struct resource_object_functions_s {
44 gboolean (*unpack) (pe_resource_t*, pe_working_set_t*);
45 pe_resource_t *(*find_rsc) (pe_resource_t *parent, const char *search,
46 const pe_node_t *node, int flags);
47
48 char *(*parameter) (pe_resource_t*, pe_node_t*, gboolean, const char*,
49 pe_working_set_t*);
50
51 void (*print) (pe_resource_t*, const char*, long, void*);
52 gboolean (*active) (pe_resource_t*, gboolean);
53 enum rsc_role_e (*state) (const pe_resource_t*, gboolean);
54 pe_node_t *(*location) (const pe_resource_t*, GList**, int);
55 void (*free) (pe_resource_t*);
56 void (*count) (pe_resource_t*);
57 gboolean (*is_filtered) (pe_resource_t*, GList *, gboolean);
58 } resource_object_functions_t;
59
60 typedef struct resource_alloc_functions_s resource_alloc_functions_t;
61
62 enum pe_quorum_policy {
63 no_quorum_freeze,
64 no_quorum_stop,
65 no_quorum_ignore,
66 no_quorum_suicide,
67 no_quorum_demote
68 };
69
70 enum node_type {
71 node_ping,
72 node_member,
73 node_remote
74 };
75
76
77 enum pe_restart {
78 pe_restart_restart,
79 pe_restart_ignore
80 };
81
82
83 enum pe_find {
84 pe_find_renamed = 0x001,
85 pe_find_anon = 0x002,
86 pe_find_clone = 0x004,
87 pe_find_current = 0x008,
88 pe_find_inactive = 0x010,
89 pe_find_any = 0x020,
90 };
91
92
93
94 # define pe_flag_have_quorum 0x00000001ULL
95 # define pe_flag_symmetric_cluster 0x00000002ULL
96 # define pe_flag_maintenance_mode 0x00000008ULL
97
98 # define pe_flag_stonith_enabled 0x00000010ULL
99 # define pe_flag_have_stonith_resource 0x00000020ULL
100 # define pe_flag_enable_unfencing 0x00000040ULL
101 # define pe_flag_concurrent_fencing 0x00000080ULL
102
103 # define pe_flag_stop_rsc_orphans 0x00000100ULL
104 # define pe_flag_stop_action_orphans 0x00000200ULL
105 # define pe_flag_stop_everything 0x00000400ULL
106
107 # define pe_flag_start_failure_fatal 0x00001000ULL
108
109
110 # define pe_flag_remove_after_stop 0x00002000ULL
111
112 # define pe_flag_startup_fencing 0x00004000ULL
113 # define pe_flag_shutdown_lock 0x00008000ULL
114
115 # define pe_flag_startup_probes 0x00010000ULL
116 # define pe_flag_have_status 0x00020000ULL
117 # define pe_flag_have_remote_nodes 0x00040000ULL
118
119 # define pe_flag_quick_location 0x00100000ULL
120 # define pe_flag_sanitized 0x00200000ULL
121
122
123 # define pe_flag_stdout 0x00400000ULL
124
125
126 # define pe_flag_no_counts 0x00800000ULL
127
128
129
130
131 # define pe_flag_no_compat 0x01000000ULL
132
133 # define pe_flag_show_scores 0x02000000ULL
134 # define pe_flag_show_utilization 0x04000000ULL
135
136 struct pe_working_set_s {
137 xmlNode *input;
138 crm_time_t *now;
139
140
141 char *dc_uuid;
142 pe_node_t *dc_node;
143 const char *stonith_action;
144 const char *placement_strategy;
145
146 unsigned long long flags;
147
148 int stonith_timeout;
149 enum pe_quorum_policy no_quorum_policy;
150
151 GHashTable *config_hash;
152 GHashTable *tickets;
153
154
155 GHashTable *singletons;
156
157 GList *nodes;
158 GList *resources;
159 GList *placement_constraints;
160 GList *ordering_constraints;
161 GList *colocation_constraints;
162 GList *ticket_constraints;
163
164 GList *actions;
165 xmlNode *failed;
166 xmlNode *op_defaults;
167 xmlNode *rsc_defaults;
168
169
170 int num_synapse;
171 int max_valid_nodes;
172 int order_id;
173 int action_id;
174
175
176 xmlNode *graph;
177
178 GHashTable *template_rsc_sets;
179 const char *localhost;
180 GHashTable *tags;
181
182 int blocked_resources;
183 int disabled_resources;
184
185 GList *param_check;
186 GList *stop_needed;
187 time_t recheck_by;
188 int ninstances;
189 guint shutdown_lock;
190 int priority_fencing_delay;
191
192 void *priv;
193 };
194
195 enum pe_check_parameters {
196
197
198
199 pe_check_last_failure,
200
201
202
203
204 pe_check_active,
205 };
206
207 struct pe_node_shared_s {
208 const char *id;
209 const char *uname;
210 enum node_type type;
211
212
213 gboolean online;
214 gboolean standby;
215 gboolean standby_onfail;
216 gboolean pending;
217 gboolean unclean;
218 gboolean unseen;
219 gboolean shutdown;
220 gboolean expected_up;
221 gboolean is_dc;
222 gboolean maintenance;
223 gboolean rsc_discovery_enabled;
224 gboolean remote_requires_reset;
225 gboolean remote_was_fenced;
226 gboolean remote_maintenance;
227 gboolean unpacked;
228
229 int num_resources;
230 pe_resource_t *remote_rsc;
231 GList *running_rsc;
232 GList *allocated_rsc;
233
234 GHashTable *attrs;
235 GHashTable *utilization;
236 GHashTable *digest_cache;
237 int priority;
238 };
239
240 struct pe_node_s {
241 int weight;
242 gboolean fixed;
243 int count;
244 struct pe_node_shared_s *details;
245 int rsc_discover_mode;
246 };
247
248 # define pe_rsc_orphan 0x00000001ULL
249 # define pe_rsc_managed 0x00000002ULL
250 # define pe_rsc_block 0x00000004ULL
251 # define pe_rsc_orphan_container_filler 0x00000008ULL
252
253 # define pe_rsc_notify 0x00000010ULL
254 # define pe_rsc_unique 0x00000020ULL
255 # define pe_rsc_fence_device 0x00000040ULL
256 # define pe_rsc_promotable 0x00000080ULL
257
258 # define pe_rsc_provisional 0x00000100ULL
259 # define pe_rsc_allocating 0x00000200ULL
260 # define pe_rsc_merging 0x00000400ULL
261
262 # define pe_rsc_stop 0x00001000ULL
263 # define pe_rsc_reload 0x00002000ULL
264 # define pe_rsc_allow_remote_remotes 0x00004000ULL
265 # define pe_rsc_critical 0x00008000ULL
266
267 # define pe_rsc_failed 0x00010000ULL
268 # define pe_rsc_runnable 0x00040000ULL
269 # define pe_rsc_start_pending 0x00080000ULL
270
271 # define pe_rsc_starting 0x00100000ULL
272 # define pe_rsc_stopping 0x00200000ULL
273 # define pe_rsc_allow_migrate 0x00800000ULL
274
275 # define pe_rsc_failure_ignored 0x01000000ULL
276 # define pe_rsc_maintenance 0x04000000ULL
277 # define pe_rsc_is_container 0x08000000ULL
278
279 # define pe_rsc_needs_quorum 0x10000000ULL
280 # define pe_rsc_needs_fencing 0x20000000ULL
281 # define pe_rsc_needs_unfencing 0x40000000ULL
282
283 enum pe_graph_flags {
284 pe_graph_none = 0x00000,
285 pe_graph_updated_first = 0x00001,
286 pe_graph_updated_then = 0x00002,
287 pe_graph_disable = 0x00004,
288 };
289
290
291 enum pe_action_flags {
292 pe_action_pseudo = 0x00001,
293 pe_action_runnable = 0x00002,
294 pe_action_optional = 0x00004,
295 pe_action_print_always = 0x00008,
296
297 pe_action_have_node_attrs = 0x00010,
298 pe_action_implied_by_stonith = 0x00040,
299 pe_action_migrate_runnable = 0x00080,
300
301 pe_action_dumped = 0x00100,
302 pe_action_processed = 0x00200,
303 pe_action_clear = 0x00400,
304 pe_action_dangle = 0x00800,
305
306
307
308
309 pe_action_requires_any = 0x01000,
310
311 pe_action_reschedule = 0x02000,
312 pe_action_tracking = 0x04000,
313 pe_action_dedup = 0x08000,
314
315 pe_action_dc = 0x10000,
316 };
317
318
319 struct pe_resource_s {
320 char *id;
321 char *clone_name;
322 xmlNode *xml;
323 xmlNode *orig_xml;
324 xmlNode *ops_xml;
325
326 pe_working_set_t *cluster;
327 pe_resource_t *parent;
328
329 enum pe_obj_types variant;
330 void *variant_opaque;
331 resource_object_functions_t *fns;
332 resource_alloc_functions_t *cmds;
333
334 enum rsc_recovery_type recovery_type;
335
336
337 enum pe_restart restart_type;
338
339 int priority;
340 int stickiness;
341 int sort_index;
342 int failure_timeout;
343 int migration_threshold;
344 guint remote_reconnect_ms;
345 char *pending_task;
346
347 unsigned long long flags;
348
349
350 gboolean is_remote_node;
351 gboolean exclusive_discover;
352
353
354
355 GList *rsc_cons_lhs;
356 GList *rsc_cons;
357 GList *rsc_location;
358 GList *actions;
359 GList *rsc_tickets;
360
361
362 pe_node_t *allocated_to;
363 pe_node_t *partial_migration_target;
364 pe_node_t *partial_migration_source;
365 GList *running_on;
366 GHashTable *known_on;
367 GHashTable *allowed_nodes;
368
369 enum rsc_role_e role;
370 enum rsc_role_e next_role;
371
372 GHashTable *meta;
373 GHashTable *parameters;
374 GHashTable *utilization;
375
376 GList *children;
377 GList *dangling_migrations;
378
379 pe_resource_t *container;
380 GList *fillers;
381
382 pe_node_t *pending_node;
383 pe_node_t *lock_node;
384 time_t lock_time;
385
386
387
388
389
390
391 GHashTable *parameter_cache;
392 #if ENABLE_VERSIONED_ATTRS
393 xmlNode *versioned_parameters;
394 #endif
395 };
396
397 #if ENABLE_VERSIONED_ATTRS
398
399 typedef struct pe_rsc_action_details_s {
400 xmlNode *versioned_parameters;
401 xmlNode *versioned_meta;
402 } pe_rsc_action_details_t;
403 #endif
404
405 struct pe_action_s {
406 int id;
407 int priority;
408
409 pe_resource_t *rsc;
410 pe_node_t *node;
411 xmlNode *op_entry;
412
413 char *task;
414 char *uuid;
415 char *cancel_task;
416 char *reason;
417
418 enum pe_action_flags flags;
419 enum rsc_start_requirement needs;
420 enum action_fail_response on_fail;
421 enum rsc_role_e fail_role;
422
423 GHashTable *meta;
424 GHashTable *extra;
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441 int runnable_before;
442
443
444 int required_runnable_before;
445
446 GList *actions_before;
447 GList *actions_after;
448
449
450
451
452 void *action_details;
453 };
454
455 typedef struct pe_ticket_s {
456 char *id;
457 gboolean granted;
458 time_t last_granted;
459 gboolean standby;
460 GHashTable *state;
461 } pe_ticket_t;
462
463 typedef struct pe_tag_s {
464 char *id;
465 GList *refs;
466 } pe_tag_t;
467
468
469 enum pe_link_state {
470 pe_link_not_dumped,
471 pe_link_dumped,
472 pe_link_dup,
473 };
474
475 enum pe_discover_e {
476 pe_discover_always = 0,
477 pe_discover_never,
478 pe_discover_exclusive,
479 };
480
481
482 enum pe_ordering {
483 pe_order_none = 0x0,
484 pe_order_optional = 0x1,
485 pe_order_apply_first_non_migratable = 0x2,
486
487 pe_order_implies_first = 0x10,
488 pe_order_implies_then = 0x20,
489 pe_order_promoted_implies_first = 0x40,
490
491
492 pe_order_implies_first_migratable = 0x80,
493
494 pe_order_runnable_left = 0x100,
495
496 pe_order_pseudo_left = 0x200,
497 pe_order_implies_then_on_node = 0x400,
498
499
500
501 pe_order_probe = 0x800,
502
503
504
505
506 pe_order_restart = 0x1000,
507 pe_order_stonith_stop = 0x2000,
508 pe_order_serialize_only = 0x4000,
509 pe_order_same_node = 0x8000,
510
511 pe_order_implies_first_printed = 0x10000,
512 pe_order_implies_then_printed = 0x20000,
513
514 pe_order_asymmetrical = 0x100000,
515 pe_order_load = 0x200000,
516 pe_order_one_or_more = 0x400000,
517 pe_order_anti_colocation = 0x800000,
518
519 pe_order_preserve = 0x1000000,
520 pe_order_then_cancels_first = 0x2000000,
521 pe_order_trace = 0x4000000,
522
523 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
524
525 pe_order_implies_first_master = pe_order_promoted_implies_first,
526 #endif
527 };
528
529
530 typedef struct pe_action_wrapper_s {
531 enum pe_ordering type;
532 enum pe_link_state state;
533 pe_action_t *action;
534 } pe_action_wrapper_t;
535
536 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
537 #include <crm/pengine/pe_types_compat.h>
538 #endif
539
540 #ifdef __cplusplus
541 }
542 #endif
543
544 #endif