crm_info("4) Updating node state to %s for %s", join_state, join_from);
crm_info("4) Updating node state to %s for %s", CRMD_JOINSTATE_MEMBER, join_from);
process_join_ack_msg(const char *join_from, crm_data_t *lrm_update, int join_id){	/* now update them to "member" */	int call_id = 0;	crm_data_t *update = NULL;	crm_data_t *fragment = NULL;	const char *join_state = NULL;		crm_debug("Processing ack from %s", join_from);	join_state = (const char *)		g_hash_table_lookup(finalized_nodes, join_from);		if(join_state == NULL) {		crm_err("Join not in progress: ignoring join from %s",			join_from);		return FALSE;			} else if(safe_str_neq(join_state, CRMD_JOINSTATE_MEMBER)) {		crm_err("Node %s wasnt invited to join the cluster",join_from);		g_hash_table_remove(finalized_nodes, join_from);		return FALSE;			} else if(join_id != current_join_id) {		crm_err("Node %s responded to an invalid join: %d vs. %d",			join_from, join_id, current_join_id);		g_hash_table_remove(finalized_nodes, join_from);		return FALSE;			} else {		g_hash_table_remove(finalized_nodes, join_from);	}		if(g_hash_table_lookup(confirmed_nodes, join_from) != NULL) {		crm_err("hash already contains confirmation from %s",join_from);	}		g_hash_table_insert(confirmed_nodes, crm_strdup(join_from),			    crm_strdup(CRMD_JOINSTATE_MEMBER));	/* the updates will actually occur in reverse order because of	 * the LIFO nature of the fsa input queue	 */		/* update CIB with the current LRM status from the node */	update_local_cib(copy_xml_node_recursive(lrm_update));	fsa_cib_conn->cmds->modify(fsa_cib_conn, XML_CIB_TAG_STATUS, lrm_update,				   NULL, cib_scope_local|cib_quorum_override);		/* update node entry in the status section  */	crm_info("4) Updating node state to %s for %s", join_state, join_from);	update = create_node_state(		join_from, join_from,		ACTIVESTATUS, NULL, ONLINESTATUS, join_state, join_state,		__FUNCTION__);	set_xml_property_copy(update,XML_CIB_ATTR_EXPSTATE, CRMD_STATE_ACTIVE);	fragment = create_cib_fragment(update, NULL);	call_id = fsa_cib_conn->cmds->modify(		fsa_cib_conn, XML_CIB_TAG_STATUS, fragment, NULL,		cib_scope_local|cib_quorum_override);		add_cib_op_callback(call_id, TRUE,NULL, join_update_complete_callback);	free_xml(fragment);	free_xml(update);		return TRUE;}