int64_t librados::RadosClient::lookup_pool(const char *name)
{
Mutex::Locker l(lock);
+ wait_for_osdmap();
int64_t ret = osdmap.lookup_pg_pool_name(name);
if (ret < 0)
return -ENOENT;
int librados::RadosClient::pool_get_auid(uint64_t pool_id, unsigned long long *auid)
{
Mutex::Locker l(lock);
+ wait_for_osdmap();
const pg_pool_t *pg = osdmap.get_pg_pool(pool_id);
if (!pg)
return -ENOENT;
int librados::RadosClient::pool_get_name(uint64_t pool_id, std::string *s)
{
Mutex::Locker l(lock);
+ wait_for_osdmap();
const char *str = osdmap.get_pool_name(pool_id);
if (!str)
return -ENOENT;
return -EINVAL;
Mutex::Locker l(lock);
ostringstream oss;
- oss << osdmap.get_fsid();
+ oss << monclient.get_fsid();
*s = oss.str();
return 0;
}
return true;
}
+void librados::RadosClient::wait_for_osdmap()
+{
+ assert(lock.is_locked());
+ if (osdmap.get_epoch() == 0) {
+ ldout(cct, 10) << __func__ << " waiting" << dendl;
+ while (osdmap.get_epoch() == 0)
+ cond.Wait(lock);
+ ldout(cct, 10) << __func__ << " done waiting" << dendl;
+ }
+}
+
int librados::RadosClient::pool_list(std::list<std::string>& v)
{
Mutex::Locker l(lock);
+ wait_for_osdmap();
for (map<int64_t,pg_pool_t>::const_iterator p = osdmap.get_pools().begin();
p != osdmap.get_pools().end();
++p)
int librados::RadosClient::pool_delete(const char *name)
{
lock.Lock();
+ wait_for_osdmap();
int tmp_pool_id = osdmap.lookup_pg_pool_name(name);
if (tmp_pool_id < 0) {
lock.Unlock();
int librados::RadosClient::pool_delete_async(const char *name, PoolAsyncCompletionImpl *c)
{
Mutex::Locker l(lock);
+ wait_for_osdmap();
int tmp_pool_id = osdmap.lookup_pg_pool_name(name);
if (tmp_pool_id < 0)
return -ENOENT;