55 ((target_node == NULL)?
"" :
"partially "),
56 rsc->
id, pcmk__node_name(current),
61 if (target_node == NULL) {
79 if (target_node == NULL) {
125 if (migrate_to != NULL) {
164 "Scheduling stop for %s on %s due to dangling migration",
165 rsc->
id, pcmk__node_name(dangling_source));
186 "%s cannot migrate because " 187 "the configuration does not allow it", rsc->
id);
203 pcmk__rsc_trace(rsc,
"%s cannot migrate because it has a start pending",
210 "%s cannot migrate because " 211 "its current node (%s) is unclean",
212 rsc->
id, pcmk__node_name(current));
220 "%s cannot migrate because " 221 "its next node (%s) is unclean",
245 }
else if (key != NULL) {
264 char *first_task = NULL;
265 char *then_task = NULL;
266 bool then_migratable;
267 bool first_migratable;
270 if ((order->
rsc1 == NULL) || (order->
rsc2 == NULL)
280 if (!first_migratable && !then_migratable) {
285 first_task = task_from_action_or_key(order->
action1, order->
task1);
286 then_task = task_from_action_or_key(order->
action2, order->
task2);
293 if (first_migratable && then_migratable) {
305 if (then_migratable) {
306 if (first_migratable) {
323 }
else if (then_migratable
329 if (first_migratable) {
360 if (then_migratable) {
377 if (then_migratable) {
#define CRM_CHECK(expr, failure_action)
#define PCMK_META_RECORD_PENDING
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)
#define stop_action(rsc, node, optional)
#define pcmk__rsc_trace(rsc, fmt, args...)
If 'first' is unrunnable, 'then' becomes a real, unmigratable action.
#define pcmk__insert_meta(obj, name, value)
#define PCMK_ACTION_MONITOR
#define PCMK_ACTION_MIGRATE_TO
void pcmk__create_migration_actions(pcmk_resource_t *rsc, const pcmk_node_t *current)
#define pcmk__set_relation_flags(ar_flags, flags_to_set)
#define PCMK__META_MIGRATE_TARGET
pcmk__node_private_t * priv
#define PCMK_ACTION_DEMOTE
pcmk_scheduler_t * scheduler
Actions are ordered (optionally, if no other flags are set)
pcmk_node_t * assigned_node
#define pcmk_is_set(g, f)
Convenience alias for pcmk_all_flags_set(), to check single flag.
#define PCMK_ACTION_START
pcmk__resource_private_t * priv
bool pcmk__rsc_can_migrate(const pcmk_resource_t *rsc, const pcmk_node_t *current)
Wrappers for and extensions to libxml2.
enum pcmk__requires needs
char * pcmk__op_key(const char *rsc_id, const char *op_type, guint interval_ms)
Generate an operation key (RESOURCE_ACTION_INTERVAL)
#define pcmk__str_copy(str)
pcmk_action_t * custom_action(pcmk_resource_t *rsc, char *key, const char *task, const pcmk_node_t *on_node, gboolean optional, pcmk_scheduler_t *scheduler)
Create or update an action object.
#define start_action(rsc, node, optional)
void pcmk__order_migration_equivalents(pcmk__action_relation_t *order)
Relation applies only if 'first' cannot be part of a live migration.
#define PCMK_ACTION_MIGRATE_FROM
gboolean parse_op_key(const char *key, char **rsc_id, char **op_type, guint *interval_ms)
gboolean is_parent(pcmk_resource_t *child, pcmk_resource_t *rsc)
#define PCMK_ACTION_PROMOTE
#define pcmk__set_action_flags(action, flags_to_set)
#define PCMK__META_MIGRATE_SOURCE
struct pcmk__node_details * details
void pcmk__abort_dangling_migration(void *data, void *user_data)
pcmk_node_t * partial_migration_target