[sheepdog] [PATCH] dog/node: add raw output support for dog node md info

Liu Yuan namei.unix at gmail.com
Fri Apr 25 05:16:48 CEST 2014


On Thu, Apr 24, 2014 at 05:22:57PM +0800, Ruoyu wrote:
> As titled. A command line crash as below is also fixed.
> 
> $ dog node md plug -A
> dog exits unexpectedly (Segmentation fault).
> dog() [0x405dda]
> /lib/x86_64-linux-gnu/libpthread.so.0(+0xfbaf) [0x7fd6003c9baf]
> dog() [0x40d8b2]
> dog() [0x40706e]
> dog() [0x40398c]
> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf4) [0x7fd600013de4]
> dog() [0x403cea]
> Segmentation fault
> 
> Signed-off-by: Ruoyu <liangry at ucweb.com>
> ---
>  dog/node.c | 29 +++++++++++++++++++++--------
>  1 file changed, 21 insertions(+), 8 deletions(-)
> 
> diff --git a/dog/node.c b/dog/node.c
> index 791a4c6..a9799ff 100644
> --- a/dog/node.c
> +++ b/dog/node.c
> @@ -396,11 +396,19 @@ static int node_md_info(struct node_id *nid)
>  		uint64_t size = info.disk[i].free + info.disk[i].used;
>  		int ratio = (int)(((double)info.disk[i].used / size) * 100);
>  
> -		fprintf(stdout, "%2d\t%s\t%s\t%s\t%3d%%\t%s\n",
> -			info.disk[i].idx, strnumber(size),
> -			strnumber(info.disk[i].used),
> -			strnumber(info.disk[i].free),
> -			ratio, info.disk[i].path);
> +		if (raw_output)
> +			fprintf(stdout, "%s %d %s %s %s %d%% %s\n",
> +				addr_to_str(nid->addr, nid->port),
> +				info.disk[i].idx, strnumber(size),
> +				strnumber(info.disk[i].used),
> +				strnumber(info.disk[i].free),
> +				ratio, info.disk[i].path);
> +		else
> +			fprintf(stdout, "%2d\t%s\t%s\t%s\t%3d%%\t%s\n",
> +				info.disk[i].idx, strnumber(size),
> +				strnumber(info.disk[i].used),
> +				strnumber(info.disk[i].free),
> +				ratio, info.disk[i].path);
>  	}
>  	return EXIT_SUCCESS;
>  }
> @@ -410,13 +418,15 @@ static int md_info(int argc, char **argv)
>  	struct sd_node *n;
>  	int ret, i = 0;
>  
> -	fprintf(stdout, "Id\tSize\tUsed\tAvail\tUse%%\tPath\n");
> +	if (!raw_output)
> +		fprintf(stdout, "Id\tSize\tUsed\tAvail\tUse%%\tPath\n");
>  
>  	if (!node_cmd_data.all_nodes)
>  		return node_md_info(&sd_nid);
>  
>  	rb_for_each_entry(n, &sd_nroot, rb) {
> -		fprintf(stdout, "Node %d:\n", i++);
> +		if (!raw_output)
> +			fprintf(stdout, "Node %d:\n", i++);
>  		ret = node_md_info(&n->nid);
>  		if (ret != EXIT_SUCCESS)
>  			return EXIT_FAILURE;
> @@ -430,6 +440,9 @@ static int do_plug_unplug(char *disks, bool plug)
>  	struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
>  	int ret;
>  
> +	if (!disks)
> +		return EXIT_USAGE;
> +
>  	if (!strlen(disks)) {
>  		sd_err("Empty path isn't allowed");
>  		return EXIT_FAILURE;
> @@ -604,7 +617,7 @@ static struct subcommand node_cmd[] = {
>  	 CMD_NEED_NODELIST, node_info},
>  	{"recovery", NULL, "aphPr", "show recovery information of nodes", NULL,
>  	 CMD_NEED_NODELIST, node_recovery, node_options},
> -	{"md", "[disks]", "apAh", "See 'dog node md' for more information",
> +	{"md", "[disks]", "aprAh", "See 'dog node md' for more information",
>  	 node_md_cmd, CMD_NEED_ARG, node_md, node_options},
>  	{"stat", NULL, "aprwh", "show stat information about the node", NULL,
>  	 0, node_stat, node_options},
> -- 
> 1.8.3.2
> 
> 
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog

Applied thanks!

Yuan



More information about the sheepdog mailing list