From: Pavan Rallabhandi Date: Fri, 8 Aug 2014 10:16:18 +0000 (+0530) Subject: RadosClient: Enable pool existence check X-Git-Tag: v0.85~71^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e4b00718ef9cf4b207566b86173b689a7cd9f735;p=ceph.git RadosClient: Enable pool existence check Pool create interfaces would now refer to updated osdmap for pool existence, such that an appropriate message is thrown to the user when run via CLI. Fixes: #8835 Signed-off-by: Pavan Rallabhandi --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 249c34f564f0..ee1ceed79457 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -544,13 +544,19 @@ bool librados::RadosClient::put() { int librados::RadosClient::pool_create(string& name, unsigned long long auid, __u8 crush_rule) { - int reply; + lock.Lock(); + + int r = wait_for_osdmap(); + if (r < 0) { + lock.Unlock(); + return r; + } Mutex mylock ("RadosClient::pool_create::mylock"); + int reply; Cond cond; bool done; Context *onfinish = new C_SafeCond(&mylock, &cond, &done, &reply); - lock.Lock(); reply = objecter->create_pool(name, onfinish, auid, crush_rule); lock.Unlock(); @@ -570,8 +576,13 @@ int librados::RadosClient::pool_create_async(string& name, PoolAsyncCompletionIm __u8 crush_rule) { Mutex::Locker l(lock); + + int r = wait_for_osdmap(); + if (r < 0) + return r; + Context *onfinish = new C_PoolAsync_Safe(c); - int r = objecter->create_pool(name, onfinish, auid, crush_rule); + r = objecter->create_pool(name, onfinish, auid, crush_rule); if (r < 0) { delete onfinish; }