OPTION(mon_osd_backfillfull_ratio, OPT_FLOAT, .90) // what % full makes an OSD backfill full (backfill halted)
OPTION(mon_osd_nearfull_ratio, OPT_FLOAT, .85) // what % full makes an OSD near full
OPTION(mon_allow_pool_delete, OPT_BOOL, false) // allow pool deletion
+OPTION(mon_fake_pool_delete, OPT_BOOL, false) // fake pool deletion (add _DELETED suffix)
OPTION(mon_globalid_prealloc, OPT_U32, 10000) // how many globalids to prealloc
OPTION(mon_osd_report_timeout, OPT_INT, 900) // grace period before declaring unresponsive OSDs dead
OPTION(mon_force_standby_active, OPT_BOOL, true) // should mons force standby-replay mds to be active
COMMAND("osd pool rm " \
"name=pool,type=CephPoolname " \
"name=pool2,type=CephPoolname,req=false " \
- "name=sure,type=CephChoices,strings=--yes-i-really-really-mean-it,req=false", \
+ "name=sure,type=CephString,req=false", \
"remove pool", \
"osd", "rw", "cli,rest")
COMMAND("osd pool rename " \
goto reply;
}
- if (poolstr2 != poolstr || sure != "--yes-i-really-really-mean-it") {
+ bool force_no_fake = sure == "--yes-i-really-really-mean-it-not-faking";
+ if (poolstr2 != poolstr ||
+ (sure != "--yes-i-really-really-mean-it" && !force_no_fake)) {
ss << "WARNING: this will *PERMANENTLY DESTROY* all data stored in pool " << poolstr
<< ". If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, "
<< "followed by --yes-i-really-really-mean-it.";
err = -EPERM;
goto reply;
}
- err = _prepare_remove_pool(pool, &ss);
+ err = _prepare_remove_pool(pool, &ss, force_no_fake);
if (err == -EAGAIN) {
wait_for_finished_proposal(op, new C_RetryMessage(this, op));
return true;
return true;
}
-int OSDMonitor::_prepare_remove_pool(int64_t pool, ostream *ss)
+int OSDMonitor::_prepare_remove_pool(
+ int64_t pool, ostream *ss, bool no_fake)
{
dout(10) << "_prepare_remove_pool " << pool << dendl;
const pg_pool_t *p = osdmap.get_pg_pool(pool);
return 0;
}
+ if (g_conf->mon_fake_pool_delete && !no_fake) {
+ string old_name = osdmap.get_pool_name(pool);
+ string new_name = old_name + "." + stringify(pool) + ".DELETED";
+ dout(1) << __func__ << " faking pool deletion: renaming " << pool << " "
+ << old_name << " -> " << new_name << dendl;
+ pending_inc.new_pool_names[pool] = new_name;
+ return 0;
+ }
+
// remove
pending_inc.old_pools.insert(pool);
op->mark_osdmon_event(__func__);
MPoolOp *m = static_cast<MPoolOp*>(op->get_req());
ostringstream ss;
- int ret = _prepare_remove_pool(m->pool, &ss);
+ int ret = _prepare_remove_pool(m->pool, &ss, false);
if (ret == -EAGAIN) {
wait_for_finished_proposal(op, new C_RetryMessage(this, op));
return true;
int64_t base_pool_id, const pg_pool_t *base_pool, const pg_pool_t *tier_pool,
int *err, ostream *ss) const;
- int _prepare_remove_pool(int64_t pool, ostream *ss);
+ int _prepare_remove_pool(int64_t pool, ostream *ss, bool no_fake);
int _prepare_rename_pool(int64_t pool, string newname);
bool preprocess_pool_op (MonOpRequestRef op);
#include "common/Formatter.h"
#include "json_spirit/json_spirit.h"
#include "common/errno.h"
+#include "common/ceph_context.h"
+#include "common/config.h"
#include <errno.h>
#include <sstream>
return ret;
}
- std::ostringstream oss;
- ret = destroy_ec_profile_and_ruleset(cluster, pool_name, oss);
- if (ret) {
- rados_shutdown(*cluster);
- return ret;
+ CephContext *cct = static_cast<CephContext*>(rados_cct(*cluster));
+ if (!cct->_conf->mon_fake_pool_delete) { // hope this is in [global]
+ std::ostringstream oss;
+ ret = destroy_ec_profile_and_ruleset(cluster, pool_name, oss);
+ if (ret) {
+ rados_shutdown(*cluster);
+ return ret;
+ }
}
rados_wait_for_latest_osdmap(*cluster);
return ret;
}
- std::ostringstream oss;
- ret = destroy_ec_profile_and_ruleset_pp(cluster, pool_name, oss);
- if (ret) {
- cluster.shutdown();
- return ret;
+ CephContext *cct = static_cast<CephContext*>(cluster.cct());
+ if (!cct->_conf->mon_fake_pool_delete) { // hope this is in [global]
+ std::ostringstream oss;
+ ret = destroy_ec_profile_and_ruleset_pp(cluster, pool_name, oss);
+ if (ret) {
+ cluster.shutdown();
+ return ret;
+ }
}
cluster.wait_for_latest_osdmap();