35 && pe_rsc_is_anon_clone(rsc->
parent)
62 for (gIter = rsc->
actions; gIter != NULL; gIter = gIter->next) {
77 && !rsc_is_known_on(rsc,
target)) {
109 GList *action_list = NULL;
110 bool order_implicit =
false;
131 order_implicit =
true;
134 if (action_list && order_implicit) {
138 for (gIter = action_list; gIter != NULL; gIter = gIter->next) {
144 if (order_implicit) {
159 if (!pe_rsc_is_bundled(rsc)) {
166 crm_notice(
"Stop of failed resource %s is implicit %s %s is fenced",
167 rsc->
id, (order_implicit?
"after" :
"because"),
170 crm_info(
"%s is implicit %s %s is fenced",
171 action->uuid, (order_implicit?
"after" :
"because"),
198 crm_info(
"Moving healthy resource %s off %s before fencing",
199 rsc->
id, pe__node_name(node));
206 g_list_free(action_list);
211 for (gIter = action_list; gIter != NULL; gIter = gIter->next) {
214 if (!(
action->node->details->online) ||
action->node->details->unclean
219 "Demote of failed resource %s is implicit after %s is fenced",
222 pe_rsc_info(rsc,
"%s is implicit after %s is fenced",
231 if (pe_rsc_is_bundled(rsc)) {
234 }
else if (order_implicit) {
240 g_list_free(action_list);
256 for (gIter = rsc->
children; gIter != NULL; gIter = gIter->next) {
259 rsc_stonith_ordering(child_rsc, stonith_op);
264 "Skipping fencing constraints for unmanaged resource: %s",
268 order_start_vs_fencing(rsc, stonith_op);
269 order_stop_vs_fencing(rsc, stonith_op);
357 const char *fence_action =
"off";
371 fence_action =
"reboot";
378 stonith_op =
pe_fence_op(node, fence_action, FALSE,
"guest is unclean",
391 crm_info(
"Implying guest %s is down (action %d) after %s fencing",
392 pe__node_name(node), stonith_op->
id,
393 pe__node_name(stop->
node));
400 crm_info(
"Implying guest %s is down (action %d) " 401 "after container %s is stopped (action %d)",
402 pe__node_name(node), stonith_op->
id,
403 container->
id, stop->
id);
417 crm_info(
"Implying guest %s is down (action %d) " 418 "after connection is stopped (action %d)",
419 pe__node_name(node), stonith_op->
id, stop->
id);
424 crm_info(
"Implying guest %s is down (action %d) ",
425 pe__node_name(node), stonith_op->
id);
466 crm_debug(
"Ordering any stops of %s before %s, and any starts after",
485 NULL, strdup(unfence->
uuid), unfence,
#define CRM_CHECK(expr, failure_action)
#define crm_notice(fmt, args...)
#define pe_rsc_debug(rsc, fmt, args...)
void pcmk__order_restart_vs_unfence(gpointer data, gpointer user_data)
void pcmk__fence_guest(pe_node_t *node)
#define pe__set_action_flags(action, flags_to_set)
pe_resource_t * container
void pcmk__order_vs_fence(pe_action_t *stonith_op, pe_working_set_t *data_set)
pe_action_t * find_first_action(const GList *input, const char *uuid, const char *task, const pe_node_t *on_node)
pe_resource_t * remote_rsc
void pcmk__order_vs_unfence(const pe_resource_t *rsc, pe_node_t *node, pe_action_t *action, enum pe_ordering order)
pe_working_set_t * data_set
Cluster that this node is part of.
void trigger_unfencing(pe_resource_t *rsc, pe_node_t *node, const char *reason, pe_action_t *dependency, pe_working_set_t *data_set)
#define CRMD_ACTION_START
#define CRM_ATTR_UNFENCED
#define crm_debug(fmt, args...)
pe_resource_t * uber_parent(pe_resource_t *rsc)
const char * pe_node_attribute_raw(const pe_node_t *node, const char *name)
bool pe__is_guest_node(const pe_node_t *node)
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
#define pcmk_is_set(g, f)
Convenience alias for pcmk_all_flags_set(), to check single flag.
struct pe_node_shared_s * details
#define pe_rsc_needs_fencing
gboolean order_actions(pe_action_t *lh_action, pe_action_t *rh_action, enum pe_ordering order)
pe_working_set_t * data_set
G_GNUC_INTERNAL void pcmk__new_ordering(pe_resource_t *first_rsc, char *first_task, pe_action_t *first_action, pe_resource_t *then_rsc, char *then_task, pe_action_t *then_action, uint32_t flags, pe_working_set_t *data_set)
enum pe_obj_types variant
#define pe_rsc_fence_device
Cluster status and scheduling.
#define pe_rsc_needs_unfencing
enum pe_action_flags flags
pe_working_set_t * cluster
#define pe_flag_enable_unfencing
#define pe_rsc_trace(rsc, fmt, args...)
bool pcmk__node_unfenced(const pe_node_t *node)
GList * pe__resource_actions(const pe_resource_t *rsc, const pe_node_t *node, const char *task, bool require_node)
Find all actions of given type for a resource.
void pe__order_notifs_after_fencing(const pe_action_t *action, pe_resource_t *rsc, pe_action_t *stonith_op)
#define crm_info(fmt, args...)
pe_action_t * pe_fence_op(pe_node_t *node, const char *op, bool optional, const char *reason, bool priority_delay, pe_working_set_t *data_set)
#define pe_rsc_info(rsc, fmt, args...)
GHashTable * allowed_nodes