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 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
304 pe_action_clear = 0x00400,
305 #endif
306 pe_action_dangle = 0x00800,
307
308
309
310
311 pe_action_requires_any = 0x01000,
312
313 pe_action_reschedule = 0x02000,
314 pe_action_tracking = 0x04000,
315 pe_action_dedup = 0x08000,
316
317 pe_action_dc = 0x10000,
318 };
319
320
321 struct pe_resource_s {
322 char *id;
323 char *clone_name;
324 xmlNode *xml;
325 xmlNode *orig_xml;
326 xmlNode *ops_xml;
327
328 pe_working_set_t *cluster;
329 pe_resource_t *parent;
330
331 enum pe_obj_types variant;
332 void *variant_opaque;
333 resource_object_functions_t *fns;
334 resource_alloc_functions_t *cmds;
335
336 enum rsc_recovery_type recovery_type;
337
338
339 enum pe_restart restart_type;
340
341 int priority;
342 int stickiness;
343 int sort_index;
344 int failure_timeout;
345 int migration_threshold;
346 guint remote_reconnect_ms;
347 char *pending_task;
348
349 unsigned long long flags;
350
351
352 gboolean is_remote_node;
353 gboolean exclusive_discover;
354
355
356
357 GList *rsc_cons_lhs;
358 GList *rsc_cons;
359 GList *rsc_location;
360 GList *actions;
361 GList *rsc_tickets;
362
363
364 pe_node_t *allocated_to;
365 pe_node_t *partial_migration_target;
366 pe_node_t *partial_migration_source;
367 GList *running_on;
368 GHashTable *known_on;
369 GHashTable *allowed_nodes;
370
371 enum rsc_role_e role;
372 enum rsc_role_e next_role;
373
374 GHashTable *meta;
375 GHashTable *parameters;
376 GHashTable *utilization;
377
378 GList *children;
379 GList *dangling_migrations;
380
381 pe_resource_t *container;
382 GList *fillers;
383
384 pe_node_t *pending_node;
385 pe_node_t *lock_node;
386 time_t lock_time;
387
388
389
390
391
392
393 GHashTable *parameter_cache;
394 #if ENABLE_VERSIONED_ATTRS
395 xmlNode *versioned_parameters;
396 #endif
397 };
398
399 #if ENABLE_VERSIONED_ATTRS
400
401 typedef struct pe_rsc_action_details_s {
402 xmlNode *versioned_parameters;
403 xmlNode *versioned_meta;
404 } pe_rsc_action_details_t;
405 #endif
406
407 struct pe_action_s {
408 int id;
409 int priority;
410
411 pe_resource_t *rsc;
412 pe_node_t *node;
413 xmlNode *op_entry;
414
415 char *task;
416 char *uuid;
417 char *cancel_task;
418 char *reason;
419
420 enum pe_action_flags flags;
421 enum rsc_start_requirement needs;
422 enum action_fail_response on_fail;
423 enum rsc_role_e fail_role;
424
425 GHashTable *meta;
426 GHashTable *extra;
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443 int runnable_before;
444
445
446 int required_runnable_before;
447
448 GList *actions_before;
449 GList *actions_after;
450
451
452
453
454 void *action_details;
455 };
456
457 typedef struct pe_ticket_s {
458 char *id;
459 gboolean granted;
460 time_t last_granted;
461 gboolean standby;
462 GHashTable *state;
463 } pe_ticket_t;
464
465 typedef struct pe_tag_s {
466 char *id;
467 GList *refs;
468 } pe_tag_t;
469
470
471 enum pe_link_state {
472 pe_link_not_dumped,
473 pe_link_dumped,
474 pe_link_dup,
475 };
476
477 enum pe_discover_e {
478 pe_discover_always = 0,
479 pe_discover_never,
480 pe_discover_exclusive,
481 };
482
483
484 enum pe_ordering {
485 pe_order_none = 0x0,
486 pe_order_optional = 0x1,
487 pe_order_apply_first_non_migratable = 0x2,
488
489 pe_order_implies_first = 0x10,
490 pe_order_implies_then = 0x20,
491 pe_order_promoted_implies_first = 0x40,
492
493
494 pe_order_implies_first_migratable = 0x80,
495
496 pe_order_runnable_left = 0x100,
497
498 pe_order_pseudo_left = 0x200,
499 pe_order_implies_then_on_node = 0x400,
500
501
502
503 pe_order_probe = 0x800,
504
505
506
507
508 pe_order_restart = 0x1000,
509 pe_order_stonith_stop = 0x2000,
510 pe_order_serialize_only = 0x4000,
511 pe_order_same_node = 0x8000,
512
513 pe_order_implies_first_printed = 0x10000,
514 pe_order_implies_then_printed = 0x20000,
515
516 pe_order_asymmetrical = 0x100000,
517 pe_order_load = 0x200000,
518 pe_order_one_or_more = 0x400000,
519 pe_order_anti_colocation = 0x800000,
520
521 pe_order_preserve = 0x1000000,
522 pe_order_then_cancels_first = 0x2000000,
523 pe_order_trace = 0x4000000,
524
525 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
526
527 pe_order_implies_first_master = pe_order_promoted_implies_first,
528 #endif
529 };
530
531
532 typedef struct pe_action_wrapper_s {
533 enum pe_ordering type;
534 enum pe_link_state state;
535 pe_action_t *action;
536 } pe_action_wrapper_t;
537
538 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
539 #include <crm/pengine/pe_types_compat.h>
540 #endif
541
542 #ifdef __cplusplus
543 }
544 #endif
545
546 #endif