[stgt] [PATCH 2/2] Add "cluster" option to bs_rbd.c to specify cluster name

Dan Mick dan.mick at inktank.com
Mon Feb 10 23:12:46 CET 2014


except for the one if() with no space after the 'if':

Reviewed-by: Dan Mick <dan.mick at inktank.com>

On 01/21/2014 06:14 PM, Thomas Matysik wrote:
> This patch allows the Ceph cluster name to be specified in --bsopts
> using the 'cluster=' option.
>
> Signed-off-by: Thomas Matysik <thomas at belton.co.nz>
> ---
>   doc/README.rbd |  8 +++++++-
>   usr/bs_rbd.c   | 20 ++++++++++++++++++--
>   2 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/doc/README.rbd b/doc/README.rbd
> index 274cc4d..18aeceb 100644
> --- a/doc/README.rbd
> +++ b/doc/README.rbd
> @@ -43,7 +43,13 @@ something like "tgt" so that the name of the ceph client is
>   for the tgt client compared to others, and sets the default log path, etc.
>   See the Ceph documentation regarding client names.
>
> -To specify both options, separate them with ';', and since you are,
> +cluster=<cluster name>
> +
> +This sets the Ceph cluster name, if you have multiple clusters or
> +if your cluster name is anything other than "ceph".
> +This is in turn used by librados to find the conf file and key files.
> +
> +To specify multiple options, separate them with ';', and since you are,
>   make sure to quote the option string to protect the semicolon from
>   the shell:
>
> diff --git a/usr/bs_rbd.c b/usr/bs_rbd.c
> index f797fd5..cbe2585 100644
> --- a/usr/bs_rbd.c
> +++ b/usr/bs_rbd.c
> @@ -517,17 +517,21 @@ static tgtadm_err bs_rbd_init(struct scsi_lu *lu, char *bsopts)
>   	struct active_rbd *rbd = RBDP(lu);
>   	char *confname = NULL;
>   	char *clientid = NULL;
> +	char *clustername = NULL;
> +	char clientid_full[128];
>   	char *ignore = NULL;
>
>   	dprintf("bs_rbd_init bsopts: \"%s\"\n", bsopts);
>
> -	// look for conf= or id=
> +	// look for conf= or id= or cluster=
>
>   	while (bsopts && strlen(bsopts)) {
>   		if (is_opt("conf", bsopts))
>   			confname = slurp_value(&bsopts);
>   		else if (is_opt("id", bsopts))
>   			clientid = slurp_value(&bsopts);
> +		else if (is_opt("cluster", bsopts))
> +			clustername = slurp_value(&bsopts);
>   		else {
>   			ignore = slurp_to_semi(&bsopts);
>   			eprintf("bs_rbd: ignoring unknown option \"%s\"\n",
> @@ -541,10 +545,22 @@ static tgtadm_err bs_rbd_init(struct scsi_lu *lu, char *bsopts)
>   		eprintf("bs_rbd_init: clientid %s\n", clientid);
>   	if (confname)
>   		eprintf("bs_rbd_init: confname %s\n", confname);
> +	if (clustername)
> +		eprintf("bs_rbd_init: clustername %s\n", clustername);
>
>   	eprintf("bs_rbd_init bsopts=%s\n", bsopts);
>   	/* clientid may be set by -i/--id */
> -	rados_ret = rados_create(&rbd->cluster, clientid);
> +	/* If clustername is set, then we use rados_create2, else rados_create */
> +	if (clustername) {
> +		/* rados_create2 wants the full client name */
> +		if(clientid)
> +			snprintf(clientid_full, sizeof clientid_full, "client.%s", clientid);
> +		else /* if not specified, default to client.admin */
> +			snprintf(clientid_full, sizeof clientid_full, "client.admin");
> +		rados_ret = rados_create2(&rbd->cluster, clustername, clientid_full, 0);
> +	} else {
> +		rados_ret = rados_create(&rbd->cluster, clientid);
> +	}
>   	if (rados_ret < 0) {
>   		eprintf("bs_rbd_init: rados_create: %d\n", rados_ret);
>   		return ret;
>
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list