From: Li Wang Date: Mon, 7 May 2018 08:52:15 +0000 (+0000) Subject: librados: check latest osdmap for pool_get_name X-Git-Tag: v14.0.0~179^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=95182a8de3ee5ad24753d1a12ae03a41e0925da1;p=ceph.git librados: check latest osdmap for pool_get_name Signed-off-by: Li Wang --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 06436be1835dc..2e79b7e965dea 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -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; } diff --git a/src/librados/RadosClient.h b/src/librados/RadosClient.h index 66016b100613a..bf4105d518462 100644 --- a/src/librados/RadosClient.h +++ b/src/librados/RadosClient.h @@ -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 >& ls); int get_pool_stats(std::list& ls, map& result);