diff options
author | Sage Weil <sage@inktank.com> | 2013-02-05 14:31:10 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-02-05 14:31:10 -0800 |
commit | c370d85b428cdf7cf4ae98c7484e9ac4614fb9fc (patch) | |
tree | 1c2bb10ed06cab0137368ffea786b143cdbd82f3 | |
parent | b6036a58b910da82a47065045ae12813b5b7a8be (diff) | |
download | ceph-c370d85b428cdf7cf4ae98c7484e9ac4614fb9fc.tar.gz |
mon: 'osd crush rules list|ls'
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/OSDMonitor.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 608edb90534..ff46a6e948e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1996,6 +1996,33 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) ss << "listed " << osdmap.blacklist.size() << " entries"; r = 0; } + else if (m->cmd.size() >= 4 && m->cmd[1] == "crush" && m->cmd[2] == "rule" && (m->cmd[3] == "list" || + m->cmd[3] == "ls")) { + JSONFormatter jf(true); + jf.open_array_section("rules"); + for (int rule = 0; rule < osdmap.crush->get_max_rules(); rule++) { + if (!osdmap.crush->rule_exists(rule)) + continue; + jf.dump_string("name", osdmap.crush->get_rule_name(rule)); + } + jf.close_section(); + ostringstream rs; + jf.flush(rs); + rs << "\n"; + rdata.append(rs.str()); + r = 0; + } + else if (m->cmd.size() >= 4 && m->cmd[1] == "crush" && m->cmd[2] == "rule" && m->cmd[3] == "dump") { + JSONFormatter jf(true); + jf.open_array_section("rules"); + osdmap.crush->dump_rules(&jf); + jf.close_section(); + ostringstream rs; + jf.flush(rs); + rs << "\n"; + rdata.append(rs.str()); + r = 0; + } else if (m->cmd.size() == 3 && m->cmd[1] == "crush" && m->cmd[2] == "dump") { JSONFormatter jf(true); jf.open_object_section("crush_map"); |