]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: 'osd pool rename <oldname> <newname>'
authorSage Weil <sage@inktank.com>
Fri, 29 Jun 2012 21:51:32 +0000 (14:51 -0700)
committerSage Weil <sage@inktank.com>
Fri, 29 Jun 2012 21:51:32 +0000 (14:51 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
doc/control.rst
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index b43767a1301e06b59dbb381caa63dc944ff34b70..3dedfa1ecc3905194ec5bbbe8babff6ffc073977 100644 (file)
@@ -226,8 +226,9 @@ Creates/deletes a snapshot of a pool. ::
 
        $ ceph osd pool create POOL [pg_num [pgp_num]]
        $ ceph osd pool delete POOL
+        $ ceph osd pool rename OLDNAME NEWNAME
 
-Creates/deletes a storage pool. ::
+Creates/deletes/renames a storage pool. ::
 
        $ ceph osd pool set POOL FIELD VALUE
 
index 66c6b898ff007eb2626e15b8adbc13d80dbe24ee..e819a112feff4d8aa13e4954e31ef14535ad3894 100644 (file)
@@ -2282,6 +2282,20 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
          paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version()));
          return true;
        }
+      } else if (m->cmd[2] == "rename" && m->cmd.size() == 5) {
+       int64_t pool = osdmap.lookup_pg_pool_name(m->cmd[3].c_str());
+       if (pool < 0) {
+         ss << "unrecognized pool '" << m->cmd[3] << "'";
+         err = -ENOENT;
+       } 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 if (m->cmd[2] == "set") {
        if (m->cmd.size() != 6) {
          err = -EINVAL;
@@ -2629,6 +2643,18 @@ int OSDMonitor::_prepare_remove_pool(uint64_t pool)
   return 0;
 }
 
+int OSDMonitor::_prepare_rename_pool(uint64_t pool, string newname)
+{
+  dout(10) << "_prepare_rename_pool " << pool << dendl;
+  if (pending_inc.old_pools.count(pool)) {
+    dout(10) << "_prepare_rename_pool " << pool << " pending removal" << dendl;    
+    return -ENOENT;
+  }
+
+  pending_inc.new_pool_names[pool] = newname;
+  return 0;
+}
+
 bool OSDMonitor::prepare_pool_op_delete(MPoolOp *m)
 {
   int ret = _prepare_remove_pool(m->pool);
index e9081dcb40e2c458e8661a0a40116a3e3f415fcb..f40def412e378052c92eb62f141f55d3b2529f26 100644 (file)
@@ -105,6 +105,7 @@ private:
   bool prepare_pgtemp(class MOSDPGTemp *m);
 
   int _prepare_remove_pool(uint64_t pool);
+  int _prepare_rename_pool(uint64_t pool, string newname);
 
   bool preprocess_pool_op ( class MPoolOp *m);
   bool preprocess_pool_op_create ( class MPoolOp *m);