[Sheepdog] [PATCH] factor a finish_join helper out of update_cluster_info

Liu Yuan namei.unix at gmail.com
Sat Apr 28 06:03:41 CEST 2012


On 04/27/2012 11:35 PM, Christoph Hellwig wrote:

> Signed-off-by: Christoph Hellwig <hch at lst.de>
> 
> Index: sheepdog/sheep/group.c
> ===================================================================
> --- sheepdog.orig/sheep/group.c	2012-04-27 17:19:46.000000000 +0200
> +++ sheepdog/sheep/group.c	2012-04-27 17:20:05.912081474 +0200
> @@ -524,22 +524,10 @@ static void get_vdi_bitmap_from_sd_list(
>  		get_vdi_bitmap_from(sys->nodes + i);
>  }
>  
> -static void update_cluster_info(struct join_message *msg,
> -				struct sd_node *joined,
> -				struct sd_node *nodes,
> -				size_t nr_nodes)
> -{
> -	int i, le;
> -	int nr_leave_nodes;
> -	struct node *n;
> -
> -	eprintf("status = %d, epoch = %d, %x, %d\n", msg->cluster_status, msg->epoch, msg->result, sys->join_finished);
> -
> -	if (sys_stat_join_failed())
> -		return;
> -
> -	if (sys->join_finished)
> -		goto join_finished;
> +static void finish_join(struct join_message *msg, struct sd_node *joined,
> +		struct sd_node *nodes, size_t nr_nodes)
> +{
> +	int i;
>  
>  	sys->nr_copies = msg->nr_copies;
>  	sys->epoch = msg->epoch;
> @@ -554,29 +542,30 @@ static void update_cluster_info(struct j
>  	qsort(sys->nodes, sys->nr_nodes, sizeof(*sys->nodes), node_cmp);
>  
>  	if (msg->cluster_status != SD_STATUS_OK) {
> +		int nr_leave_nodes, le;
> +
>  		nr_leave_nodes = msg->nr_leave_nodes;
>  		le = get_latest_epoch();
>  		for (i = 0; i < nr_leave_nodes; i++) {
> -			n = zalloc(sizeof(*n));
> -			if (!n)
> -				panic("failed to allocate memory\n");
> +			struct node *n;
>  
> -			if (find_entry_list(&msg->leave_nodes[i], &sys->leave_list)
> -			    || !find_entry_epoch(&msg->leave_nodes[i], le)) {
> -				free(n);
> +			if (find_entry_list(&msg->leave_nodes[i], &sys->leave_list) ||
> +			    !find_entry_epoch(&msg->leave_nodes[i], le)) {
>  				continue;
>  			}
>  
> +			n = zalloc(sizeof(*n));
> +			if (!n)
> +				panic("failed to allocate memory\n");
>  			n->ent = msg->leave_nodes[i];
> -
>  			list_add_tail(&n->list, &sys->leave_list);
>  		}
>  	}
>  
>  	sys->join_finished = 1;
>  
> -	if ((msg->cluster_status == SD_STATUS_OK || msg->cluster_status == SD_STATUS_HALT)
> -	     && msg->inc_epoch)
> +	if ((msg->cluster_status == SD_STATUS_OK ||
> +	     msg->cluster_status == SD_STATUS_HALT) && msg->inc_epoch)
>  		update_epoch_log(sys->epoch);
>  
>  	if (!sd_store && strlen((char *)msg->store)) {
> @@ -588,8 +577,20 @@ static void update_cluster_info(struct j
>  		} else
>  				panic("backend store %s not supported\n", msg->store);
>  	}
> +}
> +
> +static void update_cluster_info(struct join_message *msg,
> +		struct sd_node *joined, struct sd_node *nodes, size_t nr_nodes)
> +{
> +	eprintf("status = %d, epoch = %d, %x, %d\n", msg->cluster_status,
> +		msg->epoch, msg->result, sys->join_finished);
> +
> +	if (sys_stat_join_failed())
> +		return;
> +
> +	if (!sys->join_finished)
> +		finish_join(msg, joined, nodes, nr_nodes);
>  
> -join_finished:
>  	sys->nodes[sys->nr_nodes++] = *joined;
>  	qsort(sys->nodes, sys->nr_nodes, sizeof(*sys->nodes), node_cmp);
>  
> @@ -608,11 +609,9 @@ join_finished:
>  		}
>  	}
>  	update_vnode_info();
> +	sys_stat_set(msg->cluster_status);
>  
>  	print_node_list(sys->nodes, sys->nr_nodes);
> -
> -	sys_stat_set(msg->cluster_status);
> -	return;
>  }
>  
>  static void __sd_notify(struct event_struct *cevent)
> @@ -831,7 +830,10 @@ static void __sd_join_done(struct event_
>  
>  	print_node_list(sys->nodes, sys->nr_nodes);
>  
> -	update_cluster_info(jm, &w->joined, w->member_list, w->member_list_entries);
> +	if (!sys_stat_join_failed()) {
> +		update_cluster_info(jm, &w->joined, w->member_list,
> +				    w->member_list_entries);
> +	}
>  
>  	if (sys_can_recover() && jm->inc_epoch) {
>  		list_for_each_entry_safe(node, t, &sys->leave_list, list) {


Applied, thanks

Yuan



More information about the sheepdog mailing list