mirror of https://github.com/ceph/ceph
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:
commit
013f9af82c
|
@ -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") {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue