]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: MDSMonitor: do not allow ec pools to be used for data or metadata
authorJoao Eduardo Luis <joao.luis@inktank.com>
Fri, 20 Jun 2014 15:13:28 +0000 (16:13 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Mon, 23 Jun 2014 22:12:29 +0000 (23:12 +0100)
Fixes: #8624
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/mon/MDSMonitor.cc

index 3f90d1f0062341bb96e3e5b3521ff40dd73b6d2c..4b74c81efd914eaaab8edce5e5a74fc1c236073a 100644 (file)
@@ -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") {