process_graph_event(crm_data_t *event)
process_graph_event(crm_data_t *event, const char *event_node)
process_graph_event(crm_data_t *event){	int action_id          = -1;	int op_status_i        = 0;	const char *op_status  = NULL;	const char *task  = NULL;	if(event != NULL) {		op_status  = crm_element_value(event, XML_LRM_ATTR_OPSTATUS);		task  = crm_element_value(event, XML_LRM_ATTR_LASTOP);	}	next_transition_timeout = transition_timeout;		if(op_status != NULL) {		op_status_i = atoi(op_status);	}		if(op_status_i == -1) {		/* just information that the action was sent */		crm_trace("Ignoring TE initiated updates");		return TRUE;	} else if(op_status_i == 0 && safe_str_eq(task, CRMD_RSCSTATE_MON)) {		/* now how exactly this affects a resource that failed and		 *  and then recovered all by itself... i'm not 100% sure.		 *		 * in theory we just wouldnt trigger a new transition but		 *  then again, one should already be in progress right?		 *		 * possibly it would be better to keep the old transition		 *  around so we could try matching it against a start op		 *  and if one isnt found, _then_ trigger a new transition		 */		crm_debug("Ignoring successful monitor op");		return TRUE;	}	slist_iter(		synapse, synapse_t, graph, lpc,		/* lookup event */		slist_iter(			action, action_t, synapse->actions, lpc2,			action_id = match_graph_event(action, event);			if(action_id != -1) {				break;			}			);		if(action_id != -1) {			break;		}		);	if(event == NULL) {		crm_debug("a transition is starting");			} else if(action_id > -1) {		crm_xml_devel(event, "Event found");			} else if(action_id == -2) {		crm_xml_info(event, "Event found but failed");			} else {		/* unexpected event, trigger a pe-recompute */		/* possibly do this only for certain types of actions */		send_complete("Event not matched", event, te_update);		return FALSE;	}	process_trigger(action_id);	check_for_completion();	return TRUE;}