]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RadosClient: Enable pool existence check 2209/head
authorPavan Rallabhandi <pavan.rallabhandi@sandisk.com>
Fri, 8 Aug 2014 10:16:18 +0000 (15:46 +0530)
committerSomnath Roy <somnath.roy@sandisk.com>
Fri, 8 Aug 2014 23:57:56 +0000 (16:57 -0700)
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 <pavan.rallabhandi@sandisk.com>
src/librados/RadosClient.cc

index 249c34f564f00f8379ea7f4ba848abe26b07774d..ee1ceed7945780844b1aed6074ae86c62bc34c16 100644 (file)
@@ -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;
   }