From: Josh Durgin Date: Thu, 6 Feb 2014 01:24:16 +0000 (-0800) Subject: librados: check and return on error so timeouts work X-Git-Tag: v0.78~206^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8e9459e897b1bc2f97d52ee07701fd22069efcf3;p=ceph.git librados: check and return on error so timeouts work Some functions could not previously return errors, but they had an int return value, which can now receive ETIMEDOUT. Signed-off-by: Josh Durgin --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 0f42caa3a5dd..691b85b98fb3 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -481,9 +481,11 @@ int librados::RadosClient::get_pool_stats(std::list& pools, Mutex mylock("RadosClient::get_pool_stats::mylock"); Cond cond; bool done; + int ret = 0; lock.Lock(); - objecter->get_pool_stats(pools, &result, new C_SafeCond(&mylock, &cond, &done)); + objecter->get_pool_stats(pools, &result, new C_SafeCond(&mylock, &cond, &done, + &ret)); lock.Unlock(); mylock.Lock(); @@ -491,7 +493,7 @@ int librados::RadosClient::get_pool_stats(std::list& pools, cond.Wait(mylock); mylock.Unlock(); - return 0; + return ret; } int librados::RadosClient::get_fs_stats(ceph_statfs& stats) @@ -499,15 +501,17 @@ int librados::RadosClient::get_fs_stats(ceph_statfs& stats) Mutex mylock ("RadosClient::get_fs_stats::mylock"); Cond cond; bool done; + int ret = 0; + lock.Lock(); - objecter->get_fs_stats(stats, new C_SafeCond(&mylock, &cond, &done)); + objecter->get_fs_stats(stats, new C_SafeCond(&mylock, &cond, &done, &ret)); lock.Unlock(); mylock.Lock(); while (!done) cond.Wait(mylock); mylock.Unlock(); - return 0; + return ret; } void librados::RadosClient::get() { diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 4925d5eec1d3..c62d2b1db1c3 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -1631,6 +1631,8 @@ int librados::Rados::get_pool_stats(std::list& v, string& category, { map rawresult; int r = client->get_pool_stats(v, rawresult); + if (r < 0) + return r; for (map::iterator p = rawresult.begin(); p != rawresult.end(); ++p) { @@ -1945,7 +1947,9 @@ extern "C" int rados_pool_reverse_lookup(rados_t cluster, int64_t id, { librados::RadosClient *radosp = (librados::RadosClient *)cluster; std::string name; - radosp->pool_get_name(id, &name); + int r = radosp->pool_get_name(id, &name); + if (r < 0) + return r; if (name.length() >= maxlen) return -ERANGE; strcpy(buf, name.c_str()); @@ -1968,7 +1972,9 @@ extern "C" int rados_pool_list(rados_t cluster, char *buf, size_t len) { librados::RadosClient *client = (librados::RadosClient *)cluster; std::list pools; - client->pool_list(pools); + int r = client->pool_list(pools); + if (r < 0) + return r; if (!buf) return -EINVAL;