37 }
else if (pcmk__is_primitive(rsc) && pcmk__is_anonymous_clone(
parent)
38 && (g_hash_table_lookup(
parent->priv->probed_nodes,
39 node->
priv->
id) != NULL)) {
64 for (GList *iter = rsc->
priv->
actions; iter != NULL; iter = iter->next) {
81 && !rsc_is_known_on(rsc,
target)) {
114 GList *action_list = NULL;
115 bool order_implicit =
false;
134 || pcmk__is_guest_or_bundle_node(
target)) {
136 order_implicit =
true;
139 if (action_list && order_implicit) {
144 for (iter = action_list; iter != NULL; iter = iter->next) {
151 if (order_implicit) {
164 if (!pcmk__is_bundled(rsc)) {
171 crm_notice(
"Stop of failed resource %s is implicit %s %s is fenced",
172 rsc->
id, (order_implicit?
"after" :
"because"),
175 crm_info(
"%s is implicit %s %s is fenced",
176 action->uuid, (order_implicit?
"after" :
"because"),
203 crm_info(
"Moving healthy resource %s off %s before fencing",
204 rsc->
id, pcmk__node_name(node));
211 g_list_free(action_list);
216 for (iter = action_list; iter != NULL; iter = iter->next) {
219 if (!(
action->node->details->online) ||
action->node->details->unclean
224 "Demote of failed resource %s is implicit " 225 "after %s is fenced",
238 if (pcmk__is_bundled(rsc)) {
241 }
else if (order_implicit) {
248 g_list_free(action_list);
264 iter != NULL; iter = iter->next) {
268 rsc_stonith_ordering(child_rsc, stonith_op);
273 "Skipping fencing constraints for unmanaged resource: " 277 order_start_vs_fencing(rsc, stonith_op);
278 order_stop_vs_fencing(rsc, stonith_op);
376 if (launcher != NULL) {
389 stonith_op =
pe_fence_op(node, fence_action, FALSE,
"guest is unclean",
403 crm_info(
"Implying guest %s is down (action %d) after %s fencing",
404 pcmk__node_name(node), stonith_op->
id,
405 pcmk__node_name(stop->
node));
414 crm_info(
"Implying guest %s is down (action %d) " 415 "after launcher %s is stopped (action %d)",
416 pcmk__node_name(node), stonith_op->
id,
417 launcher->
id, stop->
id);
431 crm_info(
"Implying guest %s is down (action %d) " 432 "after connection is stopped (action %d)",
433 pcmk__node_name(node), stonith_op->
id, stop->
id);
438 crm_info(
"Implying guest %s is down (action %d) ",
439 pcmk__node_name(node), stonith_op->
id);
481 crm_debug(
"Ordering any stops of %s before %s, and any starts after",
500 NULL, strdup(unfence->
uuid), unfence,
#define CRM_CHECK(expr, failure_action)
Relation applies only if actions are on same node.
void trigger_unfencing(pcmk_resource_t *rsc, pcmk_node_t *node, const char *reason, pcmk_action_t *dependency, pcmk_scheduler_t *scheduler)
#define crm_notice(fmt, args...)
'then' is runnable (and migratable) only if 'first' is runnable
void pcmk__fence_guest(pcmk_node_t *node)
void pcmk__order_restart_vs_unfence(gpointer data, gpointer user_data)
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)
pcmk_resource_t * uber_parent(pcmk_resource_t *rsc)
#define pcmk__rsc_trace(rsc, fmt, args...)
#define pcmk__rsc_info(rsc, fmt, args...)
pcmk_action_t * pe_fence_op(pcmk_node_t *node, const char *op, bool optional, const char *reason, bool priority_delay, pcmk_scheduler_t *scheduler)
pcmk__scheduler_private_t * priv
If 'first' is required, 'then' action for instance on same node is.
GList * pe__resource_actions(const pcmk_resource_t *rsc, const pcmk_node_t *node, const char *task, bool require_node)
Find all actions of given type for a resource.
Ordering applies even if 'first' runs on guest node created by 'then'.
#define pcmk__rsc_debug(rsc, fmt, args...)
pcmk__action_relation_flags
pcmk__node_private_t * priv
#define CRM_ATTR_UNFENCED
#define PCMK_ACTION_DEMOTE
#define PCMK_ACTION_REBOOT
#define crm_debug(fmt, args...)
pcmk_scheduler_t * scheduler
Actions are ordered (optionally, if no other flags are set)
void pcmk__order_vs_unfence(const pcmk_resource_t *rsc, pcmk_node_t *node, pcmk_action_t *action, enum pcmk__action_relation_flags order)
#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
#define PCMK_ACTION_STONITH
pcmk_scheduler_t * scheduler
gboolean order_actions(pcmk_action_t *first, pcmk_action_t *then, uint32_t flags)
GHashTable * allowed_nodes
#define pcmk__assert(expr)
void pcmk__order_vs_fence(pcmk_action_t *stonith_op, pcmk_scheduler_t *scheduler)
Cluster status and scheduling.
void pe__order_notifs_after_fencing(const pcmk_action_t *action, pcmk_resource_t *rsc, pcmk_action_t *stonith_op)
pcmk_action_t * find_first_action(const GList *input, const char *uuid, const char *task, const pcmk_node_t *on_node)
pcmk_scheduler_t * scheduler
pcmk_resource_t * launcher
const char * pcmk__node_attr(const pcmk_node_t *node, const char *name, const char *target, enum pcmk__rsc_node node_type)
#define pcmk__set_action_flags(action, flags_to_set)
#define crm_info(fmt, args...)
GHashTable * probed_nodes
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
bool pcmk__node_unfenced(const pcmk_node_t *node)