pe_err("Constraint %s: no resource found for %s", id, id_lh);
pe_config_err("Constraint %s: no resource found for LHS of %s", id, id_lh);
unpack_rsc_order(crm_data_t * xml_obj, pe_working_set_t *data_set){	gboolean symmetrical_bool = TRUE;		const char *id     = crm_element_value(xml_obj, XML_ATTR_ID);	const char *type   = crm_element_value(xml_obj, XML_ATTR_TYPE);	const char *id_rh  = crm_element_value(xml_obj, XML_CONS_ATTR_TO);	const char *id_lh  = crm_element_value(xml_obj, XML_CONS_ATTR_FROM);	const char *action = crm_element_value(xml_obj, XML_CONS_ATTR_ACTION);	const char *action_rh = crm_element_value(xml_obj, XML_CONS_ATTR_TOACTION);	const char *symmetrical = crm_element_value(		xml_obj, XML_CONS_ATTR_SYMMETRICAL);	resource_t *rsc_lh   = NULL;	resource_t *rsc_rh   = NULL;	if(xml_obj == NULL) {		pe_err("No constraint object to process.");		return FALSE;	} else if(id == NULL) {		pe_err("%s constraint must have an id",			crm_element_name(xml_obj));		return FALSE;			} else if(id_lh == NULL || id_rh == NULL) {		pe_err("Constraint %s needs two sides lh: %s rh: %s",		       id, crm_str(id_lh), crm_str(id_rh));		return FALSE;	}	if(action == NULL) {		action = CRMD_ACTION_START;	}	if(action_rh == NULL) {		action_rh = action;	}	CRM_DEV_ASSERT(action != NULL);	CRM_DEV_ASSERT(action_rh != NULL);		if(safe_str_eq(type, "before")) {		id_lh  = crm_element_value(xml_obj, XML_CONS_ATTR_TO);		id_rh  = crm_element_value(xml_obj, XML_CONS_ATTR_FROM);		action = crm_element_value(xml_obj, XML_CONS_ATTR_TOACTION);		action_rh = crm_element_value(xml_obj, XML_CONS_ATTR_ACTION);		if(action_rh == NULL) {			action_rh = CRMD_ACTION_START;		}		if(action == NULL) {			action = action_rh;		}	}	CRM_DEV_ASSERT(action != NULL);	CRM_DEV_ASSERT(action_rh != NULL);		rsc_lh   = pe_find_resource(data_set->resources, id_rh);	rsc_rh   = pe_find_resource(data_set->resources, id_lh);	if(rsc_lh == NULL) {		pe_err("Constraint %s: no resource found for %s", id, id_lh);		return FALSE;		} else if(rsc_rh == NULL) {		pe_err("Constraint %s: no resource found for %s", id, id_rh);		return FALSE;	}	custom_action_order(		rsc_lh, generate_op_key(rsc_lh->id, action, 0), NULL,		rsc_rh, generate_op_key(rsc_rh->id, action_rh, 0), NULL,		pe_ordering_optional, data_set);	if(rsc_rh->restart_type == pe_restart_restart	   && safe_str_eq(action, action_rh)) {		if(safe_str_eq(action, CRMD_ACTION_START)) {  			order_start_start(rsc_lh, rsc_rh, pe_ordering_recover); 		} else if(safe_str_eq(action, CRMD_ACTION_STOP)) {  			order_stop_stop(rsc_rh, rsc_lh, pe_ordering_recover); 		}	}	cl_str_to_boolean(symmetrical, &symmetrical_bool);	if(symmetrical_bool == FALSE) {		return TRUE;	}		action = invert_action(action);	action_rh = invert_action(action_rh);		custom_action_order(		rsc_rh, generate_op_key(rsc_rh->id, action_rh, 0), NULL,		rsc_lh, generate_op_key(rsc_lh->id, action, 0), NULL,		pe_ordering_optional, data_set);	if(rsc_lh->restart_type == pe_restart_restart	   && safe_str_eq(action, action_rh)) {		if(safe_str_eq(action, CRMD_ACTION_START)) {  			order_start_start(rsc_rh, rsc_lh, pe_ordering_recover);		} else if(safe_str_eq(action, CRMD_ACTION_STOP)) {   			order_stop_stop(rsc_rh, rsc_lh, pe_ordering_recover); 		}	}		return TRUE;}