Exemplo n.º 1
0
/**
 * Function to add self node
 *
 * @param dtms_cb
 *
 * @return NCSCC_RC_SUCCESS
 * @return NCSCC_RC_FAILURE
 *
 */
uint32_t add_self_node(DTM_INTERNODE_CB * dtms_cb)
{

	uint32_t rc = NCSCC_RC_SUCCESS;
	DTM_NODE_DB tmp_node;
	DTM_NODE_DB *node;

	memset(&tmp_node, 0, sizeof(DTM_NODE_DB));

	tmp_node.cluster_id = dtms_cb->cluster_id;
	tmp_node.node_id = dtms_cb->node_id;
	memcpy(tmp_node.node_ip, (uint8_t *)dtms_cb->ip_addr, INET6_ADDRSTRLEN);
	tmp_node.i_addr_family = dtms_cb->i_addr_family;
	strncpy(tmp_node.node_name, dtms_cb->node_name, strlen(dtms_cb->node_name));
	tmp_node.comm_status = true;
	tmp_node.comm_socket = 0;

	node = dtm_node_new(&tmp_node);

	if (node == NULL) {
		LOG_ER("DTM:  dtm_node_new failed .node_ip : %s ", tmp_node.node_ip);
		goto node_fail;
	}

	rc = dtm_node_add(node, 0);
	if (rc != NCSCC_RC_SUCCESS) {
		LOG_ER("DTM: dtm_node_add fail  rc : %d node->node_id : %d node->node_ip : %s", rc, node->node_id,
		       node->node_ip);
		rc = NCSCC_RC_FAILURE;
		free(node);
		goto done;
	}

	rc = dtm_node_add(node, 1);
	if (rc != NCSCC_RC_SUCCESS) {
		LOG_ER("DTM: dtm_node_add fail  rc : %d node->node_id : %d node->node_ip : %s", rc, node->node_id,
		       node->node_ip);
		if (dtm_node_delete(node, 0) != NCSCC_RC_SUCCESS) {
			LOG_ER("DTM :dtm_node_delete failed ");
			rc = NCSCC_RC_FAILURE;
			free(node);
			goto done;
		}

	}

	rc = dtm_node_add(node, 2);
	if (rc != NCSCC_RC_SUCCESS) {
		LOG_ER("DTM: dtm_node_add fail  rc : %d node->node_id : %d node->node_ip : %s", rc, node->node_id,
		       node->node_ip);
		if (dtm_node_delete(node, 0) != NCSCC_RC_SUCCESS) {
			LOG_ER("DTM :dtm_node_delete failed ");
		}
		if (dtm_node_delete(node, 1) != NCSCC_RC_SUCCESS) {
			LOG_ER("DTM :dtm_node_delete failed");
		}
		free(node);
		rc = NCSCC_RC_FAILURE;
	}

 done:
 node_fail:
	return rc;

}
Exemplo n.º 2
0
/**
 * Function to process the node info hdr
 *
 * @param dtms_cb stream_sock buffer node_info_hrd buffer_len
 *
 * @return NCSCC_RC_SUCCESS
 * @return NCSCC_RC_FAILURE
 *
 */
uint32_t dtm_process_node_info(DTM_INTERNODE_CB * dtms_cb, int stream_sock, uint8_t *buffer, uint8_t *node_info_hrd,
			    int buffer_len)
{
	uint32_t node_id;
	DTM_NODE_DB *node;
	uint32_t nodename_len;
	char nodename[MAX_NAME_LENGTH];
	int rc = 0;
	uint8_t *data = buffer;
	TRACE_ENTER();

	node_id = ncs_decode_32bit(&data);
	nodename_len = ncs_decode_32bit(&data);
	strncpy((char *)nodename, (char *)data, nodename_len);

	node = dtm_node_get_by_comm_socket(stream_sock);

	if (node == NULL) {
		rc = NCSCC_RC_FAILURE;
		goto done;
	}

	if (!node->comm_status) {

		/*****************************************************/
		/* nodeinfo data back to the client  NODE is still */
		/*****************************************************/

		if (node->node_id == 0) {
			node->node_id = node_id;
			strncpy((char *)&node->node_name, nodename, nodename_len);
			node->comm_status = true;
			if (dtm_node_add(node, 0) != NCSCC_RC_SUCCESS) {
				LOG_ER("DTM:  Node already exit in the cluster with smiler configuration , correct the other joining Node configuration ");				
				osafassert(0);
			
			}

		} else if (node->node_id == node_id) {
			strncpy((char *)&node->node_name, nodename, nodename_len);
			rc = dtm_comm_socket_send(stream_sock, node_info_hrd, buffer_len);
			if (rc != NCSCC_RC_SUCCESS) {

				LOG_ER("DTM: dtm_comm_socket_send() failed rc : %d", rc);
				rc = NCSCC_RC_FAILURE;
				goto done;
			}
			node->comm_status = true;

		} else {
			LOG_ER("DTM: Node already exit in the cluster with smiler configuration , correct the other joining Node configuration ");
			osafassert(0);
		}

		TRACE("DTM: dtm_process_node_info node_ip:%s, node_id:%u i_addr_family:%d ", node->node_ip, node->node_id, node->i_addr_family);
		rc = dtm_process_node_up_down(node->node_id, node->node_name, node->node_ip , node->i_addr_family, node->comm_status);

		if (rc != NCSCC_RC_SUCCESS) {
			LOG_ER("DTM: dtm_process_node_up_down() failed rc : %d ", rc);
			rc = NCSCC_RC_FAILURE;
		}
	} else {
		LOG_ER("DTM: Node down already  received  for this node ");
		osafassert(0);
	}

 done:
	TRACE_LEAVE();
	return rc;
}
Exemplo n.º 3
0
/**
 * Function to process the node info hdr
 *
 * @param dtms_cb stream_sock buffer node_info_hrd buffer_len
 *
 * @return NCSCC_RC_SUCCESS
 * @return NCSCC_RC_FAILURE
 *
 */
uns32 dtm_process_node_info(DTM_INTERNODE_CB * dtms_cb, int stream_sock, uns8 *buffer, uns8 *node_info_hrd,
			    int buffer_len)
{
	uns32 node_id;
	DTM_NODE_DB *node;
	uns32 nodename_len;
	char nodename[MAX_NAME_LENGTH];
	int rc = 0;
	uns8 *data = buffer;
	TRACE_ENTER();

	node_id = ncs_decode_32bit(&data);
	nodename_len = ncs_decode_32bit(&data);
	strncpy((char *)nodename, (char *)data, nodename_len);

	node = dtm_node_get_by_comm_socket(stream_sock);

	if (node == NULL) {
		rc = NCSCC_RC_FAILURE;
		goto done;
	}

	if (!node->comm_status) {

		/*****************************************************/
		/* nodeinfo data back to the client  NODE is still */
		/*****************************************************/

		if (node->node_id == 0) {
			node->node_id = node_id;
			strncpy((char *)&node->node_name, nodename, nodename_len);
			node->comm_status = TRUE;
			if (dtm_node_add(node, 0) != NCSCC_RC_SUCCESS) {
				assert(0);
				rc = NCSCC_RC_FAILURE;
				goto done;
			}

		} else if (node->node_id == node_id) {
			strncpy((char *)&node->node_name, nodename, nodename_len);
			rc = dtm_comm_socket_send(stream_sock, node_info_hrd, buffer_len);
			if (rc != NCSCC_RC_SUCCESS) {

				LOG_ER("DTM: dtm_comm_socket_send() failed rc : %d", rc);
				rc = NCSCC_RC_FAILURE;
				goto done;
			}
			node->comm_status = TRUE;

		} else
			assert(0);

		rc = dtm_process_node_up_down(node->node_id, node->node_name, node->comm_status);

		if (rc != NCSCC_RC_SUCCESS) {
			LOG_ER("DTM: dtm_process_node_up_down() failed rc : %d ", rc);
			rc = NCSCC_RC_FAILURE;
		}
	} else {
		LOG_ER(" conn details msg recd when conn_status is true");
		assert(0);
	}

 done:
	TRACE_LEAVE();
	return rc;
}