[Sheepdog] [PATCH] show vdi tag and clone mark in the output of 'collie vdi list'

Liu Yuan namei.unix at gmail.com
Tue Apr 17 09:22:10 CEST 2012


On 04/17/2012 02:09 PM, Li Wenpeng wrote:

> From: levin li <xingke.lwp at taobao.com>
> 
> It's useful to show the tag of every vdi, and the clone mark makes
> it easy to know whether the vdi is cloned from other.
> 
> Signed-off-by: levin li <xingke.lwp at taobao.com>
> ---
>  collie/vdi.c |   21 +++++++++++++--------
>  1 files changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/collie/vdi.c b/collie/vdi.c
> index 8260eba..56266ec 100644
> --- a/collie/vdi.c
> +++ b/collie/vdi.c
> @@ -65,7 +65,7 @@ static int parse_option_size(const char *value, uint64_t *ret)
>  static void print_vdi_list(uint32_t vid, char *name, char *tag, uint32_t snapid,
>  			   uint32_t flags, struct sheepdog_inode *i, void *data)
>  {
> -	int idx;
> +	int idx, is_clone = 0;
>  	uint64_t my_objs, cow_objs;
>  	char vdi_size_str[16], my_objs_str[16], cow_objs_str[16];
>  	time_t ti;
> @@ -100,19 +100,24 @@ static void print_vdi_list(uint32_t vid, char *name, char *tag, uint32_t snapid,
>  	size_to_str(my_objs * SD_DATA_OBJ_SIZE, my_objs_str, sizeof(my_objs_str));
>  	size_to_str(cow_objs * SD_DATA_OBJ_SIZE, cow_objs_str, sizeof(cow_objs_str));
>  
> +	if (i->snap_id == 1 && i->parent_vdi_id != 0)
> +		is_clone = 1;
> +
>  	if (raw_output) {
> -		printf("%c ", is_current(i) ? '=' : 's');
> +		printf("%c ", is_current(i) ? (is_clone ? 'c' : '=') : 's');
>  		while (*name) {
>  			if (isspace(*name) || *name == '\\')
>  				putchar('\\');
>  			putchar(*name++);
>  		}
> -		printf(" %d %s %s %s %s %" PRIx32 "\n", snapid,
> -				vdi_size_str, my_objs_str, cow_objs_str, dbuf, vid);
> +		printf(" %d %s %s %s %s %" PRIx32 " %s\n", snapid,
> +				vdi_size_str, my_objs_str, cow_objs_str, dbuf, vid,
> +				i->tag);
>  	} else {
> -		printf("%c %-8s %5d %7s %7s %7s %s  %7" PRIx32 "\n",
> -				is_current(i) ? ' ' : 's', name, snapid,
> -				vdi_size_str, my_objs_str, cow_objs_str, dbuf, vid);
> +		printf("%c %-8s %5d %7s %7s %7s %s  %7" PRIx32 "  %s\n",
> +				is_current(i) ? (is_clone ? 'c' : ' ') : 's',
> +				name, snapid, vdi_size_str, my_objs_str, cow_objs_str,
> +				dbuf, vid, i->tag);
>  	}
>  }
>  
> @@ -297,7 +302,7 @@ static int vdi_list(int argc, char **argv)
>  	char *vdiname = argv[optind];
>  
>  	if (!raw_output)
> -		printf("  Name        Id    Size    Used  Shared    Creation time   VDI id\n");
> +		printf("  Name        Id    Size    Used  Shared    Creation time   VDI id  Tag\n");
>  
>  	if (vdiname) {
>  		struct get_vdi_info info;


Applied,thanks

Yuan



More information about the sheepdog mailing list