]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: implement 'mds set max_mds|max_file_size'
authorSage Weil <sage@inktank.com>
Thu, 9 Jan 2014 12:31:41 +0000 (04:31 -0800)
committerSage Weil <sage@inktank.com>
Thu, 9 Jan 2014 12:31:41 +0000 (04:31 -0800)
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 <sage@inktank.com>
qa/workunits/cephtool/test.sh
src/mon/MDSMonitor.cc
src/mon/MonCommands.h

index ae410c72616dac2a604ad21cd3adf398f59a20a6..beb29b002f609e9a1ec116c7aeb0cd69b61a5c32 100755 (executable)
@@ -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
index 3a1af05ffae5a81eab5c76bf4dc00b1a8df497ea..7865f98cb5598ad8bfae05ea1c091d9f809c5f04 100644 (file)
@@ -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());
index 8c08030f214811fdb29da26d247ed34cc25d7a99..ce1ae0f686cb46ce8c08df2857a21f0a55776422 100644 (file)
@@ -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 <var> to <val>", "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")