X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Frbd.c;h=87ed360f7c26a25fb401aac833b9fe05d0c288f4;hp=8252d270b1bcb44eda6095281a413a3cb0cefdaf;hb=6e20c6e7f357d9286e0c3aef9ca93ebcefab2f02;hpb=fe8d0f4c54f0c308c9a02a4e3c2f5084e8bf5461 diff --git a/engines/rbd.c b/engines/rbd.c index 8252d270..87ed360f 100644 --- a/engines/rbd.c +++ b/engines/rbd.c @@ -27,6 +27,7 @@ struct rbd_data { struct rbd_options { void *pad; + char *cluster_name; char *rbd_name; char *pool_name; char *client_name; @@ -34,6 +35,15 @@ struct rbd_options { }; static struct fio_option options[] = { + { + .name = "clustername", + .lname = "ceph cluster name", + .type = FIO_OPT_STR_STORE, + .help = "Cluster name for ceph", + .off1 = offsetof(struct rbd_options, cluster_name), + .category = FIO_OPT_C_ENGINE, + .group = FIO_OPT_G_RBD, + }, { .name = "rbdname", .lname = "rbd engine rbdname", @@ -112,7 +122,25 @@ static int _fio_rbd_connect(struct thread_data *td) struct rbd_options *o = td->eo; int r; - r = rados_create(&rbd->cluster, o->client_name); + if (o->cluster_name) { + char *client_name = NULL; + + /* + * If we specify cluser name, the rados_creat2 + * will not assume 'client.'. name is considered + * as a full type.id namestr + */ + if (!index(o->client_name, '.')) { + client_name = calloc(1, strlen("client.") + + strlen(o->client_name) + 1); + strcat(client_name, "client."); + o->client_name = strcat(client_name, o->client_name); + } + r = rados_create2(&rbd->cluster, o->cluster_name, + o->client_name, 0); + } else + r = rados_create(&rbd->cluster, o->client_name); + if (r < 0) { log_err("rados_create failed.\n"); goto failed_early;