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",
203 rsc->
id, pe__node_name(node));
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";
376 fence_action =
"reboot";
383 stonith_op =
pe_fence_op(node, fence_action, FALSE,
"guest is unclean",
396 crm_info(
"Implying guest %s is down (action %d) after %s fencing",
397 pe__node_name(node), stonith_op->
id,
398 pe__node_name(stop->
node));
405 crm_info(
"Implying guest %s is down (action %d) " 406 "after container %s is stopped (action %d)",
407 pe__node_name(node), stonith_op->
id,
408 container->
id, stop->
id);
422 crm_info(
"Implying guest %s is down (action %d) " 423 "after connection is stopped (action %d)",
424 pe__node_name(node), stonith_op->
id, stop->
id);
429 crm_info(
"Implying guest %s is down (action %d) ",
430 pe__node_name(node), stonith_op->
id);
471 crm_debug(
"Ordering any stops of %s before %s, and any starts after",
490 NULL, strdup(unfence->
uuid), unfence,
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...)
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_unfence(pe_resource_t *rsc, pe_node_t *node, pe_action_t *action, enum pe_ordering order)
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
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)
void pe__order_notifs_after_fencing(pe_action_t *action, pe_resource_t *rsc, pe_action_t *stonith_op)
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...)
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 * 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