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"),
202 crm_info(
"Moving healthy resource %s off %s before fencing",
210 g_list_free(action_list);
215 for (gIter = action_list; gIter != NULL; gIter = gIter->next) {
218 if (!(
action->node->details->online) ||
action->node->details->unclean
223 "Demote of failed resource %s is implicit after %s is fenced",
226 pe_rsc_info(rsc,
"%s is implicit after %s is fenced",
235 if (pe_rsc_is_bundled(rsc)) {
238 }
else if (order_implicit) {
244 g_list_free(action_list);
262 for (gIter = rsc->
children; gIter != NULL; gIter = gIter->next) {
265 rsc_stonith_ordering(child_rsc, stonith_op,
data_set);
270 "Skipping fencing constraints for unmanaged resource: %s",
274 order_start_vs_fencing(rsc, stonith_op,
data_set);
275 order_stop_vs_fencing(rsc, stonith_op,
data_set);
362 const char *fence_action =
"off";
373 fence_action =
"reboot";
380 stonith_op =
pe_fence_op(node, fence_action, FALSE,
"guest is unclean",
392 crm_info(
"Implying guest node %s is down (action %d) after %s fencing",
401 crm_info(
"Implying guest node %s is down (action %d) " 402 "after container %s is stopped (action %d)",
404 container->
id, stop->
id);
418 crm_info(
"Implying guest node %s is down (action %d) " 419 "after connection is stopped (action %d)",
425 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)
G_GNUC_INTERNAL void pcmk__order_notifs_after_fencing(pe_action_t *action, pe_resource_t *rsc, pe_action_t *stonith_op)
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)
pe_working_set_t * data_set
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...)
GHashTable * allowed_nodes