From: Sage Weil Date: Thu, 9 Jan 2014 12:31:41 +0000 (-0800) Subject: mon: implement 'mds set max_mds|max_file_size' X-Git-Tag: v0.77~21^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca9acb96346b619c3166d01ac1b3a527bcd98531;p=ceph.git mon: implement 'mds set max_mds|max_file_size' First, add the ability to modify max_file_size. While we are at it, move to a more sensible interface for adjusting max_mds too. Signed-off-by: Sage Weil --- diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index ae410c72616d..beb29b002f60 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -155,6 +155,10 @@ ceph mds remove_data_pool rbd ceph osd pool delete data2 data2 --yes-i-really-really-mean-it ceph mds set_max_mds 4 ceph mds set_max_mds 3 +ceph mds set max_mds 4 +expect_false ceph mds set max_mds asdf +ceph mds set max_file_size 1000000000 +expect_false ceph mds set max_file_size 123asdf ceph mds stat # ceph mds tell mds.a getmap # ceph mds rm diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 3a1af05ffae5..7865f98cb559 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -819,13 +819,45 @@ bool MDSMonitor::prepare_command(MMonCommand *m) } } else if (prefix == "mds set_max_mds") { + // NOTE: see also "mds set max_mds", which can modify the same field. int64_t maxmds; if (!cmd_getval(g_ceph_context, cmdmap, "maxmds", maxmds) || maxmds < 0) goto out; pending_mdsmap.max_mds = maxmds; r = 0; ss << "max_mds = " << pending_mdsmap.max_mds; - + } else if (prefix == "mds set") { + string var; + if (!cmd_getval(g_ceph_context, cmdmap, "var", var) < 0) + goto out; + string val; + string interr; + int64_t n = 0; + if (!cmd_getval(g_ceph_context, cmdmap, "val", val)) + goto out; + // we got a string. see if it contains an int. + n = strict_strtoll(val.c_str(), 10, &interr); + if (var == "max_mds") { + // NOTE: see also "mds set_max_mds", which can modify the same field. + if (interr.length()) + goto out; + pending_mdsmap.max_mds = n; + } else if (var == "max_file_size") { + if (interr.length()) { + ss << var << " requires an integer value"; + goto out; + } + if (n < CEPH_MIN_STRIPE_UNIT) { + r = -ERANGE; + ss << var << " must at least " << CEPH_MIN_STRIPE_UNIT; + goto out; + } + pending_mdsmap.max_file_size = n; + } else { + ss << "unknown variable " << var; + goto out; + } + r = 0; } else if (prefix == "mds setmap") { MDSMap map; map.decode(m->get_data()); diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 8c08030f2148..ce1ae0f686cb 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -248,6 +248,10 @@ COMMAND("mds deactivate name=who,type=CephString", "stop mds", \ COMMAND("mds set_max_mds " \ "name=maxmds,type=CephInt,range=0", \ "set max MDS index", "mds", "rw", "cli,rest") +COMMAND("mds set " \ + "name=var,type=CephChoices,strings=max_mds|max_file_size " \ + "name=val,type=CephString", \ + "set mds parameter to ", "mds", "rw", "cli,rest") COMMAND("mds setmap " \ "name=epoch,type=CephInt,range=0", \ "set mds map; must supply correct epoch number", "mds", "rw", "cli,rest")