From e4b00718ef9cf4b207566b86173b689a7cd9f735 Mon Sep 17 00:00:00 2001 From: Pavan Rallabhandi Date: Fri, 8 Aug 2014 15:46:18 +0530 Subject: [PATCH] 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 --- src/librados/RadosClient.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 249c34f564f00..ee1ceed794578 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; } -- 2.39.5