Merge pull request #4727 from tchaikov/wip-osdmaptool-dump-tree-with-format

osdmaptool: dump tree with given format

Reviewed-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2015-05-29 17:43:54 -07:00
commit 013f9af82c
5 changed files with 43 additions and 11 deletions

View File

@ -2945,11 +2945,11 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
} else if (prefix == "osd tree") {
if (f) {
f->open_object_section("tree");
p->print_tree(NULL, f.get());
p->print_tree(f.get(), NULL);
f->close_section();
f->flush(ds);
} else {
p->print_tree(&ds, NULL);
p->print_tree(NULL, &ds);
}
rdata.append(ds);
} else if (prefix == "osd getmap") {

View File

@ -2561,15 +2561,16 @@ private:
const OSDMap *osdmap;
};
void OSDMap::print_tree(ostream *out, Formatter *f) const
void OSDMap::print_tree(Formatter *f, ostream *out) const
{
if (out) {
if (f)
OSDTreeFormattingDumper(crush.get(), this).dump(f);
else {
assert(out);
TextTable tbl;
OSDTreePlainDumper(crush.get(), this).dump(&tbl);
*out << tbl;
}
if (f)
OSDTreeFormattingDumper(crush.get(), this).dump(f);
}
void OSDMap::print_summary(Formatter *f, ostream& out) const

View File

@ -842,7 +842,7 @@ public:
void print_pools(ostream& out) const;
void print_summary(Formatter *f, ostream& out) const;
void print_oneline_summary(ostream& out) const;
void print_tree(ostream *out, Formatter *f) const;
void print_tree(Formatter *f, ostream *out) const;
string get_flag_string() const;
static string get_flag_string(unsigned flags);

View File

@ -0,0 +1,19 @@
$ osdmaptool --createsimple 3 om
osdmaptool: osdmap file 'om'
osdmaptool: writing epoch 1 to om
$ osdmaptool --tree=plain om
osdmaptool: osdmap file 'om'
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.00000 root default
-3 3.00000 rack localrack
-2 3.00000 host localhost
0 1.00000 osd.0 DNE 0
1 1.00000 osd.1 DNE 0
2 1.00000 osd.2 DNE 0
$ osdmaptool --tree=json om
osdmaptool: osdmap file 'om'
{"nodes":[{"id":-1,"name":"default","type":"root","type_id":10,"children":[-3]},{"id":-3,"name":"localrack","type":"rack","type_id":3,"children":[-2]},{"id":-2,"name":"localhost","type":"host","type_id":1,"children":[2,1,0]},{"id":0,"name":"osd.0","type":"osd","type_id":0,"crush_weight":1.000000,"depth":3,"exists":0,"status":"down","reweight":0.000000,"primary_affinity":1.000000},{"id":1,"name":"osd.1","type":"osd","type_id":0,"crush_weight":1.000000,"depth":3,"exists":0,"status":"down","reweight":0.000000,"primary_affinity":1.000000},{"id":2,"name":"osd.2","type":"osd","type_id":0,"crush_weight":1.000000,"depth":3,"exists":0,"status":"down","reweight":0.000000,"primary_affinity":1.000000}],"stray":[]}
$ rm -f om

View File

@ -55,6 +55,7 @@ int main(int argc, const char **argv)
bool print = false;
bool print_json = false;
bool tree = false;
boost::scoped_ptr<Formatter> tree_formatter;
bool createsimple = false;
bool create_from_conf = false;
int num_osd = 0;
@ -84,8 +85,11 @@ int main(int argc, const char **argv)
print = true;
} else if (ceph_argparse_flag(args, i, "--dump-json", (char*)NULL)) {
print_json = true;
} else if (ceph_argparse_flag(args, i, "--tree", (char*)NULL)) {
} else if (ceph_argparse_witharg(args, i, &val, err, "--tree", (char*)NULL)) {
tree = true;
if (!val.empty() && val != "plain") {
tree_formatter.reset(Formatter::create(val, "", "json"));
}
} else if (ceph_argparse_witharg(args, i, &num_osd, err, "--createsimple", (char*)NULL)) {
if (!err.str().empty()) {
cerr << err.str() << std::endl;
@ -465,9 +469,17 @@ int main(int argc, const char **argv)
osdmap.print(cout);
if (print_json)
osdmap.dump_json(cout);
if (tree)
osdmap.print_tree(&cout, NULL);
if (tree) {
if (tree_formatter) {
tree_formatter->open_object_section("tree");
osdmap.print_tree(tree_formatter.get(), NULL);
tree_formatter->close_section();
tree_formatter->flush(cout);
cout << std::endl;
} else {
osdmap.print_tree(NULL, &cout);
}
}
if (modified) {
bl.clear();
osdmap.encode(bl, CEPH_FEATURES_SUPPORTED_DEFAULT | CEPH_FEATURE_RESERVED);