[sheepdog] [PATCH v2 2/4] sheep: add user-defined free disk space size

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Sat Aug 4 08:06:02 CEST 2012


At Fri,  3 Aug 2012 20:50:09 +0800,
levin li wrote:
> 
> From: levin li <xingke.lwp at taobao.com>
> 
> Sometimes user doesn't want sheep to use all the disk space,
> maybe some space in the same disk is for other use, such as
> object cache, or something else, so we can't only get the free
> space by syscall, we also should provide a way for users to
> specify the free disk space
> 
> Signed-off-by: levin li <xingke.lwp at taobao.com>
> ---
>  sheep/sheep.c |   15 ++++++++++++++-
>  sheep/store.c |    5 +++++
>  2 files changed, 19 insertions(+), 1 deletions(-)
> 
> diff --git a/sheep/sheep.c b/sheep/sheep.c
> index 52a294b..1c11d86 100644
> --- a/sheep/sheep.c
> +++ b/sheep/sheep.c
> @@ -47,13 +47,14 @@ static struct option const long_options[] = {
>  	{"stdout", no_argument, NULL, 'o'},
>  	{"port", required_argument, NULL, 'p'},
>  	{"vnodes", required_argument, NULL, 'v'},
> +	{"disk-space", required_argument, NULL, 's'},
>  	{"enable-cache", required_argument, NULL, 'w'},
>  	{"zone", required_argument, NULL, 'z'},
>  	{"pidfile", required_argument, NULL, 'P'},
>  	{NULL, 0, NULL, 0},
>  };
>  
> -static const char *short_options = "c:dDfghl:op:P:v:w:y:z:";
> +static const char *short_options = "c:dDfghl:op:P:v:s:w:y:z:";
>  
>  static void usage(int status)
>  {
> @@ -76,6 +77,7 @@ Options:\n\
>    -p, --port              specify the TCP port on which to listen\n\
>    -P, --pidfile           create a pid file\n\
>    -v, --vnodes            specify the number of virtual nodes\n\
> +  -s, --disk-space        specify the free disk space in megabytes\n\
>    -w, --enable-cache      enable object cache and specify the max cache size in megabytes\n\
>    -y, --myaddr            specify the address advertised to other sheep\n\
>    -z, --zone              specify the zone id\n\
> @@ -187,6 +189,7 @@ int main(int argc, char **argv)
>  	char path[PATH_MAX];
>  	int64_t zone = -1;
>  	int64_t cache_size = 0;
> +	int32_t free_space = 0;

Should be int64_t?

>  	int nr_vnodes = SD_DEFAULT_VNODES;
>  	bool explicit_addr = false;
>  	int af;
> @@ -283,6 +286,16 @@ int main(int argc, char **argv)
>  				exit(1);
>  			}
>  			break;
> +		case 's':
> +			free_space = strtol(optarg, &p, 10);

Should use strtoll()?

> +			if (optarg == p || free_space < 0 || UINT32_MAX < free_space) {

INT64_MAX instead of UINT32_MAX?

Thanks,

Kazutaka


> +				fprintf(stderr, "Invalid free space size '%s': "
> +					"must be an integer between 0 and %u\n",
> +					optarg, UINT32_MAX);
> +				exit(1);
> +			}
> +			sys->disk_space = free_space;
> +			break;
>  		case 'c':
>  			sys->cdrv = find_cdrv(optarg);
>  			if (!sys->cdrv) {
> diff --git a/sheep/store.c b/sheep/store.c
> index 2c2f94b..e320072 100644
> --- a/sheep/store.c
> +++ b/sheep/store.c
> @@ -457,6 +457,11 @@ static int init_disk_space(const char *base_path)
>  		goto out;
>  	}
>  
> +	if (sys->disk_space) {
> +		ret = set_cluster_space(sys->disk_space);
> +		goto out;
> +	}
> +
>  	ret = statfs(base_path, &sf);
>  	if (ret < 0) {
>  		dprintf("get disk space failed %m\n");
> -- 
> 1.7.1
> 
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog



More information about the sheepdog mailing list