[sheepdog] [PATCH] dog/vdi: add expected location for vdi object location command

Liu Yuan namei.unix at gmail.com
Tue Jun 3 14:57:35 CEST 2014


On Fri, May 30, 2014 at 05:49:22PM +0800, Ruoyu wrote:
> Current dog vdi object location command only print the actual
> location of specified object. I think it is necessary to print
> the expected location for diagnosis. Suppose that a temporary
> object file ended with ".tmp" is existed in obj directory due to
> some error, dog vdi check command shows the object is missing
> and fixed. However, actually it is not fixed.
> 
> This example helps us to troubleshoot the problem is located at
> node 10.1.48.167:7009, not at other nodes.
> 
> $ dog vdi object location -i 409 rh54t
> Looking for the object 0xbfa2f600000199
> (vid 0xbfa2f6 idx 409, 2 copies) with 10 nodes
> 
> 10.1.48.167:7000 doesn't have the object
> 10.1.48.167:7001 doesn't have the object
> 10.1.48.167:7002 has the object
> 10.1.48.167:7003 doesn't have the object
> 10.1.48.167:7004 doesn't have the object
> 10.1.48.167:7005 doesn't have the object
> 10.1.48.167:7006 doesn't have the object
> 10.1.48.167:7007 doesn't have the object
> 10.1.48.167:7008 doesn't have the object
> 10.1.48.167:7009 doesn't have the object
> 
> According to sheepdog algorithm, the object should be located at:
> 10.1.48.167:7002 10.1.48.167:7009
> 
> Signed-off-by: Ruoyu <liangry at ucweb.com>
> ---
>  dog/vdi.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/dog/vdi.c b/dog/vdi.c
> index 866cb36..4c371e7 100644
> --- a/dog/vdi.c
> +++ b/dog/vdi.c
> @@ -824,6 +824,20 @@ static int vdi_object_map(int argc, char **argv)
>  	return EXIT_SUCCESS;
>  }
>  
> +static void print_expected_location(uint64_t oid, int copies)
> +{
> +	const struct sd_vnode *vnodes[SD_MAX_COPIES];
> +
> +	printf("\nAccording to sheepdog algorithm, "
> +		   "the object should be located at:\n");
> +	oid_to_vnodes(oid, &sd_vroot, copies, vnodes);
> +	for (int i = 0; i < copies; i++)
> +		printf("%s ", addr_to_str(
> +				vnodes[i]->node->nid.addr,
> +				vnodes[i]->node->nid.port));
> +	printf("\n");
> +}
> +
>  static int vdi_object_location(int argc, char **argv)
>  {
>  	const char *vdiname = argv[optind];
> @@ -846,6 +860,7 @@ static int vdi_object_location(int argc, char **argv)
>  		       " nodes\n\n",
>  		       vid, sd_nodes_nr);
>  		for_each_node_print(vid_to_vdi_oid(vid));
> +		print_expected_location(vid_to_vdi_oid(vid), inode->nr_copies);
>  		ret = EXIT_SUCCESS;
>  		goto out;
>  	}
> @@ -865,6 +880,7 @@ static int vdi_object_location(int argc, char **argv)
>  			oid, vid, idx, inode->nr_copies, sd_nodes_nr);
>  
>  		for_each_node_print(oid);
> +		print_expected_location(oid, inode->nr_copies);
>  	} else
>  		printf("The inode object 0x%" PRIx32 " idx"
>  		       " %"PRIu64" is not allocated\n",
> -- 
> 1.8.3.2
> 
> 
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog

You need to update the tests/functional/029 for this patch

Thanks
Yuan



More information about the sheepdog mailing list