From 783b7ec847c7f987ac1814c9c41c91921cac4eba Mon Sep 17 00:00:00 2001 From: Dan Mick Date: Thu, 6 Jun 2013 13:01:12 -0700 Subject: [PATCH] librados, ceph, rados.py: -EINVAL for create with null/invalid name Means setting defaults should be more careful throughout as well Signed-off-by: Dan Mick --- src/ceph | 9 +++++++-- src/librados/librados.cc | 6 +++--- src/pybind/rados.py | 6 ++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/ceph b/src/ceph index adf1ea64c274d..edd859ff6311e 100755 --- a/src/ceph +++ b/src/ceph @@ -1309,7 +1309,7 @@ def main(): verbose = parsed_args.verbose # pass on --id, --name, --conf - name = None + name = 'client.admin' if parsed_args.client_id: name = 'client.' + parsed_args.client_id if parsed_args.client_name: @@ -1359,7 +1359,12 @@ def main(): 'err_to_stderr':'true', 'log_flush_on_exit':'true', } - cluster_handle = rados.Rados(name=name, clustername=parsed_args.cluster, + + clustername = 'ceph' + if parsed_args.cluster: + clustername = parsed_args.cluster + + cluster_handle = rados.Rados(name=name, clustername=clustername, conf_defaults=conf_defaults, conffile='') retargs = cluster_handle.conf_parse_argv(childargs) diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 2ba7ee3d24977..c69445551f7e2 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -1503,9 +1503,9 @@ extern "C" int rados_create2(rados_t *pcluster, const char *const clustername, { // client is assumed, but from_str will override CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT); - if (name) { - iparams.name.from_str(name); - } + if (!name || !iparams.name.from_str(name)) + return -EINVAL; + return rados_create_common(pcluster, clustername, &iparams); } diff --git a/src/pybind/rados.py b/src/pybind/rados.py index bc8b1b5a5e400..a260323a92510 100644 --- a/src/pybind/rados.py +++ b/src/pybind/rados.py @@ -182,7 +182,7 @@ class Rados(object): raise RadosStateError("You cannot perform that operation on a \ Rados object in state %s." % (self.state)) - def __init__(self, rados_id=None, name=None, clustername='ceph', + def __init__(self, rados_id=None, name='client.admin', clustername='ceph', conf_defaults=None, conffile=None, conf=None, flags=0): self.librados = CDLL('librados.so.2') self.cluster = c_void_p() @@ -193,9 +193,11 @@ Rados object in state %s." % (self.state)) raise TypeError('conffile must be a string or None') if rados_id and name: raise Error("Rados(): can't supply both rados_id and name") + if rados_id: + name = 'client.' + rados_id ret = run_in_thread(self.librados.rados_create2, (byref(self.cluster), c_char_p(clustername), - c_char_p(rados_id), c_uint64(flags))) + c_char_p(name), c_uint64(flags))) if ret != 0: raise Error("rados_initialize failed with error code: %d" % ret) -- 2.39.5