]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: check new pool name on rename
authorSage Weil <sage@inktank.com>
Sat, 30 Jun 2012 02:56:07 +0000 (19:56 -0700)
committerSage Weil <sage@inktank.com>
Sat, 30 Jun 2012 02:56:07 +0000 (19:56 -0700)
Ensure the new pool name doesn't already exist, both in the current and
project map.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/OSDMonitor.cc

index e819a112feff4d8aa13e4954e31ef14535ad3894..8bd48761884b37b52066767bee22b248f015cefb 100644 (file)
@@ -2287,14 +2287,20 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
        if (pool < 0) {
          ss << "unrecognized pool '" << m->cmd[3] << "'";
          err = -ENOENT;
+       } else if (osdmap.lookup_pg_pool_name(m->cmd[4].c_str()) >= 0) {
+         ss << "pool '" << m->cmd[4] << "' already exists";
+         err = -EEXIST;
        } else {
          int ret = _prepare_rename_pool(pool, m->cmd[4]);
          if (ret == 0) {
            ss << "pool '" << m->cmd[3] << "' renamed to '" << m->cmd[4] << "'";
-           getline(ss, rs);
-           paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version()));
-           return true;
+         } else {
+           ss << "failed to rename pool '" << m->cmd[3] << "' to '" << m->cmd[4] << "': "
+              << cpp_strerror(ret);
          }
+         getline(ss, rs);
+         paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version()));
+         return true;
        }
       } else if (m->cmd[2] == "set") {
        if (m->cmd.size() != 6) {
@@ -2650,6 +2656,13 @@ int OSDMonitor::_prepare_rename_pool(uint64_t pool, string newname)
     dout(10) << "_prepare_rename_pool " << pool << " pending removal" << dendl;    
     return -ENOENT;
   }
+  for (map<int64_t,string>::iterator p = pending_inc.new_pool_names.begin();
+       p != pending_inc.new_pool_names.end();
+       ++p) {
+    if (p->second == newname) {
+      return -EEXIST;
+    }
+  }
 
   pending_inc.new_pool_names[pool] = newname;
   return 0;