From 2c42dd26b49d01922bd3df3ba26af70da0387a99 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 5 Feb 2014 17:24:16 -0800 Subject: [PATCH] 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) --- src/librados/RadosClient.cc | 12 ++++++++---- src/librados/librados.cc | 10 ++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) 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; -- 2.47.3