pacemaker  3.0.0-d8340737c4
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__PACEMAKER_LIBPACEMAKER_PRIVATE__H
11 #define PCMK__PACEMAKER_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 <stdio.h> // NULL
18 #include <stdint.h> // uint32_t
19 #include <stdbool.h> // bool, false
20 #include <glib.h> // guint, gpointer, GList, GHashTable
21 #include <libxml/tree.h> // xmlNode
22 
23 #include <crm/common/scheduler.h> // pcmk_action_t, pcmk_node_t, etc.
24 #include <crm/common/scheduler_internal.h> // pcmk__location_t, etc.
25 #include <crm/cib.h> // cib_t
26 #include <crm/lrmd_events.h> // lrmd_event_data_t
27 #include <crm/pengine/internal.h> // pe__const_top_resource(), etc.
28 #include <pacemaker.h> // pcmk_injections_t
29 #include <pacemaker-internal.h> // pcmk__colocation_t
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 // Colocation flags
38 
39  // Primary is affected even if already active
40  pcmk__coloc_influence = (1U << 0),
41 
42  // Colocation was explicitly configured in CIB
43  pcmk__coloc_explicit = (1U << 1),
44 };
45 
46 // Flags to modify the behavior of add_colocated_node_scores()
48  // With no other flags, apply all "with this" colocations
50 
51  // Apply "this with" colocations instead of "with this" colocations
53 
54  // Apply only colocations with non-negative scores
56 
57  // Apply only colocations with at least one matching node
59 };
60 
61 // Flags the update_ordered_actions() method can return
63  pcmk__updated_none = 0, // Nothing changed
64  pcmk__updated_first = (1 << 0), // First action was updated
65  pcmk__updated_then = (1 << 1), // Then action was updated
66 };
67 
68 #define pcmk__set_updated_flags(au_flags, action, flags_to_set) do { \
69  au_flags = pcmk__set_flags_as(__func__, __LINE__, \
70  LOG_TRACE, "Action update", \
71  (action)->uuid, au_flags, \
72  (flags_to_set), #flags_to_set); \
73  } while (0)
74 
75 #define pcmk__clear_updated_flags(au_flags, action, flags_to_clear) do { \
76  au_flags = pcmk__clear_flags_as(__func__, __LINE__, \
77  LOG_TRACE, "Action update", \
78  (action)->uuid, au_flags, \
79  (flags_to_clear), #flags_to_clear); \
80  } while (0)
81 
82 // Resource assignment methods
104  pcmk_node_t *(*assign)(pcmk_resource_t *rsc, const pcmk_node_t *prefer,
105  bool stop_if_fail);
106 
114 
125 
133 
150  const pcmk_resource_t *primary,
151  const pcmk__colocation_t *colocation,
152  bool for_dependent);
153 
171  GList *(*colocated_resources)(const pcmk_resource_t *rsc,
172  const pcmk_resource_t *orig_rsc,
173  GList *colocated_rscs);
174 
193  const pcmk_resource_t *orig_rsc,
194  GList **list);
195 
215  const pcmk_resource_t *orig_rsc,
216  GList **list);
217 
248  const pcmk_resource_t *target_rsc,
249  const char *log_id, GHashTable **nodes,
250  const pcmk__colocation_t *colocation,
251  float factor, uint32_t flags);
252 
261 
274  uint32_t (*action_flags)(pcmk_action_t *action, const pcmk_node_t *node);
275 
301  pcmk_action_t *then,
302  const pcmk_node_t *node, uint32_t flags,
303  uint32_t filter, uint32_t type,
305 
313 
321 
332  void (*add_graph_meta)(const pcmk_resource_t *rsc, xmlNode *xml);
333 
349  void (*add_utilization)(const pcmk_resource_t *rsc,
350  const pcmk_resource_t *orig_rsc, GList *all_rscs,
351  GHashTable *utilization);
352 
360 };
361 
362 // Actions (pcmk_sched_actions.c)
363 
364 G_GNUC_INTERNAL
367 
368 G_GNUC_INTERNAL
370  const pcmk_node_t *node, uint32_t flags,
371  uint32_t filter, uint32_t type,
373 
374 G_GNUC_INTERNAL
375 void pcmk__log_action(const char *pre_text, const pcmk_action_t *action,
376  bool details);
377 
378 G_GNUC_INTERNAL
380  guint interval_ms,
381  const pcmk_node_t *node);
382 
383 G_GNUC_INTERNAL
385 
386 G_GNUC_INTERNAL
388 
389 G_GNUC_INTERNAL
391 
392 G_GNUC_INTERNAL
394 
395 G_GNUC_INTERNAL
397  const xmlNode *xml_op);
398 
399 G_GNUC_INTERNAL
401 
402 
403 // Recurring actions (pcmk_sched_recurring.c)
404 
405 G_GNUC_INTERNAL
407 
408 G_GNUC_INTERNAL
409 void pcmk__schedule_cancel(pcmk_resource_t *rsc, const char *call_id,
410  const char *task, guint interval_ms,
411  const pcmk_node_t *node, const char *reason);
412 
413 G_GNUC_INTERNAL
414 void pcmk__reschedule_recurring(pcmk_resource_t *rsc, const char *task,
415  guint interval_ms, pcmk_node_t *node);
416 
417 G_GNUC_INTERNAL
419 
420 
421 // Producing transition graphs (pcmk_graph_producer.c)
422 
423 G_GNUC_INTERNAL
424 bool pcmk__graph_has_loop(const pcmk_action_t *init_action,
425  const pcmk_action_t *action,
427 
428 G_GNUC_INTERNAL
430 
431 G_GNUC_INTERNAL
433 
434 
435 // Fencing (pcmk_sched_fencing.c)
436 
437 G_GNUC_INTERNAL
438 void pcmk__order_vs_fence(pcmk_action_t *stonith_op,
440 
441 G_GNUC_INTERNAL
442 void pcmk__order_vs_unfence(const pcmk_resource_t *rsc, pcmk_node_t *node,
444  enum pcmk__action_relation_flags order);
445 
446 G_GNUC_INTERNAL
447 void pcmk__fence_guest(pcmk_node_t *node);
448 
449 G_GNUC_INTERNAL
450 bool pcmk__node_unfenced(const pcmk_node_t *node);
451 
452 G_GNUC_INTERNAL
453 void pcmk__order_restart_vs_unfence(gpointer data, gpointer user_data);
454 
455 
456 // Injected scheduler inputs (pcmk_sched_injections.c)
457 
458 G_GNUC_INTERNAL
460  const pcmk_injections_t *injections);
461 
462 
463 // Constraints of any type (pcmk_sched_constraints.c)
464 
465 G_GNUC_INTERNAL
467  const char *id);
468 
469 G_GNUC_INTERNAL
470 int pcmk__parse_constraint_role(const char *id, const char *role_spec,
471  enum rsc_role_e *role);
472 
473 G_GNUC_INTERNAL
474 xmlNode *pcmk__expand_tags_in_sets(xmlNode *xml_obj,
475  const pcmk_scheduler_t *scheduler);
476 
477 G_GNUC_INTERNAL
479  const char *id, pcmk_resource_t **rsc,
480  pcmk__idref_t **tag);
481 
482 G_GNUC_INTERNAL
483 bool pcmk__tag_to_set(xmlNode *xml_obj, xmlNode **rsc_set, const char *attr,
484  bool convert_rsc, const pcmk_scheduler_t *scheduler);
485 
486 G_GNUC_INTERNAL
488 
489 
490 // Location constraints
491 
492 G_GNUC_INTERNAL
493 void pcmk__unpack_location(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
494 
495 G_GNUC_INTERNAL
497  int node_score, const char *discover_mode,
498  pcmk_node_t *foo_node);
499 
500 G_GNUC_INTERNAL
502 
503 G_GNUC_INTERNAL
505 
506 
507 // Colocation constraints (pcmk_sched_colocation.c)
508 
513 };
514 
515 G_GNUC_INTERNAL
516 const char *pcmk__colocation_node_attr(const pcmk_node_t *node,
517  const char *attr,
518  const pcmk_resource_t *rsc);
519 
520 G_GNUC_INTERNAL
522  *dependent,
523  const pcmk_resource_t
524  *primary,
525  const pcmk__colocation_t
526  *colocation,
527  bool preview);
528 
529 G_GNUC_INTERNAL
531  const pcmk_resource_t *primary,
532  const pcmk__colocation_t *colocation);
533 
534 G_GNUC_INTERNAL
536  const pcmk_resource_t *primary,
537  const pcmk__colocation_t *colocation);
538 
539 G_GNUC_INTERNAL
541  const pcmk_resource_t *target_rsc,
542  const char *log_id, GHashTable **nodes,
543  const pcmk__colocation_t *colocation,
544  float factor, uint32_t flags);
545 
546 G_GNUC_INTERNAL
547 void pcmk__add_dependent_scores(gpointer data, gpointer user_data);
548 
549 G_GNUC_INTERNAL
551  const pcmk_resource_t *primary,
552  const pcmk__colocation_t *colocation,
553  const GList *primary_nodes,
554  bool merge_scores);
555 
556 G_GNUC_INTERNAL
557 void pcmk__unpack_colocation(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
558 
559 G_GNUC_INTERNAL
560 void pcmk__add_this_with(GList **list, const pcmk__colocation_t *colocation,
561  const pcmk_resource_t *rsc);
562 
563 G_GNUC_INTERNAL
564 void pcmk__add_this_with_list(GList **list, GList *addition,
565  const pcmk_resource_t *rsc);
566 
567 G_GNUC_INTERNAL
568 void pcmk__add_with_this(GList **list, const pcmk__colocation_t *colocation,
569  const pcmk_resource_t *rsc);
570 
571 G_GNUC_INTERNAL
572 void pcmk__add_with_this_list(GList **list, GList *addition,
573  const pcmk_resource_t *rsc);
574 
575 G_GNUC_INTERNAL
577 
578 G_GNUC_INTERNAL
580 
581 G_GNUC_INTERNAL
582 void pcmk__new_colocation(const char *id, const char *node_attr, int score,
583  pcmk_resource_t *dependent, pcmk_resource_t *primary,
584  const char *dependent_role_spec,
585  const char *primary_role_spec, uint32_t flags);
586 
587 G_GNUC_INTERNAL
589 
590 G_GNUC_INTERNAL
592  const pcmk_resource_t *rsc);
593 
594 
595 // Ordering constraints (pcmk_sched_ordering.c)
596 
597 G_GNUC_INTERNAL
598 void pcmk__new_ordering(pcmk_resource_t *first_rsc, char *first_task,
599  pcmk_action_t *first_action, pcmk_resource_t *then_rsc,
600  char *then_task, pcmk_action_t *then_action,
601  uint32_t flags, pcmk_scheduler_t *sched);
602 
603 G_GNUC_INTERNAL
604 void pcmk__unpack_ordering(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
605 
606 G_GNUC_INTERNAL
608 
609 G_GNUC_INTERNAL
611  pcmk_action_t *shutdown_op);
612 
613 G_GNUC_INTERNAL
615 
616 G_GNUC_INTERNAL
617 void pcmk__order_after_each(pcmk_action_t *after, GList *list);
618 
619 
630 #define pcmk__order_resource_actions(first_rsc, first_task, \
631  then_rsc, then_task, flags) \
632  pcmk__new_ordering((first_rsc), \
633  pcmk__op_key((first_rsc)->id, (first_task), 0), \
634  NULL, \
635  (then_rsc), \
636  pcmk__op_key((then_rsc)->id, (then_task), 0), \
637  NULL, (flags), (first_rsc)->priv->scheduler)
638 
639 #define pcmk__order_starts(rsc1, rsc2, flags) \
640  pcmk__order_resource_actions((rsc1), PCMK_ACTION_START, \
641  (rsc2), PCMK_ACTION_START, (flags))
642 
643 #define pcmk__order_stops(rsc1, rsc2, flags) \
644  pcmk__order_resource_actions((rsc1), PCMK_ACTION_STOP, \
645  (rsc2), PCMK_ACTION_STOP, (flags))
646 
647 
648 // Ticket constraints (pcmk_sched_tickets.c)
649 
650 G_GNUC_INTERNAL
651 void pcmk__unpack_rsc_ticket(xmlNode *xml_obj, pcmk_scheduler_t *scheduler);
652 
653 
654 // Promotable clone resources (pcmk_sched_promotable.c)
655 
656 G_GNUC_INTERNAL
658 
659 G_GNUC_INTERNAL
661 
662 G_GNUC_INTERNAL
664 
665 G_GNUC_INTERNAL
667 
668 G_GNUC_INTERNAL
670 
671 G_GNUC_INTERNAL
673 
674 G_GNUC_INTERNAL
676  pcmk_resource_t *dependent,
677  const pcmk__colocation_t
678  *colocation);
679 
680 G_GNUC_INTERNAL
682  pcmk_resource_t *dependent,
683  const pcmk__colocation_t
684  *colocation);
685 
686 
687 // Pacemaker Remote nodes (pcmk_sched_remote.c)
688 
689 G_GNUC_INTERNAL
690 bool pcmk__is_failed_remote_node(const pcmk_node_t *node);
691 
692 G_GNUC_INTERNAL
694 
695 G_GNUC_INTERNAL
697  const pcmk_node_t *node);
698 
699 G_GNUC_INTERNAL
701 
702 G_GNUC_INTERNAL
703 void pcmk__substitute_remote_addr(pcmk_resource_t *rsc, GHashTable *params);
704 
705 G_GNUC_INTERNAL
706 void pcmk__add_guest_meta_to_xml(xmlNode *args_xml,
707  const pcmk_action_t *action);
708 
709 
710 // Primitives (pcmk_sched_primitive.c)
711 
712 G_GNUC_INTERNAL
714  const pcmk_node_t *prefer,
715  bool stop_if_fail);
716 
717 G_GNUC_INTERNAL
719 
720 G_GNUC_INTERNAL
722 
723 G_GNUC_INTERNAL
725  const pcmk_node_t *node);
726 
727 G_GNUC_INTERNAL
729  const pcmk_resource_t *primary,
730  const pcmk__colocation_t *colocation,
731  bool for_dependent);
732 
733 G_GNUC_INTERNAL
735  const pcmk_resource_t *orig_rsc,
736  GList **list);
737 
738 G_GNUC_INTERNAL
740  const pcmk_resource_t *orig_rsc,
741  GList **list);
742 
743 G_GNUC_INTERNAL
744 void pcmk__schedule_cleanup(pcmk_resource_t *rsc, const pcmk_node_t *node,
745  bool optional);
746 
747 G_GNUC_INTERNAL
748 void pcmk__primitive_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
749 
750 G_GNUC_INTERNAL
752  const pcmk_resource_t *orig_rsc,
753  GList *all_rscs, GHashTable *utilization);
754 
755 G_GNUC_INTERNAL
757 
758 
759 // Groups (pcmk_sched_group.c)
760 
761 G_GNUC_INTERNAL
763  bool stop_if_fail);
764 
765 G_GNUC_INTERNAL
767 
768 G_GNUC_INTERNAL
770 
771 G_GNUC_INTERNAL
773  const pcmk_resource_t *primary,
774  const pcmk__colocation_t *colocation,
775  bool for_dependent);
776 
777 G_GNUC_INTERNAL
779  const pcmk_resource_t *orig_rsc,
780  GList **list);
781 
782 G_GNUC_INTERNAL
784  const pcmk_resource_t *orig_rsc,
785  GList **list);
786 
787 G_GNUC_INTERNAL
789  const pcmk_resource_t *target_rsc,
790  const char *log_id,
791  GHashTable **nodes,
792  const pcmk__colocation_t *colocation,
793  float factor, uint32_t flags);
794 
795 G_GNUC_INTERNAL
797  pcmk__location_t *location);
798 
799 G_GNUC_INTERNAL
801  const pcmk_node_t *node);
802 
803 G_GNUC_INTERNAL
805  pcmk_action_t *then,
806  const pcmk_node_t *node,
807  uint32_t flags, uint32_t filter,
808  uint32_t type,
810 
811 G_GNUC_INTERNAL
813  const pcmk_resource_t *orig_rsc,
814  GList *colocated_rscs);
815 
816 G_GNUC_INTERNAL
818  const pcmk_resource_t *orig_rsc,
819  GList *all_rscs, GHashTable *utilization);
820 
821 G_GNUC_INTERNAL
823 
824 
825 // Clones (pcmk_sched_clone.c)
826 
827 G_GNUC_INTERNAL
829  bool stop_if_fail);
830 
831 G_GNUC_INTERNAL
833 
834 G_GNUC_INTERNAL
836 
837 G_GNUC_INTERNAL
839 
840 G_GNUC_INTERNAL
842  const pcmk_resource_t *primary,
843  const pcmk__colocation_t *colocation,
844  bool for_dependent);
845 
846 G_GNUC_INTERNAL
848  const pcmk_resource_t *orig_rsc,
849  GList **list);
850 
851 G_GNUC_INTERNAL
853  const pcmk_resource_t *orig_rsc,
854  GList **list);
855 
856 G_GNUC_INTERNAL
858  pcmk__location_t *constraint);
859 
860 G_GNUC_INTERNAL
862  const pcmk_node_t *node);
863 
864 G_GNUC_INTERNAL
866 
867 G_GNUC_INTERNAL
868 void pcmk__clone_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
869 
870 G_GNUC_INTERNAL
872  const pcmk_resource_t *orig_rsc,
873  GList *all_rscs, GHashTable *utilization);
874 
875 G_GNUC_INTERNAL
877 
878 // Bundles (pcmk_sched_bundle.c)
879 
880 G_GNUC_INTERNAL
882  const pcmk_node_t *prefer, bool stop_if_fail);
883 
884 G_GNUC_INTERNAL
886 
887 G_GNUC_INTERNAL
889 
890 G_GNUC_INTERNAL
892 
893 G_GNUC_INTERNAL
895  const pcmk_resource_t *primary,
896  const pcmk__colocation_t *colocation,
897  bool for_dependent);
898 
899 G_GNUC_INTERNAL
901  const pcmk_resource_t *orig_rsc,
902  GList **list);
903 
904 G_GNUC_INTERNAL
906  const pcmk_resource_t *orig_rsc,
907  GList **list);
908 
909 G_GNUC_INTERNAL
911  pcmk__location_t *constraint);
912 
913 G_GNUC_INTERNAL
915  const pcmk_node_t *node);
916 
917 G_GNUC_INTERNAL
919 
920 G_GNUC_INTERNAL
922 
923 G_GNUC_INTERNAL
925  const pcmk_resource_t *orig_rsc,
926  GList *all_rscs, GHashTable *utilization);
927 
928 G_GNUC_INTERNAL
930 
931 
932 // Clone instances or bundle replica containers (pcmk_sched_instances.c)
933 
934 G_GNUC_INTERNAL
935 void pcmk__assign_instances(pcmk_resource_t *collective, GList *instances,
936  int max_total, int max_per_node);
937 
938 G_GNUC_INTERNAL
939 void pcmk__create_instance_actions(pcmk_resource_t *rsc, GList *instances);
940 
941 G_GNUC_INTERNAL
942 bool pcmk__instance_matches(const pcmk_resource_t *instance,
943  const pcmk_node_t *node, enum rsc_role_e role,
944  bool current);
945 
946 G_GNUC_INTERNAL
948  const pcmk_resource_t *rsc,
949  enum rsc_role_e role,
950  bool current);
951 
952 G_GNUC_INTERNAL
954  pcmk_action_t *then,
955  const pcmk_node_t *node,
956  uint32_t flags, uint32_t filter,
957  uint32_t type,
959 
960 G_GNUC_INTERNAL
962  const GList *instances,
963  const pcmk_node_t *node);
964 
965 
966 // Injections (pcmk_injections.c)
967 
968 G_GNUC_INTERNAL
969 xmlNode *pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid);
970 
971 G_GNUC_INTERNAL
972 xmlNode *pcmk__inject_node_state_change(cib_t *cib_conn, const char *node,
973  bool up);
974 
975 G_GNUC_INTERNAL
976 xmlNode *pcmk__inject_resource_history(pcmk__output_t *out, xmlNode *cib_node,
977  const char *resource,
978  const char *lrm_name,
979  const char *rclass,
980  const char *rtype,
981  const char *rprovider);
982 
983 G_GNUC_INTERNAL
984 void pcmk__inject_failcount(pcmk__output_t *out, cib_t *cib_conn,
985  xmlNode *cib_node, const char *resource,
986  const char *task, guint interval_ms, int rc,
987  bool infinity);
988 
989 G_GNUC_INTERNAL
990 xmlNode *pcmk__inject_action_result(xmlNode *cib_resource,
991  lrmd_event_data_t *op, const char *node,
992  int target_rc);
993 
994 
995 // Nodes (pcmk_sched_nodes.c)
996 
997 G_GNUC_INTERNAL
998 bool pcmk__node_available(const pcmk_node_t *node, bool consider_score,
999  bool consider_guest);
1000 
1001 G_GNUC_INTERNAL
1002 bool pcmk__any_node_available(GHashTable *nodes);
1003 
1004 G_GNUC_INTERNAL
1005 GHashTable *pcmk__copy_node_table(GHashTable *nodes);
1006 
1007 G_GNUC_INTERNAL
1008 void pcmk__copy_node_tables(const pcmk_resource_t *rsc, GHashTable **copy);
1009 
1010 G_GNUC_INTERNAL
1011 void pcmk__restore_node_tables(pcmk_resource_t *rsc, GHashTable *backup);
1012 
1013 G_GNUC_INTERNAL
1014 GList *pcmk__sort_nodes(GList *nodes, pcmk_node_t *active_node);
1015 
1016 G_GNUC_INTERNAL
1018 
1019 G_GNUC_INTERNAL
1021  const pcmk_node_t *node);
1022 
1023 
1024 // Functions applying to more than one variant (pcmk_sched_resource.c)
1025 
1026 G_GNUC_INTERNAL
1028 
1029 G_GNUC_INTERNAL
1031  const xmlNode *rsc_entry, bool active_on_node);
1032 
1033 G_GNUC_INTERNAL
1034 GList *pcmk__rscs_matching_id(const char *id,
1035  const pcmk_scheduler_t *scheduler);
1036 
1037 G_GNUC_INTERNAL
1038 GList *pcmk__colocated_resources(const pcmk_resource_t *rsc,
1039  const pcmk_resource_t *orig_rsc,
1040  GList *colocated_rscs);
1041 
1042 G_GNUC_INTERNAL
1043 void pcmk__noop_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml);
1044 
1045 G_GNUC_INTERNAL
1047 
1048 G_GNUC_INTERNAL
1049 bool pcmk__assign_resource(pcmk_resource_t *rsc, pcmk_node_t *node, bool force,
1050  bool stop_if_fail);
1051 
1052 G_GNUC_INTERNAL
1054 
1055 G_GNUC_INTERNAL
1056 bool pcmk__threshold_reached(pcmk_resource_t *rsc, const pcmk_node_t *node,
1057  pcmk_resource_t **failed);
1058 
1059 G_GNUC_INTERNAL
1061 
1062 G_GNUC_INTERNAL
1063 gint pcmk__cmp_instance(gconstpointer a, gconstpointer b);
1064 
1065 G_GNUC_INTERNAL
1066 gint pcmk__cmp_instance_number(gconstpointer a, gconstpointer b);
1067 
1068 
1069 // Functions related to probes (pcmk_sched_probes.c)
1070 
1071 G_GNUC_INTERNAL
1073 
1074 G_GNUC_INTERNAL
1076 
1077 G_GNUC_INTERNAL
1078 bool pcmk__probe_resource_list(GList *rscs, pcmk_node_t *node);
1079 
1080 G_GNUC_INTERNAL
1082 
1083 
1084 // Functions related to live migration (pcmk_sched_migration.c)
1085 
1087  const pcmk_node_t *current);
1088 
1089 void pcmk__abort_dangling_migration(void *data, void *user_data);
1090 
1091 bool pcmk__rsc_can_migrate(const pcmk_resource_t *rsc,
1092  const pcmk_node_t *current);
1093 
1095 
1096 
1097 // Functions related to node utilization (pcmk_sched_utilization.c)
1098 
1099 G_GNUC_INTERNAL
1101  const pcmk_node_t *node2);
1102 
1103 G_GNUC_INTERNAL
1104 void pcmk__consume_node_capacity(GHashTable *current_utilization,
1105  const pcmk_resource_t *rsc);
1106 
1107 G_GNUC_INTERNAL
1108 void pcmk__release_node_capacity(GHashTable *current_utilization,
1109  const pcmk_resource_t *rsc);
1110 
1111 G_GNUC_INTERNAL
1113 
1114 G_GNUC_INTERNAL
1116  const GList *allowed_nodes);
1117 
1118 G_GNUC_INTERNAL
1119 void pcmk__show_node_capacities(const char *desc, pcmk_scheduler_t *scheduler);
1120 
1121 
1122 // Functions related to the scheduler (pcmk_scheduler.c)
1123 
1124 G_GNUC_INTERNAL
1125 int pcmk__init_scheduler(pcmk__output_t *out, xmlNodePtr input, const crm_time_t *date,
1127 
1128 
1129 // General setup functions (pcmk_setup.c)
1130 
1131 G_GNUC_INTERNAL
1133  pcmk_scheduler_t **scheduler, xmlNode **xml);
1134 
1135 G_GNUC_INTERNAL
1136 int pcmk__setup_output_fencing(pcmk__output_t **out, stonith_t **st, xmlNode **xml);
1137 
1138 #ifdef __cplusplus
1139 }
1140 #endif
1141 
1142 #endif // PCMK__PACEMAKER_LIBPACEMAKER_PRIVATE__H
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)
G_GNUC_INTERNAL void pcmk__schedule_cleanup(pcmk_resource_t *rsc, const pcmk_node_t *node, bool optional)
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
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)
void(* create_actions)(pcmk_resource_t *rsc)
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, bool infinity)
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
enum pcmk_ipc_server type
Definition: cpg.c:51
G_GNUC_INTERNAL void pcmk__create_utilization_constraints(pcmk_resource_t *rsc, const GList *allowed_nodes)
G_GNUC_INTERNAL void pcmk__release_node_capacity(GHashTable *current_utilization, const pcmk_resource_t *rsc)
G_GNUC_INTERNAL int pcmk__setup_output_fencing(pcmk__output_t **out, stonith_t **st, xmlNode **xml)
Definition: pcmk_setup.c:97
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)
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 xmlNode * pcmk__inject_action_result(xmlNode *cib_resource, lrmd_event_data_t *op, const char *node, int target_rc)
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:42
G_GNUC_INTERNAL bool pcmk__rsc_agent_changed(pcmk_resource_t *rsc, pcmk_node_t *node, const xmlNode *rsc_entry, bool active_on_node)
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_utilization)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
G_GNUC_INTERNAL xmlNode * pcmk__inject_node(cib_t *cib_conn, const char *node, const char *uuid)
High Level API.
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)
void(* with_this_colocations)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
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__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)
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)
void(* add_actions_to_graph)(pcmk_resource_t *rsc)
void(* this_with_colocations)(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
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)
void(* internal_constraints)(pcmk_resource_t *rsc)
void(* output_actions)(pcmk_resource_t *rsc)
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:32
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)
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)
void(* add_graph_meta)(const pcmk_resource_t *rsc, xmlNode *xml)
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)
G_GNUC_INTERNAL const char * pcmk__colocation_node_attr(const pcmk_node_t *node, const char *attr, const pcmk_resource_t *rsc)
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)
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)
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)
stonith_t * st
Definition: pcmk_fence.c:30
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)
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)
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 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_spec, const char *primary_role_spec, uint32_t flags)
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)
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 void pcmk__add_promotion_scores(pcmk_resource_t *rsc)
void(* apply_location)(pcmk_resource_t *rsc, pcmk__location_t *location)
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)
G_GNUC_INTERNAL gint pcmk__cmp_instance(gconstpointer a, gconstpointer b)
void(* shutdown_lock)(pcmk_resource_t *rsc)
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)
G_GNUC_INTERNAL void pcmk__noop_add_graph_meta(const pcmk_resource_t *rsc, xmlNode *xml)
G_GNUC_INTERNAL int pcmk__parse_constraint_role(const char *id, const char *role_spec, enum rsc_role_e *role)
G_GNUC_INTERNAL void pcmk__output_actions(pcmk_scheduler_t *scheduler)
bool(* create_probe)(pcmk_resource_t *rsc, pcmk_node_t *node)
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 void pcmk__with_primitive_colocations(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList **list)
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)
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)
uint32_t(* action_flags)(pcmk_action_t *action, const pcmk_node_t *node)
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)
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)
Cluster Configuration.
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 bool pcmk__valid_resource_or_tag(const pcmk_scheduler_t *scheduler, const char *id, pcmk_resource_t **rsc, pcmk__idref_t **tag)
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)
G_GNUC_INTERNAL void pcmk__inject_scheduler_input(pcmk_scheduler_t *scheduler, cib_t *cib, const pcmk_injections_t *injections)
This structure contains everything that makes up a single output formatter.
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)
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)
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.
int(* apply_coloc_score)(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent)
G_GNUC_INTERNAL xmlNode * pcmk__expand_tags_in_sets(xmlNode *xml_obj, const pcmk_scheduler_t *scheduler)
G_GNUC_INTERNAL void pcmk__group_add_utilization(const pcmk_resource_t *rsc, const pcmk_resource_t *orig_rsc, GList *all_rscs, GHashTable *utilization)
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:211
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)