Re: [PATCH 3/6] Add local_node_pos icmap key

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Steven Dake <sdake@xxxxxxxxxx>

On 01/19/2012 03:36 AM, Jan Friesse wrote:
> Key contains local node position in nodelist
> 
> Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx>
> ---
>  exec/totemconfig.c |   69 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 69 insertions(+), 0 deletions(-)
> 
> diff --git a/exec/totemconfig.c b/exec/totemconfig.c
> index 6425f2a..1d90417 100644
> --- a/exec/totemconfig.c
> +++ b/exec/totemconfig.c
> @@ -207,6 +207,57 @@ static int get_cluster_mcast_addr (
>  	return (err);
>  }
>  
> +static int find_local_node_in_nodelist(struct totem_config *totem_config)
> +{
> +	icmap_iter_t iter;
> +	const char *iter_key;
> +	int res = 0;
> +	int node_pos;
> +	int local_node_pos = -1;
> +	struct totem_ip_address bind_addr;
> +	int interface_up, interface_num;
> +	char tmp_key[ICMAP_KEYNAME_MAXLEN];
> +	char *node_addr_str;
> +	struct totem_ip_address node_addr;
> +
> +	res = totemip_iface_check(&totem_config->interfaces[0].bindnet,
> +		&bind_addr, &interface_up, &interface_num,
> +		totem_config->clear_node_high_bit);
> +	if (res == -1) {
> +		return (-1);
> +	}
> +
> +	iter = icmap_iter_init("nodelist.node.");
> +	while ((iter_key = icmap_iter_next(iter, NULL, NULL)) != NULL) {
> +		res = sscanf(iter_key, "nodelist.node.%u.%s", &node_pos, tmp_key);
> +		if (res != 2) {
> +			continue;
> +		}
> +
> +		if (strcmp(tmp_key, "ring0_addr") != 0) {
> +			continue;
> +		}
> +
> +		snprintf(tmp_key, ICMAP_KEYNAME_MAXLEN, "nodelist.node.%u.ring0_addr", node_pos);
> +		if (icmap_get_string(tmp_key, &node_addr_str) != CS_OK) {
> +			continue;
> +		}
> +
> +		res = totemip_parse (&node_addr, node_addr_str, 0);
> +		free(node_addr_str);
> +		if (res == -1) {
> +			continue ;
> +		}
> +
> +		if (totemip_equal(&bind_addr, &node_addr)) {
> +			local_node_pos = node_pos;
> +		}
> +	}
> +	icmap_iter_finalize(iter);
> +
> +	return (local_node_pos);
> +}
> +
>  extern int totem_config_read (
>  	struct totem_config *totem_config,
>  	const char **error_string)
> @@ -224,6 +275,7 @@ extern int totem_config_read (
>  	uint16_t u16;
>  	char *cluster_name = NULL;
>  	int i;
> +	int local_node_pos;
>  
>  	memset (totem_config, 0, sizeof (struct totem_config));
>  	totem_config->interfaces = malloc (sizeof (struct totem_interface) * INTERFACE_MAX);
> @@ -402,6 +454,23 @@ extern int totem_config_read (
>  
>  	free(cluster_name);
>  
> +	/*
> +	 * If we have nodelist ...
> +	 */
> +	if (icmap_get_string("nodelist.node.0.ring0_addr", &str) == CS_OK) {
> +		free(str);
> +		/*
> +		 * find local node
> +		 */
> +		local_node_pos = find_local_node_in_nodelist(totem_config);
> +		if (local_node_pos != -1) {
> +			/*
> +			 * Store icmap key
> +			 */
> +			icmap_set_uint32("nodelist.local_node_pos", local_node_pos);
> +		}
> +	}
> +
>  	add_totem_config_notification(totem_config);
>  
>  	return 0;

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux