From 710561cb8dee570668d0c4bf8700df652ca19182 Mon Sep 17 00:00:00 2001 From: John Spray Date: Tue, 24 Jun 2014 14:49:54 -0700 Subject: [PATCH] mon/MDSMonitor: EC check in 'fs new' like newfs Signed-off-by: John Spray --- qa/workunits/cephtool/test.sh | 6 ++++++ src/mon/MDSMonitor.cc | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index 0a8be56ae03e..e62388091e69 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -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 diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 0912ae6dba9b..b8be6ea691c0 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -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; -- 2.47.3