]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: check and return on error so timeouts work
authorJosh Durgin <josh.durgin@inktank.com>
Thu, 6 Feb 2014 01:24:16 +0000 (17:24 -0800)
committerJosh Durgin <josh.durgin@inktank.com>
Mon, 10 Feb 2014 23:45:40 +0000 (15:45 -0800)
Some functions could not previously return errors, but they had an
int return value, which can now receive ETIMEDOUT.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit 8e9459e897b1bc2f97d52ee07701fd22069efcf3)

src/librados/RadosClient.cc
src/librados/librados.cc

index e434f224331eba4c2ae7debfa8bcf8b483839ba1..4b4268424494d587fb25b1b05e30986f262aa511 100644 (file)
@@ -412,9 +412,11 @@ int librados::RadosClient::get_pool_stats(std::list<string>& 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<string>& 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() {
index 0a36092a3d97041b5f38a5b5d27b9e4ed356e9ab..751d955547d5de1e1fde5fe0158100bf4989fa98 100644 (file)
@@ -1484,6 +1484,8 @@ int librados::Rados::get_pool_stats(std::list<string>& v, string& category,
 {
   map<string,::pool_stat_t> rawresult;
   int r = client->get_pool_stats(v, rawresult);
+  if (r < 0)
+    return r;
   for (map<string,::pool_stat_t>::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<std::string> pools;
-  client->pool_list(pools);
+  int r = client->pool_list(pools);
+  if (r < 0)
+    return r;
 
   if (!buf)
     return -EINVAL;