35 && pe_rsc_is_anon_clone(rsc->
parent)
64 for (gIter = rsc->
actions; gIter != NULL; gIter = gIter->next) {
79 && !rsc_is_known_on(rsc,
target)) {
113 GList *action_list = NULL;
114 bool order_implicit =
false;
135 order_implicit =
true;
138 if (action_list && order_implicit) {
142 for (gIter = action_list; gIter != NULL; gIter = gIter->next) {
148 if (order_implicit) {
163 if (!pe_rsc_is_bundled(rsc)) {
170 crm_notice(
"Stop of failed resource %s is implicit %s %s is fenced",
171 rsc->
id, (order_implicit?
"after" :
"because"),
174 crm_info(
"%s is implicit %s %s is fenced",
175 action->uuid, (order_implicit?
"after" :
"because"),
221 crm_info(
"Moving healthy resource %s off %s before fencing",
229 g_list_free(action_list);
234 for (gIter = action_list; gIter != NULL; gIter = gIter->next) {
237 if (!(
action->node->details->online) ||
action->node->details->unclean
242 "Demote of failed resource %s is implicit after %s is fenced",
245 pe_rsc_info(rsc,
"%s is implicit after %s is fenced",
254 if (pe_rsc_is_bundled(rsc)) {
257 }
else if (order_implicit) {
263 g_list_free(action_list);
281 for (gIter = rsc->
children; gIter != NULL; gIter = gIter->next) {
284 rsc_stonith_ordering(child_rsc, stonith_op, data_set);
289 "Skipping fencing constraints for unmanaged resource: %s",
293 order_start_vs_fencing(rsc, stonith_op, data_set);
294 order_stop_vs_fencing(rsc, stonith_op, data_set);
312 CRM_CHECK(stonith_op && data_set,
return);
313 for (GList *r = data_set->
resources; r != NULL; r = r->next) {
314 rsc_stonith_ordering((
pe_resource_t *) r->data, stonith_op, data_set);
381 const char *fence_action =
"off";
392 fence_action =
"reboot";
399 stonith_op =
pe_fence_op(node, fence_action, FALSE,
"guest is unclean",
409 NULL, FALSE, data_set);
411 crm_info(
"Implying guest node %s is down (action %d) after %s fencing",
420 crm_info(
"Implying guest node %s is down (action %d) " 421 "after container %s is stopped (action %d)",
423 container->
id, stop->
id);
437 crm_info(
"Implying guest node %s is down (action %d) " 438 "after connection is stopped (action %d)",
444 crm_info(
"Implying guest node %s is down (action %d) ",
bool pcmk__node_unfenced(pe_node_t *node)
#define CRM_CHECK(expr, failure_action)
#define crm_notice(fmt, args...)
#define pe_rsc_debug(rsc, fmt, args...)
#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)
G_GNUC_INTERNAL void pcmk__new_ordering(pe_resource_t *lh_rsc, char *lh_task, pe_action_t *lh_action, pe_resource_t *rh_rsc, char *rh_task, pe_action_t *rh_action, enum pe_ordering type, pe_working_set_t *data_set)
pe_resource_t * remote_rsc
bool pcmk__is_unfence_device(const pe_resource_t *rsc, const pe_working_set_t *data_set)
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
pe_resource_t * uber_parent(pe_resource_t *rsc)
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)
const char * pe_node_attribute_raw(pe_node_t *node, const char *name)
enum pe_obj_types variant
void pcmk__order_vs_unfence(pe_resource_t *rsc, pe_node_t *node, pe_action_t *action, enum pe_ordering order, pe_working_set_t *data_set)
#define pe_rsc_fence_device
void pcmk__fence_guest(pe_node_t *node, pe_working_set_t *data_set)
Cluster status and scheduling.
#define pe_rsc_needs_unfencing
enum pe_action_flags flags
#define pe_flag_enable_unfencing
#define pe_rsc_trace(rsc, fmt, args...)
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.
#define crm_info(fmt, args...)
pe_action_t * find_first_action(GList *input, const char *uuid, const char *task, pe_node_t *on_node)
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...)
void create_secondary_notification(pe_action_t *action, pe_resource_t *rsc, pe_action_t *stonith_op, pe_working_set_t *data_set)
GHashTable * allowed_nodes