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