crm_debug_4("action %d was optional", action->id);
crm_debug_5("action %d was optional", action->id);
graph_element_from_action(action_t *action, crm_data_t * *graph){	char *syn_id = NULL;	crm_data_t * syn = NULL;	crm_data_t * set = NULL;	crm_data_t * in  = NULL;	crm_data_t * input = NULL;	crm_data_t * xml_action = NULL;	if(action == NULL) {		pe_err("Cannot dump NULL action");		return;	} else if(action->optional) {		crm_debug_4("action %d was optional", action->id);		return;	} else if(action->pseudo == FALSE && action->runnable == FALSE) {		crm_debug_4("action %d was not runnable", action->id);		return;	} else if(action->dumped) {		crm_debug_4("action %d was already dumped", action->id);		return;	} else if(action->pseudo		  || safe_str_eq(action->task,  CRM_OP_FENCE)		  || safe_str_eq(action->task,  CRM_OP_SHUTDOWN)) {		/* skip the next check */			} else {		if(action->node == NULL) {			pe_err("action %d was not allocated", action->id);			log_action(LOG_DEBUG, "Unallocated action", action, FALSE);			return;					} else if(action->node->details->online == FALSE) {			pe_err("action %d was scheduled for offline node", action->id);			log_action(LOG_DEBUG, "Action for offline node", action, FALSE);			return;		}	}		action->dumped = TRUE;		syn = create_xml_node(*graph, "synapse");	set = create_xml_node(syn, "action_set");	in  = create_xml_node(syn, "inputs");	syn_id = crm_itoa(num_synapse);	set_xml_property_copy(syn, XML_ATTR_ID, syn_id);	crm_free(syn_id);	num_synapse++;		xml_action = action2xml(action, FALSE);	add_node_copy(set, xml_action);	free_xml(xml_action);		slist_iter(wrapper,action_wrapper_t,action->actions_before,lpc,					   if(wrapper->action->optional == TRUE) {			   crm_debug("Input %d optional", wrapper->action->id);			   continue;		   }		   		   input = create_xml_node(in, "trigger");		   		   xml_action = action2xml(wrapper->action, TRUE);		   add_node_copy(input, xml_action);		   free_xml(xml_action);		   		);}