]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/MDSMonitor: EC check in 'fs new' like newfs
authorJohn Spray <john.spray@redhat.com>
Tue, 24 Jun 2014 21:49:54 +0000 (14:49 -0700)
committerJohn Spray <john.spray@redhat.com>
Tue, 1 Jul 2014 17:40:03 +0000 (18:40 +0100)
Signed-off-by: John Spray <john.spray@redhat.com>
qa/workunits/cephtool/test.sh
src/mon/MDSMonitor.cc

index 0a8be56ae03eb8dbe9f1dde6ab774d7f70e6cc7d..e62388091e693f25837fecdf3f81e3a24bc5eb46 100755 (executable)
@@ -368,6 +368,12 @@ function test_mon_mds()
   check_response 'erasure-code' $? 22
   ceph mds newfs $poolnum $poolnum --yes-i-really-mean-it 2>$TMPFILE
   check_response 'erasure-code' $? 22
+  ceph fs new cephfs fs_metadata mds-ec-pool 2>$TMPFILE
+  check_response 'erasure-code' $? 22
+  ceph fs new cephfs mds-ec-pool fs_data 2>$TMPFILE
+  check_response 'erasure-code' $? 22
+  ceph fs new cephfs mds-ec-pool mds-ec-pool 2>$TMPFILE
+  check_response 'erasure-code' $? 22
   set -e
   ceph osd pool delete mds-ec-pool mds-ec-pool --yes-i-really-really-mean-it
 
index 0912ae6dba9b7eb45428900036e66e7a5fa1da33..b8be6ea691c04d17e4d7595d35980998c0162e6b 100644 (file)
@@ -1015,16 +1015,31 @@ bool MDSMonitor::management_command(
       r = -EINVAL;
     }
 
-    // Automatically set crash_replay_interval on data pool if it
-    // isn't already set.
     pg_pool_t const *data_pool = mon->osdmon()->osdmap.get_pg_pool(data);
     assert(data_pool != NULL);  // Checked it existed above
+    pg_pool_t const *metadata_pool = mon->osdmon()->osdmap.get_pg_pool(metadata);
+    assert(metadata_pool != NULL);  // Checked it existed above
+
+    // Automatically set crash_replay_interval on data pool if it
+    // isn't already set.
     if (data_pool->get_crash_replay_interval() == 0) {
       r = mon->osdmon()->set_crash_replay_interval(data, g_conf->osd_default_data_pool_replay_window);
       assert(r == 0);  // We just did get_pg_pool so it must exist and be settable
       request_proposal(mon->osdmon());
     }
 
+    if (data_pool->is_erasure()) {
+      ss << "data pool '" << data_name << " is an erasure-code pool";
+      r = -EINVAL;
+      return true;
+    }
+
+    if (metadata_pool->is_erasure()) {
+      ss << "metadata pool '" << metadata_name << " is an erasure-code pool";
+      r = -EINVAL;
+      return true;
+    }
+
     // All checks passed, go ahead and create.
     MDSMap newmap;
     newmap.inc = pending_mdsmap.inc;