[sheepdog] [PATCH 3/4] sheep: recalculate the vnodes number when epoch changes

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Fri Aug 3 08:08:50 CEST 2012


At Wed,  1 Aug 2012 10:56:15 +0800,
levin li wrote:
> 
> From: levin li <xingke.lwp at taobao.com>
> 
> When epoch changes, new node join or old node leave, we should
> recalculate the vnode_info for every sd_node, and the disk space
> is stored in sd_node, transfered to every other node together with
> join message.
> 
> Signed-off-by: levin li <xingke.lwp at taobao.com>
> ---
>  include/internal_proto.h |    1 +
>  sheep/group.c            |   24 ++++++++++++++++++++++++
>  2 files changed, 25 insertions(+), 0 deletions(-)
> 
> diff --git a/include/internal_proto.h b/include/internal_proto.h
> index 3e22124..d48c8af 100644
> --- a/include/internal_proto.h
> +++ b/include/internal_proto.h
> @@ -174,6 +174,7 @@ struct sd_node {
>  	struct node_id  nid;
>  	uint16_t	nr_vnodes;
>  	uint32_t	zone;
> +	uint32_t        space;
>  };

Please increment SD_SHEEP_PROTO_VER when changing this structure.


>  static void update_cluster_info(struct join_message *msg,
>  				struct sd_node *joined, struct sd_node *nodes,
>  				size_t nr_nodes)
> @@ -784,6 +802,8 @@ static void update_cluster_info(struct join_message *msg,
>  	if (!sys->join_finished)
>  		finish_join(msg, joined, nodes, nr_nodes);
>  
> +	recalculate_vnodes(nodes, nr_nodes);
> +
>  	old_vnode_info = current_vnode_info;
>  	current_vnode_info = alloc_vnode_info(nodes, nr_nodes);

IIUC, This recalculation should be done only when
sys->disable_recovery is false.  In addition, you need to recalculate
vnodes when automatic object recovery is turned on in
cluster_enable_recover().

Thanks,

Kazutaka



More information about the sheepdog mailing list