]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: 'osd set pool <foo> crush_ruleset <num>'
authorSage Weil <sage@newdream.net>
Tue, 20 Sep 2011 23:17:51 +0000 (16:17 -0700)
committerSage Weil <sage@newdream.net>
Tue, 20 Sep 2011 23:24:24 +0000 (16:24 -0700)
You can set the crush rule on pool creation.  Let people change existing
pool rulesets too.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/OSDMonitor.cc

index abb878dea9d510e87e24df04cfd15b6555e474f9..e5a40e986ea35eda6d5a2c20795491093d6f1349 100644 (file)
@@ -1903,6 +1903,19 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
                paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version()));
                return true;
              }
+           } else if (m->cmd[4] == "crush_ruleset") {
+             if (osdmap.crush.rule_exists(n)) {
+               pending_inc.new_pools[pool] = osdmap.pools[pool];
+               pending_inc.new_pools[pool].v.crush_ruleset = n;
+               pending_inc.new_pools[pool].v.last_change = pending_inc.epoch;
+               ss << "set pool " << pool << " crush_ruleset to " << n;
+               getline(ss, rs);
+               paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version()));
+               return true;
+             } else {
+               ss << "crush ruleset " << n << " dne";
+               err = -ENOENT;
+             }
            } else {
              ss << "unrecognized pool field " << m->cmd[4];
            }