diff options
author | Sage Weil <sage@inktank.com> | 2012-06-29 14:51:32 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-06-29 14:51:32 -0700 |
commit | a8d7fd959d897759c0e8bac6a4331ad62363303c (patch) | |
tree | d06fdbceea43a9956b6035cf4f85c5499c038de9 | |
parent | 15ebf2028e9e594279e736ff311e0d7629a1ed40 (diff) | |
download | ceph-a8d7fd959d897759c0e8bac6a4331ad62363303c.tar.gz |
mon: 'osd pool rename <oldname> <newname>'
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | doc/control.rst | 3 | ||||
-rw-r--r-- | src/mon/OSDMonitor.cc | 26 | ||||
-rw-r--r-- | src/mon/OSDMonitor.h | 1 |
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); |