crm_warn("SHARED RESOURCE %s WILL REMAIN BLOCKED" " UNTIL CLEANED UP MANUALLY ON NODE %s", rsc_lh->id, node->details->uname);
unpack_failed_resource(GListPtr *node_constraints, GListPtr *actions,		       xmlNodePtr rsc_entry, resource_t *rsc_lh, node_t *node){	const char *last_op  = xmlGetProp(rsc_entry, "last_op");	crm_debug("Unpacking failed action %s on %s", last_op, rsc_lh->id);		if(safe_str_neq(last_op, "stop")) {		/* not running */		/* do not run the resource here again */		rsc2node_new("dont_run_generate",			     rsc_lh, -1.0, FALSE, node, node_constraints);		/* schedule a stop here just in case? */		action_new(rsc_lh, stop_rsc);				return TRUE;			} 	switch(rsc_lh->stopfail_type) {		case pesf_stonith:			/* remedial action:			 *   shutdown (so all other resources are			 *   stopped gracefully) and then STONITH node			 */						if(stonith_enabled == FALSE) {				crm_err("STONITH is not enabled in this cluster but is required for resource %s after a failed stop", rsc_lh->id);				rsc_lh->start->runnable = FALSE;				break;			}						/* treat it as if it is still running */			rsc_lh->cur_node = node;			node->details->running_rsc = g_list_append(				node->details->running_rsc, rsc_lh);						if(node->details->online) {				node->details->shutdown = TRUE;			}			node->details->unclean  = TRUE;			break;					case pesf_block:			crm_warn("SHARED RESOURCE %s WILL REMAIN BLOCKED"				 " UNTIL CLEANED UP MANUALLY ON NODE %s",				 rsc_lh->id, node->details->uname);			rsc_lh->cur_node = node;			node->details->running_rsc = g_list_append(				node->details->running_rsc, rsc_lh); 			/* let this depend on the stop action instead?			 * safer not to i think			 */ 			rsc_lh->start->runnable = FALSE;			break;					case pesf_ignore:			crm_warn("SHARED RESOURCE %s IS NOT PROTECTED",				 rsc_lh->id);			/* do not run the resource here again */			rsc2node_new(				"dont_run_generate",				rsc_lh, -1.0, FALSE, node, node_constraints);			break;	}			return TRUE;}