]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: check latest osdmap for pool_get_name
authorLi Wang <laurence.liwang@gmail.com>
Mon, 7 May 2018 08:52:15 +0000 (08:52 +0000)
committerLi Wang <laurence.liwang@gmail.com>
Mon, 7 May 2018 08:58:37 +0000 (08:58 +0000)
Signed-off-by: Li Wang <laurence.liwang@gmail.com>
src/librados/RadosClient.cc
src/librados/RadosClient.h

index 06436be1835dcafe609727f839c1c6910fabb830..2e79b7e965dea779ec47063737ee1bb0069d3b1a 100644 (file)
@@ -188,11 +188,12 @@ int librados::RadosClient::pool_get_auid(uint64_t pool_id,
   return r;
 }
 
-int librados::RadosClient::pool_get_name(uint64_t pool_id, std::string *s)
+int librados::RadosClient::pool_get_name(uint64_t pool_id, std::string *s, bool wait_latest_map)
 {
   int r = wait_for_osdmap();
   if (r < 0)
     return r;
+  retry:
   objecter->with_osdmap([&](const OSDMap& o) {
       if (!o.have_pg_pool(pool_id)) {
        r = -ENOENT;
@@ -201,6 +202,14 @@ int librados::RadosClient::pool_get_name(uint64_t pool_id, std::string *s)
        *s = o.get_pool_name(pool_id);
       }
     });
+  if (r == -ENOENT && wait_latest_map) {
+    r = wait_for_latest_osdmap();
+    if (r < 0)
+      return r;
+    wait_latest_map = false;
+    goto retry;
+  }
+
   return r;
 }
 
index 66016b100613a83acc8fb5eb35ddf5b0e730eb97..bf4105d518462a03cb053afa5771784c6be6c520 100644 (file)
@@ -114,7 +114,7 @@ public:
   uint64_t pool_required_alignment(int64_t pool_id);
   int pool_required_alignment2(int64_t pool_id, uint64_t *alignment);
   int pool_get_auid(uint64_t pool_id, unsigned long long *auid);
-  int pool_get_name(uint64_t pool_id, std::string *auid);
+  int pool_get_name(uint64_t pool_id, std::string *auid, bool wait_latest_map = false);
 
   int pool_list(std::list<std::pair<int64_t, string> >& ls);
   int get_pool_stats(std::list<string>& ls, map<string,::pool_stat_t>& result);