diff options
author | Sage Weil <sage@inktank.com> | 2013-01-26 13:26:27 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-01-26 13:26:27 -0800 |
commit | 700bcede4d07b0565adcb081414cf840bbf17d66 (patch) | |
tree | da5d509c1b83e121039ad525a6cb524ea7e056ec | |
parent | b2a473be924114b4556651f7deed999243015527 (diff) | |
download | ceph-700bcede4d07b0565adcb081414cf840bbf17d66.tar.gz |
Revert "mon: implement safety interlock for deleting pools"
This reverts commit c993ac9b1fa4037f4cc2674455728ee38a7c978b.
This is too hard to test. Requiring the pool name twice along with
--yes-i-really-really-mean-it should be sufficient.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/OSDMonitor.cc | 48 | ||||
-rw-r--r-- | src/mon/OSDMonitor.h | 3 |
2 files changed, 8 insertions, 43 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 96e2aa12ea7..226229591d3 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -61,7 +61,6 @@ static ostream& _prefix(std::ostream *_dout, Monitor *mon, OSDMap& osdmap) { /************ MAPS ****************/ OSDMonitor::OSDMonitor(Monitor *mn, Paxos *p) : PaxosService(mn, p), - delete_pool_nonce(0), thrash_map(0), thrash_last_up_osd(-1) { // we need to trim this too @@ -2780,50 +2779,19 @@ bool OSDMonitor::prepare_command(MMonCommand *m) paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version())); return true; } else if (m->cmd[2] == "delete" && m->cmd.size() >= 4) { - // osd pool delete <poolname> <poolname again> <nonce> - // hey, let's delete a pool! + //hey, let's delete a pool! int64_t pool = osdmap.lookup_pg_pool_name(m->cmd[3].c_str()); if (pool < 0) { ss << "pool '" << m->cmd[3] << "' does not exist"; err = 0; - goto out; - } - if (m->cmd.size() < 6) { - delete_pool_nonce = rand(); - delete_pool_nonce_timeout = ceph_clock_now(g_ceph_context); - delete_pool_nonce_timeout += 30; - ss << "WARNING: this will efficiently **DESTROY** an entire pool of data. if you are ABSOLUTELY CERTAIN" - << " that this is what you want to do, retry listing the pool name twice, followed by " << delete_pool_nonce - << " within 30 seconds."; - err = -EPERM; - goto out; - } - assert(m->cmd.size() >= 6); - if (m->cmd[4] != m->cmd[3]) { - ss << "ERROR: you must list the pool name you want to **DESTROY** twice"; - err = -EPERM; - goto out; - } - unsigned safety = atol(m->cmd[5].c_str()); - if (safety != delete_pool_nonce) { - ss << "ERROR: did not confirm pool deletion with correct confirmation; " << safety << " != " << delete_pool_nonce << "; try again"; - err = -EPERM; - goto out; - } - if (ceph_clock_now(g_ceph_context) > delete_pool_nonce_timeout) { - ss << "ERROR: did not confirm pool deletion within 30 seconds; try again"; - err = -EPERM; - goto out; + } else { + int ret = _prepare_remove_pool(pool); + if (ret == 0) + ss << "pool '" << m->cmd[3] << "' deleted"; + getline(ss, rs); + paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version())); + return true; } - assert(safety == delete_pool_nonce); - delete_pool_nonce = 0; - delete_pool_nonce_timeout = utime_t(); - int ret = _prepare_remove_pool(pool); - if (ret == 0) - ss << "pool '" << m->cmd[3] << "' deleted"; - 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] == "rename" && m->cmd.size() == 5) { int64_t pool = osdmap.lookup_pg_pool_name(m->cmd[3].c_str()); if (pool < 0) { diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index e389c65e825..9529f731c84 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -123,9 +123,6 @@ private: map<int,double> osd_weight; - unsigned delete_pool_nonce; // safety interlock for removing pools - utime_t delete_pool_nonce_timeout; - void check_failures(utime_t now); bool check_failure(utime_t now, int target_osd, failure_info_t& fi); |