pacemaker  2.1.8-3980678f03
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 
610 static inline bool
611 pcmk__colocation_has_influence(const pcmk__colocation_t *colocation,
612  const pcmk_resource_t *rsc)
613 {
614  if (rsc == NULL) {
615  rsc = colocation->primary;
616  }
617 
618  /* A bundle replica colocates its remote connection with its container,
619  * using a finite score so that the container can run on Pacemaker Remote
620  * nodes.
621  *
622  * Moving a connection is lightweight and does not interrupt the service,
623  * while moving a container is heavyweight and does interrupt the service,
624  * so don't move a clean, active container based solely on the preferences
625  * of its connection.
626  *
627  * This also avoids problematic scenarios where two containers want to
628  * perpetually swap places.
629  */
630  if (pcmk_is_set(colocation->dependent->flags,
633  && pcmk__list_of_1(rsc->running_on)) {
634  return false;
635  }
636 
637  /* The dependent in a colocation influences the primary's location
638  * if the PCMK_XA_INFLUENCE option is true or the primary is not yet active.
639  */
640  return pcmk_is_set(colocation->flags, pcmk__coloc_influence)
641  || (rsc->running_on == NULL);
642 }
643 
644 
645 // Ordering constraints (pcmk_sched_ordering.c)
646 
647 G_GNUC_INTERNAL
648 void pcmk__new_ordering(pcmk_resource_t *first_rsc, char *first_task,
649  pcmk_action_t *first_action, pcmk_resource_t *then_rsc,
650  char *then_task, pcmk_action_t *then_action,
651  uint32_t flags, pcmk_scheduler_t *sched);
652 
653 G_GNUC_INTERNAL
654 void pcmk__unpack_ordering(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
655 
656 G_GNUC_INTERNAL
658 
659 G_GNUC_INTERNAL
661  pcmk_action_t *shutdown_op);
662 
663 G_GNUC_INTERNAL
665 
666 G_GNUC_INTERNAL
667 void pcmk__order_after_each(pcmk_action_t *after, GList *list);
668 
669 
680 #define pcmk__order_resource_actions(first_rsc, first_task, \
681  then_rsc, then_task, flags) \
682  pcmk__new_ordering((first_rsc), \
683  pcmk__op_key((first_rsc)->id, (first_task), 0), \
684  NULL, \
685  (then_rsc), \
686  pcmk__op_key((then_rsc)->id, (then_task), 0), \
687  NULL, (flags), (first_rsc)->cluster)
688 
689 #define pcmk__order_starts(rsc1, rsc2, flags) \
690  pcmk__order_resource_actions((rsc1), PCMK_ACTION_START, \
691  (rsc2), PCMK_ACTION_START, (flags))
692 
693 #define pcmk__order_stops(rsc1, rsc2, flags) \
694  pcmk__order_resource_actions((rsc1), PCMK_ACTION_STOP, \
695  (rsc2), PCMK_ACTION_STOP, (flags))
696 
697 
698 // Ticket constraints (pcmk_sched_tickets.c)
699 
700 G_GNUC_INTERNAL
701 void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
702 
703 
704 // Promotable clone resources (pcmk_sched_promotable.c)
705 
706 G_GNUC_INTERNAL
708 
709 G_GNUC_INTERNAL
711 
712 G_GNUC_INTERNAL
714 
715 G_GNUC_INTERNAL
717 
718 G_GNUC_INTERNAL
720 
721 G_GNUC_INTERNAL
723 
724 G_GNUC_INTERNAL
726  pcmk_resource_t *dependent,
727  const pcmk__colocation_t
728  *colocation);
729 
730 G_GNUC_INTERNAL
732  pcmk_resource_t *dependent,
733  const pcmk__colocation_t
734  *colocation);
735 
736 
737 // Pacemaker Remote nodes (pcmk_sched_remote.c)
738 
739 G_GNUC_INTERNAL
740 bool pcmk__is_failed_remote_node(const pcmk_node_t *node);
741 
742 G_GNUC_INTERNAL
744 
745 G_GNUC_INTERNAL
747  const pcmk_node_t *node);
748 
749 G_GNUC_INTERNAL
751 
752 G_GNUC_INTERNAL
753 void pcmk__substitute_remote_addr(pcmk_resource_t *rsc, GHashTable *params);
754 
755 G_GNUC_INTERNAL
756 void pcmk__add_guest_meta_to_xml(xmlNode *args_xml,
757  const pcmk_action_t *action);
758 
759 
760 // Primitives (pcmk_sched_primitive.c)
761 
762 G_GNUC_INTERNAL
764  const pcmk_node_t *prefer,
765  bool stop_if_fail);
766 
767 G_GNUC_INTERNAL
769 
770 G_GNUC_INTERNAL
772 
773 G_GNUC_INTERNAL
775  const pcmk_node_t *node);
776 
777 G_GNUC_INTERNAL
779  const pcmk_resource_t *primary,
780  const pcmk__colocation_t *colocation,
781  bool for_dependent);
782 
783 G_GNUC_INTERNAL
785  const pcmk_resource_t *orig_rsc,
786  GList **list);
787 
788 G_GNUC_INTERNAL
790  const pcmk_resource_t *orig_rsc,
791  GList **list);
792 
793 G_GNUC_INTERNAL
794 void pcmk__schedule_cleanup(pcmk_resource_t *rsc, const pcmk_node_t *node,
795  bool optional);
796 
797 G_GNUC_INTERNAL
798 void pcmk__primitive_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
799 
800 G_GNUC_INTERNAL
802  const pcmk_resource_t *orig_rsc,
803  GList *all_rscs, GHashTable *utilization);
804 
805 G_GNUC_INTERNAL
807 
808 
809 // Groups (pcmk_sched_group.c)
810 
811 G_GNUC_INTERNAL
813  bool stop_if_fail);
814 
815 G_GNUC_INTERNAL
817 
818 G_GNUC_INTERNAL
820 
821 G_GNUC_INTERNAL
823  const pcmk_resource_t *primary,
824  const pcmk__colocation_t *colocation,
825  bool for_dependent);
826 
827 G_GNUC_INTERNAL
829  const pcmk_resource_t *orig_rsc,
830  GList **list);
831 
832 G_GNUC_INTERNAL
834  const pcmk_resource_t *orig_rsc,
835  GList **list);
836 
837 G_GNUC_INTERNAL
839  const pcmk_resource_t *target_rsc,
840  const char *log_id,
841  GHashTable **nodes,
842  const pcmk__colocation_t *colocation,
843  float factor, uint32_t flags);
844 
845 G_GNUC_INTERNAL
847  pcmk__location_t *location);
848 
849 G_GNUC_INTERNAL
851  const pcmk_node_t *node);
852 
853 G_GNUC_INTERNAL
855  pcmk_action_t *then,
856  const pcmk_node_t *node,
857  uint32_t flags, uint32_t filter,
858  uint32_t type,
860 
861 G_GNUC_INTERNAL
863  const pcmk_resource_t *orig_rsc,
864  GList *colocated_rscs);
865 
866 G_GNUC_INTERNAL
868  const pcmk_resource_t *orig_rsc,
869  GList *all_rscs, GHashTable *utilization);
870 
871 G_GNUC_INTERNAL
873 
874 
875 // Clones (pcmk_sched_clone.c)
876 
877 G_GNUC_INTERNAL
879  bool stop_if_fail);
880 
881 G_GNUC_INTERNAL
883 
884 G_GNUC_INTERNAL
886 
887 G_GNUC_INTERNAL
889 
890 G_GNUC_INTERNAL
892  const pcmk_resource_t *primary,
893  const pcmk__colocation_t *colocation,
894  bool for_dependent);
895 
896 G_GNUC_INTERNAL
898  const pcmk_resource_t *orig_rsc,
899  GList **list);
900 
901 G_GNUC_INTERNAL
903  const pcmk_resource_t *orig_rsc,
904  GList **list);
905 
906 G_GNUC_INTERNAL
908  pcmk__location_t *constraint);
909 
910 G_GNUC_INTERNAL
912  const pcmk_node_t *node);
913 
914 G_GNUC_INTERNAL
916 
917 G_GNUC_INTERNAL
918 void pcmk__clone_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
919 
920 G_GNUC_INTERNAL
922  const pcmk_resource_t *orig_rsc,
923  GList *all_rscs, GHashTable *utilization);
924 
925 G_GNUC_INTERNAL
927 
928 // Bundles (pcmk_sched_bundle.c)
929 
930 G_GNUC_INTERNAL
932  const pcmk_node_t *prefer, bool stop_if_fail);
933 
934 G_GNUC_INTERNAL
936 
937 G_GNUC_INTERNAL
939 
940 G_GNUC_INTERNAL
942 
943 G_GNUC_INTERNAL
945  const pcmk_resource_t *primary,
946  const pcmk__colocation_t *colocation,
947  bool for_dependent);
948 
949 G_GNUC_INTERNAL
951  const pcmk_resource_t *orig_rsc,
952  GList **list);
953 
954 G_GNUC_INTERNAL
956  const pcmk_resource_t *orig_rsc,
957  GList **list);
958 
959 G_GNUC_INTERNAL
961  pcmk__location_t *constraint);
962 
963 G_GNUC_INTERNAL
965  const pcmk_node_t *node);
966 
967 G_GNUC_INTERNAL
969 
970 G_GNUC_INTERNAL
972 
973 G_GNUC_INTERNAL
975  const pcmk_resource_t *orig_rsc,
976  GList *all_rscs, GHashTable *utilization);
977 
978 G_GNUC_INTERNAL
980 
981 
982 // Clone instances or bundle replica containers (pcmk_sched_instances.c)
983 
984 G_GNUC_INTERNAL
985 void pcmk__assign_instances(pcmk_resource_t *collective, GList *instances,
986  int max_total, int max_per_node);
987 
988 G_GNUC_INTERNAL
989 void pcmk__create_instance_actions(pcmk_resource_t *rsc, GList *instances);
990 
991 G_GNUC_INTERNAL
992 bool pcmk__instance_matches(const pcmk_resource_t *instance,
993  const pcmk_node_t *node, enum rsc_role_e role,
994  bool current);
995 
996 G_GNUC_INTERNAL
998  const pcmk_resource_t *rsc,
999  enum rsc_role_e role,
1000  bool current);
1001 
1002 G_GNUC_INTERNAL
1004  pcmk_action_t *then,
1005  const pcmk_node_t *node,
1006  uint32_t flags, uint32_t filter,
1007  uint32_t type,
1009 
1010 G_GNUC_INTERNAL
1012  const GList *instances,
1013  const pcmk_node_t *node);
1014 
1015 
1016 // Injections (pcmk_injections.c)
1017 
1018 G_GNUC_INTERNAL
1019 xmlNode *pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid);
1020 
1021 G_GNUC_INTERNAL
1022 xmlNode *pcmk__inject_node_state_change(cib_t *cib_conn, const char *node,
1023  bool up);
1024 
1025 G_GNUC_INTERNAL
1026 xmlNode *pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node,
1027  const char *resource,
1028  const char *lrm_name,
1029  const char *rclass,
1030  const char *rtype,
1031  const char *rprovider);
1032 
1033 G_GNUC_INTERNAL
1034 void pcmk__inject_failcount(pcmk__output_t *out, cib_t *cib_conn,
1035  xmlNode *cib_node, const char *resource,
1036  const char *task, guint interval_ms, int rc);
1037 
1038 G_GNUC_INTERNAL
1039 xmlNode *pcmk__inject_action_result(xmlNode *cib_resource,
1040  lrmd_event_data_t *op, int target_rc);
1041 
1042 
1043 // Nodes (pcmk_sched_nodes.c)
1044 
1045 G_GNUC_INTERNAL
1046 bool pcmk__node_available(const pcmk_node_t *node, bool consider_score,
1047  bool consider_guest);
1048 
1049 G_GNUC_INTERNAL
1050 bool pcmk__any_node_available(GHashTable *nodes);
1051 
1052 G_GNUC_INTERNAL
1053 GHashTable *pcmk__copy_node_table(GHashTable *nodes);
1054 
1055 G_GNUC_INTERNAL
1056 void pcmk__copy_node_tables(const pcmk_resource_t *rsc, GHashTable **copy);
1057 
1058 G_GNUC_INTERNAL
1059 void pcmk__restore_node_tables(pcmk_resource_t *rsc, GHashTable *backup);
1060 
1061 G_GNUC_INTERNAL
1062 GList *pcmk__sort_nodes(GList *nodes, pcmk_node_t *active_node);
1063 
1064 G_GNUC_INTERNAL
1066 
1067 G_GNUC_INTERNAL
1069  const pcmk_node_t *node);
1070 
1071 
1072 // Functions applying to more than one variant (pcmk_sched_resource.c)
1073 
1074 G_GNUC_INTERNAL
1076 
1077 G_GNUC_INTERNAL
1079  const xmlNode *rsc_entry, bool active_on_node);
1080 
1081 G_GNUC_INTERNAL
1082 GList *pcmk__rscs_matching_id(const char *id,
1083  const pcmk_scheduler_t *scheduler);
1084 
1085 G_GNUC_INTERNAL
1086 GList *pcmk__colocated_resources(const pcmk_resource_t *rsc,
1087  const pcmk_resource_t *orig_rsc,
1088  GList *colocated_rscs);
1089 
1090 G_GNUC_INTERNAL
1091 void pcmk__noop_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
1092 
1093 G_GNUC_INTERNAL
1095 
1096 G_GNUC_INTERNAL
1097 bool pcmk__assign_resource(pcmk_resource_t *rsc, pcmk_node_t *node, bool force,
1098  bool stop_if_fail);
1099 
1100 G_GNUC_INTERNAL
1102 
1103 G_GNUC_INTERNAL
1104 bool pcmk__threshold_reached(pcmk_resource_t *rsc, const pcmk_node_t *node,
1105  pcmk_resource_t **failed);
1106 
1107 G_GNUC_INTERNAL
1109 
1110 G_GNUC_INTERNAL
1111 gint pcmk__cmp_instance(gconstpointer a, gconstpointer b);
1112 
1113 G_GNUC_INTERNAL
1114 gint pcmk__cmp_instance_number(gconstpointer a, gconstpointer b);
1115 
1116 
1117 // Functions related to probes (pcmk_sched_probes.c)
1118 
1119 G_GNUC_INTERNAL
1121 
1122 G_GNUC_INTERNAL
1124 
1125 G_GNUC_INTERNAL
1126 bool pcmk__probe_resource_list(GList *rscs, pcmk_node_t *node);
1127 
1128 G_GNUC_INTERNAL
1130 
1131 
1132 // Functions related to live migration (pcmk_sched_migration.c)
1133 
1135  const pcmk_node_t *current);
1136 
1137 void pcmk__abort_dangling_migration(void *data, void *user_data);
1138 
1139 bool pcmk__rsc_can_migrate(const pcmk_resource_t *rsc,
1140  const pcmk_node_t *current);
1141 
1143 
1144 
1145 // Functions related to node utilization (pcmk_sched_utilization.c)
1146 
1147 G_GNUC_INTERNAL
1149  const pcmk_node_t *node2);
1150 
1151 G_GNUC_INTERNAL
1152 void pcmk__consume_node_capacity(GHashTable *current_utilization,
1153  const pcmk_resource_t *rsc);
1154 
1155 G_GNUC_INTERNAL
1156 void pcmk__release_node_capacity(GHashTable *current_utilization,
1157  const pcmk_resource_t *rsc);
1158 
1159 G_GNUC_INTERNAL
1161 
1162 G_GNUC_INTERNAL
1164  const GList *allowed_nodes);
1165 
1166 G_GNUC_INTERNAL
1167 void pcmk__show_node_capacities(const char *desc, pcmk_scheduler_t *scheduler);
1168 
1169 
1170 // Functions related to the scheduler (pcmk_scheduler.c)
1171 
1172 G_GNUC_INTERNAL
1173 int pcmk__init_scheduler(pcmk__output_t *out, xmlNodePtr input, const crm_time_t *date,
1175 
1176 
1177 // General setup functions (pcmk_setup.c)
1178 
1179 G_GNUC_INTERNAL
1181  pcmk_scheduler_t **scheduler, xmlNode **xml);
1182 
1183 #endif // PCMK__LIBPACEMAKER_PRIVATE__H
const pcmk_resource_t * pe__const_top_resource(const pcmk_resource_t *rsc, bool include_bundle)
Definition: complex.c:1032
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)
#define pcmk_is_set(g, f)
Convenience alias for pcmk_all_flags_set(), to check single flag.
Definition: util.h:98
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)
unsigned long long flags
Definition: resources.h:428
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)
pcmk_resource_t * primary
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)
pcmk_resource_t * dependent
G_GNUC_INTERNAL void pcmk__primitive_shutdown_lock(pcmk_resource_t *rsc)
GList * running_on
Definition: resources.h:456
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 void pcmk__primitive_internal_constraints(pcmk_resource_t *rsc)
G_GNUC_INTERNAL void pcmk__group_internal_constraints(pcmk_resource_t *rsc)