From: Joao Eduardo Luis Date: Wed, 30 Oct 2013 12:29:32 +0000 (+0000) Subject: mon: MonmapMonitor: support 'mon getmap [epoch]' X-Git-Tag: v0.74~89^2~2^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e5efd882e7eba360158c2218bbd197766d082b02;p=ceph.git mon: MonmapMonitor: support 'mon getmap [epoch]' Fixes: #6683 Signed-off-by: Joao Eduardo Luis --- diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index ca855592445..18c07bcc515 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -177,58 +177,67 @@ bool MonmapMonitor::preprocess_command(MMonCommand *m) ss.str(""); r = 0; - } else if (prefix == "mon getmap") { - mon->monmap->encode(rdata, CEPH_FEATURES_ALL); - r = 0; - ss << "got latest monmap"; + } else if (prefix == "mon getmap" || + prefix == "mon dump") { - } else if (prefix == "mon dump") { - string format; - cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain")); - epoch_t epoch = 0; - int64_t epochval; - if (cmd_getval(g_ceph_context, cmdmap, "epoch", epochval)) - epoch = epochval; + epoch_t epoch; + int64_t epochnum; + cmd_getval(g_ceph_context, cmdmap, "epoch", epochnum, (int64_t)0); + epoch = epochnum; MonMap *p = mon->monmap; if (epoch) { - bufferlist b; - r = get_version(epoch, b); + bufferlist bl; + r = get_version(epoch, bl); if (r == -ENOENT) { - p = 0; - } else { - p = new MonMap; - p->decode(b); + ss << "there is no map for epoch " << epoch; + goto reply; } + assert(r == 0); + assert(bl.length() > 0); + p = new MonMap; + p->decode(bl); } - if (p) { + + assert(p != NULL); + + if (prefix == "mon getmap") { + p->encode(rdata, CEPH_FEATURES_ALL); + r = 0; + ss << "got monmap epoch " << p->get_epoch(); + } else if (prefix == "mon dump") { + string format; + cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain")); stringstream ds; boost::scoped_ptr f(new_formatter(format)); if (f) { - f->open_object_section("monmap"); - p->dump(f.get()); - f->open_array_section("quorum"); - for (set::iterator q = mon->get_quorum().begin(); q != mon->get_quorum().end(); ++q) - f->dump_int("mon", *q); - f->close_section(); - f->close_section(); - f->flush(ds); - r = 0; + f->open_object_section("monmap"); + p->dump(f.get()); + f->open_array_section("quorum"); + for (set::iterator q = mon->get_quorum().begin(); + q != mon->get_quorum().end(); ++q) { + f->dump_int("mon", *q); + } + f->close_section(); + f->close_section(); + f->flush(ds); + r = 0; } else { - p->print(ds); - r = 0; - } + p->print(ds); + r = 0; + } rdata.append(ds); ss << "dumped monmap epoch " << p->get_epoch(); - if (p != mon->monmap) - delete p; } + if (p != mon->monmap) + delete p; } else if (prefix == "mon add") return false; else if (prefix == "mon remove") return false; +reply: if (r != -1) { string rs; getline(ss, rs);