]> git-server-git.apps.pok.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 20:53:12 +0000 (12:53 -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>
src/librados/RadosClient.cc
src/librados/librados.cc

index 0f42caa3a5dd093e81b258cf144f58bac86d9eeb..691b85b98fb3c6ef1e2d963b21b576d956b7a247 100644 (file)
@@ -481,9 +481,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();
@@ -491,7 +493,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)
@@ -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() {
index 4925d5eec1d344ec97df0c2777d78be106017dad..c62d2b1db1c3478a5547ef5bd2cd955e825180d3 100644 (file)
@@ -1631,6 +1631,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) {
@@ -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<std::string> pools;
-  client->pool_list(pools);
+  int r = client->pool_list(pools);
+  if (r < 0)
+    return r;
 
   if (!buf)
     return -EINVAL;