From d6f68132cead3b03027827c621864d5fc322daca Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Fri, 20 Jun 2014 16:13:28 +0100 Subject: [PATCH] mon: MDSMonitor: do not allow ec pools to be used for data or metadata Fixes: #8624 Signed-off-by: Joao Eduardo Luis --- src/mon/MDSMonitor.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 3f90d1f006234..4b74c81efd914 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -1064,6 +1064,14 @@ bool MDSMonitor::prepare_command(MMonCommand *m) ss << "pool '" << poolname << "' does not exist"; } } + const pg_pool_t *p = mon->osdmon()->osdmap.get_pg_pool(poolid); + assert(p != NULL); + if (p->is_erasure()) { + // I'm sorry Dave, I'm afraid I can't do that + r = -EINVAL; + poolid = -1; + ss << "can't use pool '" << poolname << "' as it's an erasure-code pool"; + } if (poolid >= 0) { pending_mdsmap.add_data_pool(poolid); ss << "added data pool " << poolid << " to mdsmap"; @@ -1112,6 +1120,29 @@ bool MDSMonitor::prepare_command(MMonCommand *m) r = -EINVAL; goto out; } + + const pg_pool_t *p = mon->osdmon()->osdmap.get_pg_pool(data); + if (!p) { + ss << "pool id '" << data << "' does not exist"; + r = -ENOENT; + goto out; + } else if (p->is_erasure()) { + ss << "pool id '" << data << "' is an erasure-code pool"; + r = -EINVAL; + goto out; + } + + p = mon->osdmon()->osdmap.get_pg_pool(metadata); + if (!p) { + ss << "pool id '" << metadata << "' does not exist"; + r = -ENOENT; + goto out; + } else if (p->is_erasure()) { + ss << "pool id '" << metadata << "' is an erasure-code pool"; + r = -EINVAL; + goto out; + } + string sure; cmd_getval(g_ceph_context, cmdmap, "sure", sure); if (sure != "--yes-i-really-mean-it") { -- 2.39.5