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.67.6~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2c42dd26b49d01922bd3df3ba26af70da0387a99;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 (cherry picked from commit 8e9459e897b1bc2f97d52ee07701fd22069efcf3) --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index e434f224331..4b426842449 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -412,9 +412,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(); @@ -422,7 +424,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) @@ -430,15 +432,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 0a36092a3d9..751d955547d 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -1484,6 +1484,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) { @@ -1793,7 +1795,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()); @@ -1816,7 +1820,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;