summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-06-29 14:51:32 -0700
committerSage Weil <sage@inktank.com>2012-06-29 14:51:32 -0700
commita8d7fd959d897759c0e8bac6a4331ad62363303c (patch)
treed06fdbceea43a9956b6035cf4f85c5499c038de9
parent15ebf2028e9e594279e736ff311e0d7629a1ed40 (diff)
downloadceph-a8d7fd959d897759c0e8bac6a4331ad62363303c.tar.gz
mon: 'osd pool rename <oldname> <newname>'
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--doc/control.rst3
-rw-r--r--src/mon/OSDMonitor.cc26
-rw-r--r--src/mon/OSDMonitor.h1
3 files changed, 29 insertions, 1 deletions
diff --git a/doc/control.rst b/doc/control.rst
index b43767a1301..3dedfa1ecc3 100644
--- a/doc/control.rst
+++ b/doc/control.rst
@@ -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
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index 66c6b898ff0..e819a112fef 100644
--- a/src/mon/OSDMonitor.cc
+++ b/src/mon/OSDMonitor.cc
@@ -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);
diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h
index e9081dcb40e..f40def412e3 100644
--- a/src/mon/OSDMonitor.h
+++ b/src/mon/OSDMonitor.h
@@ -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);