pacemaker  2.1.9-49aab99839
Scalable High-Availability cluster resource manager
libpacemaker_private.h
Go to the documentation of this file.
1 /*
2  * Copyright 2021-2024 the Pacemaker project contributors
3  *
4  * The version control history for this file may have further details.
5  *
6  * This source code is licensed under the GNU Lesser General Public License
7  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8  */
9 
10 #ifndef PCMK__LIBPACEMAKER_PRIVATE__H
11 # define PCMK__LIBPACEMAKER_PRIVATE__H
12 
13 /* This header is for the sole use of libpacemaker, so that functions can be
14  * declared with G_GNUC_INTERNAL for efficiency.
15  */
16 
17 #include <crm/lrmd_events.h> // lrmd_event_data_t
18 #include <crm/common/scheduler.h> // pcmk_action_t, pcmk_node_t, etc.
19 #include <crm/pengine/internal.h> // pcmk__location_t
20 
21 // Colocation flags
24 
25  // Primary is affected even if already active
26  pcmk__coloc_influence = (1U << 0),
27 
28  // Colocation was explicitly configured in CIB
29  pcmk__coloc_explicit = (1U << 1),
30 };
31 
32 // Flags to modify the behavior of add_colocated_node_scores()
34  // With no other flags, apply all "with this" colocations
36 
37  // Apply "this with" colocations instead of "with this" colocations
39 
40  // Apply only colocations with non-negative scores
42 
43  // Apply only colocations with at least one matching node
45 };
46 
47 // Flags the update_ordered_actions() method can return
49  pcmk__updated_none = 0, // Nothing changed
50  pcmk__updated_first = (1 << 0), // First action was updated
51  pcmk__updated_then = (1 << 1), // Then action was updated
52 };
53 
54 #define pcmk__set_updated_flags(au_flags, action, flags_to_set) do { \
55  au_flags = pcmk__set_flags_as(__func__, __LINE__, \
56  LOG_TRACE, "Action update", \
57  (action)->uuid, au_flags, \
58  (flags_to_set), #flags_to_set); \
59  } while (0)
60 
61 #define pcmk__clear_updated_flags(au_flags, action, flags_to_clear) do { \
62  au_flags = pcmk__clear_flags_as(__func__, __LINE__, \
63  LOG_TRACE, "Action update", \
64  (action)->uuid, au_flags, \
65  (flags_to_clear), #flags_to_clear); \
66  } while (0)
67 
68 // Resource assignment methods
90  pcmk_node_t *(*assign)(pcmk_resource_t *rsc, const pcmk_node_t *prefer,
91  bool stop_if_fail);
92 
100 
111 
119 
136  const pcmk_resource_t *primary,
137  const pcmk__colocation_t *colocation,
138  bool for_dependent);
139 
157  GList *(*colocated_resources)(const pcmk_resource_t *rsc,
158  const pcmk_resource_t *orig_rsc,
159  GList *colocated_rscs);
160 
179  const pcmk_resource_t *orig_rsc,
180  GList **list);
181 
201  const pcmk_resource_t *orig_rsc,
202  GList **list);
203 
234  const pcmk_resource_t *target_rsc,
235  const char *log_id, GHashTable **nodes,
236  const pcmk__colocation_t *colocation,
237  float factor, uint32_t flags);
238 
247 
260  uint32_t (*action_flags)(pcmk_action_t *action, const pcmk_node_t *node);
261 
286  pcmk_action_t *then,
287  const pcmk_node_t *node, uint32_t flags,
288  uint32_t filter, uint32_t type,
290 
298 
306 
317  void (*add_graph_meta)(const pcmk_resource_t *rsc, xmlNode *xml);
318 
334  void (*add_utilization)(const pcmk_resource_t *rsc,
335  const pcmk_resource_t *orig_rsc, GList *all_rscs,
336  GHashTable *utilization);
337 
345 };
346 
347 // Actions (pcmk_sched_actions.c)
348 
349 G_GNUC_INTERNAL
352 
353 G_GNUC_INTERNAL
355  const pcmk_node_t *node, uint32_t flags,
356  uint32_t filter, uint32_t type,
358 
359 G_GNUC_INTERNAL
360 void pcmk__log_action(const char *pre_text, const pcmk_action_t *action,
361  bool details);
362 
363 G_GNUC_INTERNAL
365  guint interval_ms,
366  const pcmk_node_t *node);
367 
368 G_GNUC_INTERNAL
370 
371 G_GNUC_INTERNAL
373 
374 G_GNUC_INTERNAL
376 
377 G_GNUC_INTERNAL
379 
380 G_GNUC_INTERNAL
382  const xmlNode *xml_op);
383 
384 G_GNUC_INTERNAL
386 
387 
388 // Recurring actions (pcmk_sched_recurring.c)
389 
390 G_GNUC_INTERNAL
392 
393 G_GNUC_INTERNAL
394 void pcmk__schedule_cancel(pcmk_resource_t *rsc, const char *call_id,
395  const char *task, guint interval_ms,
396  const pcmk_node_t *node, const char *reason);
397 
398 G_GNUC_INTERNAL
399 void pcmk__reschedule_recurring(pcmk_resource_t *rsc, const char *task,
400  guint interval_ms, pcmk_node_t *node);
401 
402 G_GNUC_INTERNAL
404 
405 
406 // Producing transition graphs (pcmk_graph_producer.c)
407 
408 G_GNUC_INTERNAL
409 bool pcmk__graph_has_loop(const pcmk_action_t *init_action,
410  const pcmk_action_t *action,
412 
413 G_GNUC_INTERNAL
415 
416 G_GNUC_INTERNAL
418 
419 
420 // Fencing (pcmk_sched_fencing.c)
421 
422 G_GNUC_INTERNAL
423 void pcmk__order_vs_fence(pcmk_action_t *stonith_op,
425 
426 G_GNUC_INTERNAL
427 void pcmk__order_vs_unfence(const pcmk_resource_t *rsc, pcmk_node_t *node,
429  enum pcmk__action_relation_flags order);
430 
431 G_GNUC_INTERNAL
432 void pcmk__fence_guest(pcmk_node_t *node);
433 
434 G_GNUC_INTERNAL
435 bool pcmk__node_unfenced(const pcmk_node_t *node);
436 
437 G_GNUC_INTERNAL
438 void pcmk__order_restart_vs_unfence(gpointer data, gpointer user_data);
439 
440 
441 // Injected scheduler inputs (pcmk_sched_injections.c)
442 
444  const pcmk_injections_t *injections);
445 
446 
447 // Constraints of any type (pcmk_sched_constraints.c)
448 
449 G_GNUC_INTERNAL
451  const char *id);
452 
453 G_GNUC_INTERNAL
454 xmlNode *pcmk__expand_tags_in_sets(xmlNode *xml_obj,
455  const pcmk_scheduler_t *scheduler);
456 
457 G_GNUC_INTERNAL
459  const char *id, pcmk_resource_t **rsc,
460  pcmk_tag_t **tag);
461 
462 G_GNUC_INTERNAL
463 bool pcmk__tag_to_set(xmlNode *xml_obj, xmlNode **rsc_set, const char *attr,
464  bool convert_rsc, const pcmk_scheduler_t *scheduler);
465 
466 G_GNUC_INTERNAL
468 
469 
470 // Location constraints
471 
472 G_GNUC_INTERNAL
473 void pcmk__unpack_location(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
474 
475 G_GNUC_INTERNAL
477  int node_score, const char *discover_mode,
478  pcmk_node_t *foo_node);
479 
480 G_GNUC_INTERNAL
482 
483 G_GNUC_INTERNAL
485 
486 
487 // Colocation constraints (pcmk_sched_colocation.c)
488 
493 };
494 
505 static inline const char *
506 pcmk__colocation_node_attr(const pcmk_node_t *node, const char *attr,
507  const pcmk_resource_t *rsc)
508 {
509  const char *target = NULL;
510 
511  /* A resource colocated with a bundle or its primitive can't run on the
512  * bundle node itself (where only the primitive, if any, can run). Instead,
513  * we treat it as a colocation with the bundle's containers, so always look
514  * up colocation node attributes on the container host.
515  */
516  if (pcmk__is_bundle_node(node) && pcmk__is_bundled(rsc)
517  && (pe__const_top_resource(rsc, false) == pe__bundled_resource(rsc))) {
519 
520  } else if (rsc != NULL) {
521  target = g_hash_table_lookup(rsc->meta,
523  }
524 
525  return pcmk__node_attr(node, attr, target, pcmk__rsc_node_assigned);
526 }
527 
528 G_GNUC_INTERNAL
530  *dependent,
531  const pcmk_resource_t
532  *primary,
533  const pcmk__colocation_t
534  *colocation,
535  bool preview);
536 
537 G_GNUC_INTERNAL
539  const pcmk_resource_t *primary,
540  const pcmk__colocation_t *colocation);
541 
542 G_GNUC_INTERNAL
544  const pcmk_resource_t *primary,
545  const pcmk__colocation_t *colocation);
546 
547 G_GNUC_INTERNAL
549  const pcmk_resource_t *target_rsc,
550  const char *log_id, GHashTable **nodes,
551  const pcmk__colocation_t *colocation,
552  float factor, uint32_t flags);
553 
554 G_GNUC_INTERNAL
555 void pcmk__add_dependent_scores(gpointer data, gpointer user_data);
556 
557 G_GNUC_INTERNAL
559  const pcmk_resource_t *primary,
560  const pcmk__colocation_t *colocation,
561  const GList *primary_nodes,
562  bool merge_scores);
563 
564 G_GNUC_INTERNAL
565 void pcmk__unpack_colocation(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
566 
567 G_GNUC_INTERNAL
568 void pcmk__add_this_with(GList **list, const pcmk__colocation_t *colocation,
569  const pcmk_resource_t *rsc);
570 
571 G_GNUC_INTERNAL
572 void pcmk__add_this_with_list(GList **list, GList *addition,
573  const pcmk_resource_t *rsc);
574 
575 G_GNUC_INTERNAL
576 void pcmk__add_with_this(GList **list, const pcmk__colocation_t *colocation,
577  const pcmk_resource_t *rsc);
578 
579 G_GNUC_INTERNAL
580 void pcmk__add_with_this_list(GList **list, GList *addition,
581  const pcmk_resource_t *rsc);
582 
583 G_GNUC_INTERNAL
585 
586 G_GNUC_INTERNAL
588 
589 G_GNUC_INTERNAL
590 void pcmk__new_colocation(const char *id, const char *node_attr, int score,
591  pcmk_resource_t *dependent, pcmk_resource_t *primary,
592  const char *dependent_role, const char *primary_role,
593  uint32_t flags);
594 
595 G_GNUC_INTERNAL
597 
598 G_GNUC_INTERNAL
600  const pcmk_resource_t *rsc);
601 
602 
603 // Ordering constraints (pcmk_sched_ordering.c)
604 
605 G_GNUC_INTERNAL
606 void pcmk__new_ordering(pcmk_resource_t *first_rsc, char *first_task,
607  pcmk_action_t *first_action, pcmk_resource_t *then_rsc,
608  char *then_task, pcmk_action_t *then_action,
609  uint32_t flags, pcmk_scheduler_t *sched);
610 
611 G_GNUC_INTERNAL
612 void pcmk__unpack_ordering(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
613 
614 G_GNUC_INTERNAL
616 
617 G_GNUC_INTERNAL
619  pcmk_action_t *shutdown_op);
620 
621 G_GNUC_INTERNAL
623 
624 G_GNUC_INTERNAL
625 void pcmk__order_after_each(pcmk_action_t *after, GList *list);
626 
627 
638 #define pcmk__order_resource_actions(first_rsc, first_task, \
639  then_rsc, then_task, flags) \
640  pcmk__new_ordering((first_rsc), \
641  pcmk__op_key((first_rsc)->id, (first_task), 0), \
642  NULL, \
643  (then_rsc), \
644  pcmk__op_key((then_rsc)->id, (then_task), 0), \
645  NULL, (flags), (first_rsc)->cluster)
646 
647 #define pcmk__order_starts(rsc1, rsc2, flags) \
648  pcmk__order_resource_actions((rsc1), PCMK_ACTION_START, \
649  (rsc2), PCMK_ACTION_START, (flags))
650 
651 #define pcmk__order_stops(rsc1, rsc2, flags) \
652  pcmk__order_resource_actions((rsc1), PCMK_ACTION_STOP, \
653  (rsc2), PCMK_ACTION_STOP, (flags))
654 
655 
656 // Ticket constraints (pcmk_sched_tickets.c)
657 
658 G_GNUC_INTERNAL
659 void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
660 
661 
662 // Promotable clone resources (pcmk_sched_promotable.c)
663 
664 G_GNUC_INTERNAL
666 
667 G_GNUC_INTERNAL
669 
670 G_GNUC_INTERNAL
672 
673 G_GNUC_INTERNAL
675 
676 G_GNUC_INTERNAL
678 
679 G_GNUC_INTERNAL
681 
682 G_GNUC_INTERNAL
684  pcmk_resource_t *dependent,
685  const pcmk__colocation_t
686  *colocation);
687 
688 G_GNUC_INTERNAL
690  pcmk_resource_t *dependent,
691  const pcmk__colocation_t
692  *colocation);
693 
694 
695 // Pacemaker Remote nodes (pcmk_sched_remote.c)
696 
697 G_GNUC_INTERNAL
698 bool pcmk__is_failed_remote_node(const pcmk_node_t *node);
699 
700 G_GNUC_INTERNAL
702 
703 G_GNUC_INTERNAL
705  const pcmk_node_t *node);
706 
707 G_GNUC_INTERNAL
709 
710 G_GNUC_INTERNAL
711 void pcmk__substitute_remote_addr(pcmk_resource_t *rsc, GHashTable *params);
712 
713 G_GNUC_INTERNAL
714 void pcmk__add_guest_meta_to_xml(xmlNode *args_xml,
715  const pcmk_action_t *action);
716 
717 
718 // Primitives (pcmk_sched_primitive.c)
719 
720 G_GNUC_INTERNAL
722  const pcmk_node_t *prefer,
723  bool stop_if_fail);
724 
725 G_GNUC_INTERNAL
727 
728 G_GNUC_INTERNAL
730 
731 G_GNUC_INTERNAL
733  const pcmk_node_t *node);
734 
735 G_GNUC_INTERNAL
737  const pcmk_resource_t *primary,
738  const pcmk__colocation_t *colocation,
739  bool for_dependent);
740 
741 G_GNUC_INTERNAL
743  const pcmk_resource_t *orig_rsc,
744  GList **list);
745 
746 G_GNUC_INTERNAL
748  const pcmk_resource_t *orig_rsc,
749  GList **list);
750 
751 G_GNUC_INTERNAL
752 void pcmk__schedule_cleanup(pcmk_resource_t *rsc, const pcmk_node_t *node,
753  bool optional);
754 
755 G_GNUC_INTERNAL
756 void pcmk__primitive_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
757 
758 G_GNUC_INTERNAL
760  const pcmk_resource_t *orig_rsc,
761  GList *all_rscs, GHashTable *utilization);
762 
763 G_GNUC_INTERNAL
765 
766 
767 // Groups (pcmk_sched_group.c)
768 
769 G_GNUC_INTERNAL
771  bool stop_if_fail);
772 
773 G_GNUC_INTERNAL
775 
776 G_GNUC_INTERNAL
778 
779 G_GNUC_INTERNAL
781  const pcmk_resource_t *primary,
782  const pcmk__colocation_t *colocation,
783  bool for_dependent);
784 
785 G_GNUC_INTERNAL
787  const pcmk_resource_t *orig_rsc,
788  GList **list);
789 
790 G_GNUC_INTERNAL
792  const pcmk_resource_t *orig_rsc,
793  GList **list);
794 
795 G_GNUC_INTERNAL
797  const pcmk_resource_t *target_rsc,
798  const char *log_id,
799  GHashTable **nodes,
800  const pcmk__colocation_t *colocation,
801  float factor, uint32_t flags);
802 
803 G_GNUC_INTERNAL
805  pcmk__location_t *location);
806 
807 G_GNUC_INTERNAL
809  const pcmk_node_t *node);
810 
811 G_GNUC_INTERNAL
813  pcmk_action_t *then,
814  const pcmk_node_t *node,
815  uint32_t flags, uint32_t filter,
816  uint32_t type,
818 
819 G_GNUC_INTERNAL
821  const pcmk_resource_t *orig_rsc,
822  GList *colocated_rscs);
823 
824 G_GNUC_INTERNAL
826  const pcmk_resource_t *orig_rsc,
827  GList *all_rscs, GHashTable *utilization);
828 
829 G_GNUC_INTERNAL
831 
832 
833 // Clones (pcmk_sched_clone.c)
834 
835 G_GNUC_INTERNAL
837  bool stop_if_fail);
838 
839 G_GNUC_INTERNAL
841 
842 G_GNUC_INTERNAL
844 
845 G_GNUC_INTERNAL
847 
848 G_GNUC_INTERNAL
850  const pcmk_resource_t *primary,
851  const pcmk__colocation_t *colocation,
852  bool for_dependent);
853 
854 G_GNUC_INTERNAL
856  const pcmk_resource_t *orig_rsc,
857  GList **list);
858 
859 G_GNUC_INTERNAL
861  const pcmk_resource_t *orig_rsc,
862  GList **list);
863 
864 G_GNUC_INTERNAL
866  pcmk__location_t *constraint);
867 
868 G_GNUC_INTERNAL
870  const pcmk_node_t *node);
871 
872 G_GNUC_INTERNAL
874 
875 G_GNUC_INTERNAL
876 void pcmk__clone_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
877 
878 G_GNUC_INTERNAL
880  const pcmk_resource_t *orig_rsc,
881  GList *all_rscs, GHashTable *utilization);
882 
883 G_GNUC_INTERNAL
885 
886 // Bundles (pcmk_sched_bundle.c)
887 
888 G_GNUC_INTERNAL
890  const pcmk_node_t *prefer, bool stop_if_fail);
891 
892 G_GNUC_INTERNAL
894 
895 G_GNUC_INTERNAL
897 
898 G_GNUC_INTERNAL
900 
901 G_GNUC_INTERNAL
903  const pcmk_resource_t *primary,
904  const pcmk__colocation_t *colocation,
905  bool for_dependent);
906 
907 G_GNUC_INTERNAL
909  const pcmk_resource_t *orig_rsc,
910  GList **list);
911 
912 G_GNUC_INTERNAL
914  const pcmk_resource_t *orig_rsc,
915  GList **list);
916 
917 G_GNUC_INTERNAL
919  pcmk__location_t *constraint);
920 
921 G_GNUC_INTERNAL
923  const pcmk_node_t *node);
924 
925 G_GNUC_INTERNAL
927 
928 G_GNUC_INTERNAL
930 
931 G_GNUC_INTERNAL
933  const pcmk_resource_t *orig_rsc,
934  GList *all_rscs, GHashTable *utilization);
935 
936 G_GNUC_INTERNAL
938 
939 
940 // Clone instances or bundle replica containers (pcmk_sched_instances.c)
941 
942 G_GNUC_INTERNAL
943 void pcmk__assign_instances(pcmk_resource_t *collective, GList *instances,
944  int max_total, int max_per_node);
945 
946 G_GNUC_INTERNAL
947 void pcmk__create_instance_actions(pcmk_resource_t *rsc, GList *instances);
948 
949 G_GNUC_INTERNAL
950 bool pcmk__instance_matches(const pcmk_resource_t *instance,
951  const pcmk_node_t *node, enum rsc_role_e role,
952  bool current);
953 
954 G_GNUC_INTERNAL
956  const pcmk_resource_t *rsc,
957  enum rsc_role_e role,
958  bool current);
959 
960 G_GNUC_INTERNAL
962  pcmk_action_t *then,
963  const pcmk_node_t *node,
964  uint32_t flags, uint32_t filter,
965  uint32_t type,
967 
968 G_GNUC_INTERNAL
970  const GList *instances,
971  const pcmk_node_t *node);
972 
973 
974 // Injections (pcmk_injections.c)
975 
976 G_GNUC_INTERNAL
977 xmlNode *pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid);
978 
979 G_GNUC_INTERNAL
980 xmlNode *pcmk__inject_node_state_change(cib_t *cib_conn, const char *node,
981  bool up);
982 
983 G_GNUC_INTERNAL
984 xmlNode *pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node,
985  const char *resource,
986  const char *lrm_name,
987  const char *rclass,
988  const char *rtype,
989  const char *rprovider);
990 
991 G_GNUC_INTERNAL
992 void pcmk__inject_failcount(pcmk__output_t *out, cib_t *cib_conn,
993  xmlNode *cib_node, const char *resource,
994  const char *task, guint interval_ms, int rc);
995 
996 G_GNUC_INTERNAL
997 xmlNode *pcmk__inject_action_result(xmlNode *cib_resource,
998  lrmd_event_data_t *op, int target_rc);
999 
1000 
1001 // Nodes (pcmk_sched_nodes.c)
1002 
1003 G_GNUC_INTERNAL
1004 bool pcmk__node_available(const pcmk_node_t *node, bool consider_score,
1005  bool consider_guest);
1006 
1007 G_GNUC_INTERNAL
1008 bool pcmk__any_node_available(GHashTable *nodes);
1009 
1010 G_GNUC_INTERNAL
1011 GHashTable *pcmk__copy_node_table(GHashTable *nodes);
1012 
1013 G_GNUC_INTERNAL
1014 void pcmk__copy_node_tables(const pcmk_resource_t *rsc, GHashTable **copy);
1015 
1016 G_GNUC_INTERNAL
1017 void pcmk__restore_node_tables(pcmk_resource_t *rsc, GHashTable *backup);
1018 
1019 G_GNUC_INTERNAL
1020 GList *pcmk__sort_nodes(GList *nodes, pcmk_node_t *active_node);
1021 
1022 G_GNUC_INTERNAL
1024 
1025 G_GNUC_INTERNAL
1027  const pcmk_node_t *node);
1028 
1029 
1030 // Functions applying to more than one variant (pcmk_sched_resource.c)
1031 
1032 G_GNUC_INTERNAL
1034 
1035 G_GNUC_INTERNAL
1037  const xmlNode *rsc_entry, bool active_on_node);
1038 
1039 G_GNUC_INTERNAL
1040 GList *pcmk__rscs_matching_id(const char *id,
1041  const pcmk_scheduler_t *scheduler);
1042 
1043 G_GNUC_INTERNAL
1044 GList *pcmk__colocated_resources(const pcmk_resource_t *rsc,
1045  const pcmk_resource_t *orig_rsc,
1046  GList *colocated_rscs);
1047 
1048 G_GNUC_INTERNAL
1049 void pcmk__noop_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
1050 
1051 G_GNUC_INTERNAL
1053 
1054 G_GNUC_INTERNAL
1055 bool pcmk__assign_resource(pcmk_resource_t *rsc, pcmk_node_t *node, bool force,
1056  bool stop_if_fail);
1057 
1058 G_GNUC_INTERNAL
1060 
1061 G_GNUC_INTERNAL
1062 bool pcmk__threshold_reached(pcmk_resource_t *rsc, const pcmk_node_t *node,
1063  pcmk_resource_t **failed);
1064 
1065 G_GNUC_INTERNAL
1067 
1068 G_GNUC_INTERNAL
1069 gint pcmk__cmp_instance(gconstpointer a, gconstpointer b);
1070 
1071 G_GNUC_INTERNAL
1072 gint pcmk__cmp_instance_number(gconstpointer a, gconstpointer b);
1073 
1074 
1075 // Functions related to probes (pcmk_sched_probes.c)
1076 
1077 G_GNUC_INTERNAL
1079 
1080 G_GNUC_INTERNAL
1082 
1083 G_GNUC_INTERNAL
1084 bool pcmk__probe_resource_list(GList *rscs, pcmk_node_t *node);
1085 
1086 G_GNUC_INTERNAL
1088 
1089 
1090 // Functions related to live migration (pcmk_sched_migration.c)
1091 
1093  const pcmk_node_t *current);
1094 
1095 void pcmk__abort_dangling_migration(void *data, void *user_data);
1096 
1097 bool pcmk__rsc_can_migrate(const pcmk_resource_t *rsc,
1098  const pcmk_node_t *current);
1099 
1101 
1102 
1103 // Functions related to node utilization (pcmk_sched_utilization.c)
1104 
1105 G_GNUC_INTERNAL
1107  const pcmk_node_t *node2);
1108 
1109 G_GNUC_INTERNAL
1110 void pcmk__consume_node_capacity(GHashTable *current_utilization,
1111  const pcmk_resource_t *rsc);
1112 
1113 G_GNUC_INTERNAL
1114 void pcmk__release_node_capacity(GHashTable *current_utilization,
1115  const pcmk_resource_t *rsc);
1116 
1117 G_GNUC_INTERNAL
1119 
1120 G_GNUC_INTERNAL
1122  const GList *allowed_nodes);
1123 
1124 G_GNUC_INTERNAL
1125 void pcmk__show_node_capacities(const char *desc, pcmk_scheduler_t *scheduler);
1126 
1127 
1128 // Functions related to the scheduler (pcmk_scheduler.c)
1129 
1130 G_GNUC_INTERNAL
1131 int pcmk__init_scheduler(pcmk__output_t *out, xmlNodePtr input, const crm_time_t *date,
1133 
1134 
1135 // General setup functions (pcmk_setup.c)
1136 
1137 G_GNUC_INTERNAL
1139  pcmk_scheduler_t **scheduler, xmlNode **xml);
1140 
1141 #endif // PCMK__LIBPACEMAKER_PRIVATE__H
const pcmk_resource_t * pe__const_top_resource(const pcmk_resource_t *rsc, bool include_bundle)
Definition: complex.c:1071
G_GNUC_INTERNAL void pcmk__primitive_with_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL void pcmk__order_after_each(pcmk_action_t *after, GList *list)
G_GNUC_INTERNAL GList * pcmk__colocated_resources(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *colocated_rscs)
G_GNUC_INTERNAL pcmk_node_t * pcmk__primitive_assign(pcmk_resource_t *rsc, const pcmk_node_t *prefer, bool stop_if_fail)
G_GNUC_INTERNAL uint32_t pcmk__collective_action_flags(pcmk_action_t *action, const GList *instances, const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__show_node_capacities(const char *desc, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__unpack_location(xmlNode *xml_obj, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__apply_location(pcmk_resource_t *rsc, pcmk__location_t *constraint)
void(* output_actions)(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__schedule_cleanup(pcmk_resource_t *rsc, const pcmk_node_t *node, bool optional)
void(* add_graph_meta)(const pcmk_resource_t *rsc, xmlNode *xml)
G_GNUC_INTERNAL void pcmk__group_shutdown_lock(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__primitive_create_actions(pcmk_resource_t *rsc)
char data[0]
Definition: cpg.c:58
void(* create_actions)(pcmk_resource_t *rsc)
G_GNUC_INTERNAL int pcmk__group_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
pcmk__coloc_affects
G_GNUC_INTERNAL pcmk_node_t * pcmk__bundle_assign(pcmk_resource_t *rsc, const pcmk_node_t *prefer, bool stop_if_fail)
G_GNUC_INTERNAL void pcmk__new_ordering(pcmk_resource_t *first_rsc, char *first_task, pcmk_action_t *first_action, pcmk_resource_t *then_rsc, char *then_task, pcmk_action_t *then_action, uint32_t flags, pcmk_scheduler_t *sched)
G_GNUC_INTERNAL void pcmk__disable_invalid_orderings(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__order_vs_unfence(const pcmk_resource_t *rsc, pcmk_node_t *node, pcmk_action_t *action, enum pcmk__action_relation_flags order)
const char * name
Definition: cib.c:26
G_GNUC_INTERNAL void pcmk__create_utilization_constraints(pcmk_resource_t *rsc, const GList *allowed_nodes)
uint32_t(* action_flags)(pcmk_action_t *action, const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__release_node_capacity(GHashTable *current_utilization, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL bool pcmk__tag_to_set(xmlNode *xml_obj, xmlNode **rsc_set, const char *attr, bool convert_rsc, const pcmk_scheduler_t *scheduler)
struct crm_time_s crm_time_t
Definition: iso8601.h:32
G_GNUC_INTERNAL bool pcmk__probe_resource_list(GList *rscs, pcmk_node_t *node)
G_GNUC_INTERNAL bool pcmk__any_node_available(GHashTable *nodes)
G_GNUC_INTERNAL void pcmk__require_promotion_tickets(pcmk_resource_t *rsc)
G_GNUC_INTERNAL bool pcmk__threshold_reached(pcmk_resource_t *rsc, const pcmk_node_t *node, pcmk_resource_t **failed)
#define PCMK_META_CONTAINER_ATTRIBUTE_TARGET
Definition: options.h:85
G_GNUC_INTERNAL void pcmk__bundle_add_utilization(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
bool pcmk__rsc_can_migrate(const pcmk_resource_t *rsc, const pcmk_node_t *current)
G_GNUC_INTERNAL xmlNode * pcmk__inject_node_state_change(cib_t *cib_conn, const char *node, bool up)
G_GNUC_INTERNAL int pcmk__setup_output_cib_sched(pcmk__output_t **out, cib_t **cib, pcmk_scheduler_t **scheduler, xmlNode **xml)
Definition: pcmk_setup.c:41
G_GNUC_INTERNAL bool pcmk__rsc_agent_changed(pcmk_resource_t *rsc, pcmk_node_t *node, const xmlNode *rsc_entry, bool active_on_node)
GHashTable * meta
Definition: resources.h:467
G_GNUC_INTERNAL GList * pcmk__group_colocated_resources(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *colocated_rscs)
G_GNUC_INTERNAL pcmk_resource_t * pcmk__find_compatible_instance(const pcmk_resource_t *match_rsc, const pcmk_resource_t *rsc, enum rsc_role_e role, bool current)
G_GNUC_INTERNAL void pcmk__order_promotable_instances(pcmk_resource_t *clone)
G_GNUC_INTERNAL void pcmk__apply_locations(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__block_colocation_dependents(pcmk_action_t *action)
G_GNUC_INTERNAL void pcmk__create_instance_actions(pcmk_resource_t *rsc, GList *instances)
G_GNUC_INTERNAL void pcmk__handle_rsc_config_changes(pcmk_scheduler_t *scheduler)
void(* add_colocated_node_scores)(pcmk_resource_t *source_rsc, const pcmk_resource_t *target_rsc, const char *log_id, GHashTable **nodes, const pcmk__colocation_t *colocation, float factor, uint32_t flags)
G_GNUC_INTERNAL xmlNode * pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid)
G_GNUC_INTERNAL void pcmk__with_bundle_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL const pcmk_node_t * pcmk__ban_insufficient_capacity(pcmk_resource_t *rsc)
pcmk_node_t node2
G_GNUC_INTERNAL void pcmk__add_guest_meta_to_xml(xmlNode *args_xml, const pcmk_action_t *action)
Add special guest node meta-attributes to XML.
G_GNUC_INTERNAL int pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
G_GNUC_INTERNAL void pcmk__inject_failcount(pcmk__output_t *out, cib_t *cib_conn, xmlNode *cib_node, const char *resource, const char *task, guint interval_ms, int rc)
G_GNUC_INTERNAL void pcmk__create_promotable_actions(pcmk_resource_t *clone)
G_GNUC_INTERNAL void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__with_clone_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL uint32_t pcmk__update_ordered_actions(pcmk_action_t *first, pcmk_action_t *then, const pcmk_node_t *node, uint32_t flags, uint32_t filter, uint32_t type, pcmk_scheduler_t *scheduler)
enum crm_ais_msg_types type
Definition: cpg.c:51
G_GNUC_INTERNAL void pcmk__update_action_for_orderings(pcmk_action_t *action, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__clone_apply_location(pcmk_resource_t *rsc, pcmk__location_t *constraint)
G_GNUC_INTERNAL bool pcmk__action_is_recurring(const pcmk_action_t *action)
G_GNUC_INTERNAL void pcmk__sort_resources(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL pcmk_node_t * pcmk__connection_host_for_action(const pcmk_action_t *action)
Where resource is assigned.
G_GNUC_INTERNAL void pcmk__bundle_shutdown_lock(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__group_with_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL void pcmk__create_graph(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL bool pcmk__node_available(const pcmk_node_t *node, bool consider_score, bool consider_guest)
const char * action
Definition: pcmk_fence.c:30
G_GNUC_INTERNAL void pcmk__clone_with_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL bool pcmk__assign_resource(pcmk_resource_t *rsc, pcmk_node_t *node, bool force, bool stop_if_fail)
void(* add_actions_to_graph)(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__apply_coloc_to_scores(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation)
G_GNUC_INTERNAL bool pcmk__bundle_create_probe(pcmk_resource_t *rsc, pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__clone_internal_constraints(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__bundle_apply_location(pcmk_resource_t *rsc, pcmk__location_t *constraint)
Scheduler API.
G_GNUC_INTERNAL void pcmk__add_colocated_node_scores(pcmk_resource_t *source_rsc, const pcmk_resource_t *target_rsc, const char *log_id, GHashTable **nodes, const pcmk__colocation_t *colocation, float factor, uint32_t flags)
void(* with_this_colocations)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
pcmk__action_relation_flags
G_GNUC_INTERNAL void pcmk__bundle_with_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
#define PCMK_VALUE_HOST
Definition: options.h:160
G_GNUC_INTERNAL void pcmk__copy_node_tables(const pcmk_resource_t *rsc, GHashTable **copy)
G_GNUC_INTERNAL void pcmk__clone_add_actions_to_graph(pcmk_resource_t *rsc)
G_GNUC_INTERNAL GList * pcmk__rscs_matching_id(const char *id, const pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__consume_node_capacity(GHashTable *current_utilization, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL int pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
G_GNUC_INTERNAL void pcmk__add_with_this_list(GList **list, GList *addition, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__output_resource_actions(pcmk_resource_t *rsc)
G_GNUC_INTERNAL int pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation)
G_GNUC_INTERNAL void pcmk__primitive_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml)
G_GNUC_INTERNAL void pcmk__bundle_internal_constraints(pcmk_resource_t *rsc)
G_GNUC_INTERNAL pcmk_resource_t * pcmk__find_constraint_resource(GList *rsc_list, const char *id)
void pcmk__inject_scheduler_input(pcmk_scheduler_t *scheduler, cib_t *cib, const pcmk_injections_t *injections)
G_GNUC_INTERNAL void pcmk__create_recurring_actions(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__log_action(const char *pre_text, const pcmk_action_t *action, bool details)
G_GNUC_INTERNAL void pcmk__schedule_cancel(pcmk_resource_t *rsc, const char *call_id, const char *task, guint interval_ms, const pcmk_node_t *node, const char *reason)
G_GNUC_INTERNAL void pcmk__add_this_with(GList **list, const pcmk__colocation_t *colocation, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__unpack_ordering(xmlNode *xml_obj, pcmk_scheduler_t *scheduler)
void(* this_with_colocations)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL void pcmk__set_instance_roles(pcmk_resource_t *rsc)
G_GNUC_INTERNAL uint32_t pcmk__group_action_flags(pcmk_action_t *action, const pcmk_node_t *node)
G_GNUC_INTERNAL int pcmk__init_scheduler(pcmk__output_t *out, xmlNodePtr input, const crm_time_t *date, pcmk_scheduler_t **scheduler)
G_GNUC_INTERNAL int pcmk__update_promotable_dependent_priority(const pcmk_resource_t *primary, pcmk_resource_t *dependent, const pcmk__colocation_t *colocation)
G_GNUC_INTERNAL void pcmk__add_promotion_scores(pcmk_resource_t *rsc)
G_GNUC_INTERNAL bool pcmk__rsc_corresponds_to_guest(const pcmk_resource_t *rsc, const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__order_probes(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__clone_create_actions(pcmk_resource_t *rsc)
void(* shutdown_lock)(pcmk_resource_t *rsc)
G_GNUC_INTERNAL gint pcmk__cmp_instance(gconstpointer a, gconstpointer b)
G_GNUC_INTERNAL void pcmk__unassign_resource(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__add_with_this(GList **list, const pcmk__colocation_t *colocation, const pcmk_resource_t *rsc)
rsc_role_e
Definition: roles.h:34
void pcmk__create_migration_actions(pcmk_resource_t *rsc, const pcmk_node_t *current)
void(* apply_location)(pcmk_resource_t *rsc, pcmk__location_t *location)
G_GNUC_INTERNAL void pcmk__noop_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml)
G_GNUC_INTERNAL void pcmk__output_actions(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__assign_instances(pcmk_resource_t *collective, GList *instances, int max_total, int max_per_node)
G_GNUC_INTERNAL gint pcmk__cmp_instance_number(gconstpointer a, gconstpointer b)
G_GNUC_INTERNAL pcmk_action_t * pcmk__new_shutdown_action(pcmk_node_t *node)
G_GNUC_INTERNAL pcmk_node_t * pcmk__clone_assign(pcmk_resource_t *rsc, const pcmk_node_t *prefer, bool stop_if_fail)
G_GNUC_INTERNAL bool pcmk__valid_resource_or_tag(const pcmk_scheduler_t *scheduler, const char *id, pcmk_resource_t **rsc, pcmk_tag_t **tag)
G_GNUC_INTERNAL void pcmk__with_primitive_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
bool(* create_probe)(pcmk_resource_t *rsc, pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__order_restart_vs_unfence(gpointer data, gpointer user_data)
G_GNUC_INTERNAL void pcmk__clone_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml)
G_GNUC_INTERNAL int pcmk__compare_node_capacities(const pcmk_node_t *node1, const pcmk_node_t *node2)
G_GNUC_INTERNAL pcmk_node_t * pcmk__top_allowed_node(const pcmk_resource_t *rsc, const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__primitive_add_utilization(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
G_GNUC_INTERNAL void pcmk__unpack_colocation(xmlNode *xml_obj, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__group_add_colocated_node_scores(pcmk_resource_t *source_rsc, const pcmk_resource_t *target_rsc, const char *log_id, GHashTable **nodes, const pcmk__colocation_t *colocation, float factor, uint32_t flags)
G_GNUC_INTERNAL pcmk_action_t * pcmk__new_cancel_action(pcmk_resource_t *rsc, const char *name, guint interval_ms, const pcmk_node_t *node)
const char * target
Definition: pcmk_fence.c:29
G_GNUC_INTERNAL void pcmk__add_rsc_actions_to_graph(pcmk_resource_t *rsc)
G_GNUC_INTERNAL pcmk__location_t * pcmk__new_location(const char *id, pcmk_resource_t *rsc, int node_score, const char *discover_mode, pcmk_node_t *foo_node)
G_GNUC_INTERNAL void pcmk__set_assignment_methods(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__restore_node_tables(pcmk_resource_t *rsc, GHashTable *backup)
G_GNUC_INTERNAL enum pcmk__coloc_affects pcmk__colocation_affects(const pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool preview)
G_GNUC_INTERNAL void pcmk__update_dependent_with_promotable(const pcmk_resource_t *primary, pcmk_resource_t *dependent, const pcmk__colocation_t *colocation)
Update dependent for a colocation with a promotable clone.
G_GNUC_INTERNAL void pcmk__apply_node_health(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__group_apply_location(pcmk_resource_t *rsc, pcmk__location_t *location)
G_GNUC_INTERNAL bool pcmk__action_locks_rsc_to_node(const pcmk_action_t *action)
G_GNUC_INTERNAL GList * pcmk__with_this_colocations(const pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__bundle_add_actions_to_graph(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__add_dependent_scores(gpointer data, gpointer user_data)
void(* internal_constraints)(pcmk_resource_t *rsc)
G_GNUC_INTERNAL int pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
G_GNUC_INTERNAL void pcmk__reschedule_recurring(pcmk_resource_t *rsc, const char *task, guint interval_ms, pcmk_node_t *node)
G_GNUC_INTERNAL GHashTable * pcmk__copy_node_table(GHashTable *nodes)
G_GNUC_INTERNAL bool pcmk__instance_matches(const pcmk_resource_t *instance, const pcmk_node_t *node, enum rsc_role_e role, bool current)
G_GNUC_INTERNAL bool pcmk__graph_has_loop(const pcmk_action_t *init_action, const pcmk_action_t *action, pcmk__related_action_t *input)
G_GNUC_INTERNAL void pcmk__order_remote_connection_actions(pcmk_scheduler_t *scheduler)
pcmk_scheduler_t * scheduler
G_GNUC_INTERNAL void pcmk__apply_orderings(pcmk_scheduler_t *sched)
G_GNUC_INTERNAL void pcmk__add_this_with_list(GList **list, GList *addition, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__with_group_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
G_GNUC_INTERNAL bool pcmk__node_unfenced(const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__substitute_remote_addr(pcmk_resource_t *rsc, GHashTable *params)
G_GNUC_INTERNAL void pcmk__schedule_probes(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__output_bundle_actions(pcmk_resource_t *rsc)
xmlNode * input
G_GNUC_INTERNAL void pcmk__clone_shutdown_lock(pcmk_resource_t *rsc)
Synthetic cluster events that can be injected into the cluster for running simulations.
Definition: pacemaker.h:50
G_GNUC_INTERNAL GList * pcmk__this_with_colocations(const pcmk_resource_t *rsc)
const char * pcmk__node_attr(const pcmk_node_t *node, const char *name, const char *target, enum pcmk__rsc_node node_type)
Definition: attrs.c:118
This structure contains everything that makes up a single output formatter.
Definition: tags.h:29
G_GNUC_INTERNAL void pcmk__deduplicate_action_inputs(pcmk_action_t *action)
pcmk__coloc_select
G_GNUC_INTERNAL uint32_t pcmk__bundle_action_flags(pcmk_action_t *action, const pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__clone_add_utilization(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
G_GNUC_INTERNAL void pcmk__group_create_actions(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__promotable_restart_ordering(pcmk_resource_t *rsc)
G_GNUC_INTERNAL pcmk_node_t * pcmk__group_assign(pcmk_resource_t *rsc, const pcmk_node_t *prefer, bool stop_if_fail)
G_GNUC_INTERNAL void pcmk__primitive_shutdown_lock(pcmk_resource_t *rsc)
G_GNUC_INTERNAL uint32_t pcmk__group_update_ordered_actions(pcmk_action_t *first, pcmk_action_t *then, const pcmk_node_t *node, uint32_t flags, uint32_t filter, uint32_t type, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__order_vs_fence(pcmk_action_t *stonith_op, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL bool pcmk__probe_rsc_on_node(pcmk_resource_t *rsc, pcmk_node_t *node)
uint32_t(* update_ordered_actions)(pcmk_action_t *first, pcmk_action_t *then, const pcmk_node_t *node, uint32_t flags, uint32_t filter, uint32_t type, pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL GList * pcmk__sort_nodes(GList *nodes, pcmk_node_t *active_node)
G_GNUC_INTERNAL void pcmk__fence_guest(pcmk_node_t *node)
void pcmk__order_migration_equivalents(pcmk__action_relation_t *order)
G_GNUC_INTERNAL uint32_t pcmk__primitive_action_flags(pcmk_action_t *action, const pcmk_node_t *node)
G_GNUC_INTERNAL bool pcmk__check_action_config(pcmk_resource_t *rsc, pcmk_node_t *node, const xmlNode *xml_op)
pcmk_resource_t * pe__bundled_resource(const pcmk_resource_t *rsc)
Definition: bundle.c:111
G_GNUC_INTERNAL xmlNode * pcmk__inject_action_result(xmlNode *cib_resource, lrmd_event_data_t *op, int target_rc)
G_GNUC_INTERNAL void pcmk__new_colocation(const char *id, const char *node_attr, int score, pcmk_resource_t *dependent, pcmk_resource_t *primary, const char *dependent_role, const char *primary_role, uint32_t flags)
G_GNUC_INTERNAL uint32_t pcmk__clone_action_flags(pcmk_action_t *action, const pcmk_node_t *node)
G_GNUC_INTERNAL xmlNode * pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node, const char *resource, const char *lrm_name, const char *rclass, const char *rtype, const char *rprovider)
G_GNUC_INTERNAL void pcmk__order_stops_before_shutdown(pcmk_node_t *node, pcmk_action_t *shutdown_op)
Location constraint object.
pcmk_node_t node1
G_GNUC_INTERNAL uint32_t pcmk__instance_update_ordered_actions(pcmk_action_t *first, pcmk_action_t *then, const pcmk_node_t *node, uint32_t flags, uint32_t filter, uint32_t type, pcmk_scheduler_t *scheduler)
Resource agent executor events.
G_GNUC_INTERNAL xmlNode * pcmk__expand_tags_in_sets(xmlNode *xml_obj, const pcmk_scheduler_t *scheduler)
void(* add_utilization)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
G_GNUC_INTERNAL void pcmk__group_add_utilization(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
int(* apply_coloc_score)(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
void pcmk__abort_dangling_migration(void *data, void *user_data)
G_GNUC_INTERNAL void pcmk__bundle_create_actions(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__create_internal_constraints(pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL bool pcmk__clone_create_probe(pcmk_resource_t *rsc, pcmk_node_t *node)
G_GNUC_INTERNAL void pcmk__colocation_intersect_nodes(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, const GList *primary_nodes, bool merge_scores)
uint64_t flags
Definition: remote.c:215
pcmk__coloc_flags
G_GNUC_INTERNAL bool pcmk__is_failed_remote_node(const pcmk_node_t *node)
G_GNUC_INTERNAL bool pcmk__colocation_has_influence(const pcmk__colocation_t *colocation, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__primitive_internal_constraints(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__group_internal_constraints(pcmk_resource_t *rsc)