Provide the node address as a command-line parameter when calling the scale-out script. This can be useful if the scale-out script needs to contact the node (e.g. copy some files to it or update some configuration on the node's local disk) as part of the scale-out operation. --- src/clm/clmd/clms_evt.c | 57 ++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/src/clm/clmd/clms_evt.c b/src/clm/clmd/clms_evt.c index ace140db4..84e7b3c6d 100644 --- a/src/clm/clmd/clms_evt.c +++ b/src/clm/clmd/clms_evt.c @@ -488,9 +488,17 @@ static void scale_out_node(CLMS_CB *cb, queue_the_node = false; } if (queue_the_node) { + char node_address[SA_CLM_MAX_ADDRESS_LENGTH + 1]; + size_t addr_len = nodeup_info->address.length; + if (addr_len > SA_CLM_MAX_ADDRESS_LENGTH) + addr_len = SA_CLM_MAX_ADDRESS_LENGTH; + if (nodeup_info->no_of_addresses == 0) + addr_len = 0; + memcpy(node_address, nodeup_info->address.value, addr_len); + node_address[addr_len] = '\0'; char *strp; - if (asprintf(&strp, "%" PRIu32 ",%s,", nodeup_info->node_id, - node_name) != -1) { + if (asprintf(&strp, "%" PRIu32 ",%s,%s,", nodeup_info->node_id, + node_name, node_address) != -1) { LOG_NO("Queuing request to scale out node 0x%" PRIx32 " (%s)", nodeup_info->node_id, node_name); @@ -525,13 +533,10 @@ uint32_t proc_node_up_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) { clmsv_clms_node_up_info_t *nodeup_info = &(evt->info.msg.info.api_info.param).nodeup_info; - CLMS_CLUSTER_NODE *node = NULL; - SaUint32T nodeid; uint32_t rc = NCSCC_RC_SUCCESS; SaNameT node_name = {0}; CLMSV_MSG clm_msg; SaBoolT check_member; - IPLIST *ip = NULL; TRACE_ENTER2("Node up mesg for nodename length %d %s", nodeup_info->node_name.length, @@ -542,10 +547,21 @@ uint32_t proc_node_up_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) (char *)node_name.value, sizeof(node_name.value), "safNode=%s,%s", nodeup_info->node_name.value, osaf_cluster->name.value); - nodeid = evt->info.msg.info.api_info.param.nodeup_info.node_id; + SaUint32T nodeid = nodeup_info->node_id; + + /* Retrieve IP information */ + IPLIST *ip = (IPLIST *)ncs_patricia_tree_get(&clms_cb->iplist, + (uint8_t *)&nodeid); + + if (ip != NULL && ip->addr.length != 0 && + nodeup_info->no_of_addresses == 0) { + nodeup_info->no_of_addresses = 1; + memcpy(&(nodeup_info->address), &(ip->addr), sizeof(ip->addr)); + } - node = clms_node_get_by_name(&node_name); + CLMS_CLUSTER_NODE *node = clms_node_get_by_name(&node_name); clm_msg.info.api_resp_info.rc = SA_AIS_OK; + if (node == NULL) { /* The /etc/opensaf/node_name is an user exposed configuration * file. The node_name file contains the RDN value of the CLM @@ -573,8 +589,7 @@ uint32_t proc_node_up_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) if (node != NULL) { /* Retrieve IP information */ - if ((ip = (IPLIST *)ncs_patricia_tree_get( - &clms_cb->iplist, (uint8_t *)&nodeid)) == NULL) { + if (ip == NULL) { clm_msg.info.api_resp_info.rc = SA_AIS_ERR_NOT_EXIST; LOG_ER( "IP information not found for: %s with node_id: %u", @@ -653,8 +668,7 @@ uint32_t proc_node_up_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) /* Self Node needs to be added tp patricia tree before hand during init */ if (NULL == clms_node_get_by_id(nodeid)) { - node->node_id = - evt->info.msg.info.api_info.param.nodeup_info.node_id; + node->node_id = nodeup_info->node_id; TRACE("node->node_id %u node->nodeup %d", node->node_id, node->nodeup); @@ -665,29 +679,18 @@ uint32_t proc_node_up_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) "/node_name configuration"); } } - node->boot_time = - evt->info.msg.info.api_info.param.nodeup_info.boot_time; + + node->boot_time = nodeup_info->boot_time; /* Update the node with ipaddress information */ - if (ip->addr.length) { - memset(&node->node_addr, 0, sizeof(SaClmNodeAddressT)); - node->node_addr.family = ip->addr.family; - node->node_addr.length = ip->addr.length; - memcpy(node->node_addr.value, ip->addr.value, ip->addr.length); + if (nodeup_info->no_of_addresses != 0) { + memcpy(&(node->node_addr), &(nodeup_info->address), + sizeof(nodeup_info->address)); } else { /* AF_TIPC */ node->node_addr.family = 1; /* For backward compatibility */ node->node_addr.length = 0; } - // If the node has sent us its address, this takes precedence over the - // address given by MDS. - if (evt->info.msg.info.api_info.param.nodeup_info.no_of_addresses != - 0) { - SaClmNodeAddressT *node_addr = - &(evt->info.msg.info.api_info.param.nodeup_info.address); - memcpy(&(node->node_addr), node_addr, sizeof(*node_addr)); - } - /*When plm not in model,membership status depends only on the nodeup */ if (node->admin_state == SA_CLM_ADMIN_UNLOCKED) { -- 2.13.3 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel