From: Kefu Chai Date: Fri, 30 Sep 2016 09:58:14 +0000 (+0800) Subject: tools/ceph_monstore_tool: update pgmap_meta also when rebuilding store.db X-Git-Tag: v10.2.4~41^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4ebf87bccdb17bd04b2c615e6278a7816ae1ff43;p=ceph.git tools/ceph_monstore_tool: update pgmap_meta also when rebuilding store.db we should rebuild pgmap_meta table from the collected osdmaps Fixes: http://tracker.ceph.com/issues/17400 Signed-off-by: Kefu Chai (cherry picked from commit cdfa7a69f63d047205dcfccd63b5d58ab0d4695b) --- diff --git a/src/tools/ceph_monstore_tool.cc b/src/tools/ceph_monstore_tool.cc index 2141698555bc2..a3916408b617d 100644 --- a/src/tools/ceph_monstore_tool.cc +++ b/src/tools/ceph_monstore_tool.cc @@ -593,7 +593,8 @@ static int update_paxos(MonitorDBStore& st) bufferlist pending_proposal; { MonitorDBStore::Transaction t; - vector prefixes = {"auth", "osdmap", "pgmap", "pgmap_pg"}; + vector prefixes = {"auth", "osdmap", + "pgmap", "pgmap_pg", "pgmap_meta"}; for (const auto& prefix : prefixes) { for (auto i = st.get_iterator(prefix); i->valid(); i->next()) { auto key = i->raw_key(); @@ -615,6 +616,52 @@ static int update_paxos(MonitorDBStore& st) return 0; } +// rebuild +// - pgmap_meta/version +// - pgmap_meta/last_osdmap_epoch +// - pgmap_meta/last_pg_scan +// - pgmap_meta/full_ratio +// - pgmap_meta/nearfull_ratio +// - pgmap_meta/stamp +static int update_pgmap_meta(MonitorDBStore& st) +{ + const string prefix("pgmap_meta"); + auto t = make_shared(); + // stolen from PGMonitor::create_pending() + // the first pgmap_meta + t->put(prefix, "version", 1); + { + auto stamp = ceph_clock_now(g_ceph_context); + bufferlist bl; + ::encode(stamp, bl); + t->put(prefix, "stamp", bl); + } + { + auto last_osdmap_epoch = st.get("osdmap", "last_committed"); + t->put(prefix, "last_osdmap_epoch", last_osdmap_epoch); + } + // be conservative, so PGMonitor will scan the all pools for pg changes + t->put(prefix, "last_pg_scan", 1); + { + auto full_ratio = g_ceph_context->_conf->mon_osd_full_ratio; + if (full_ratio > 1.0) + full_ratio /= 100.0; + bufferlist bl; + ::encode(full_ratio, bl); + t->put(prefix, "full_ratio", bl); + } + { + auto nearfull_ratio = g_ceph_context->_conf->mon_osd_nearfull_ratio; + if (nearfull_ratio > 1.0) + nearfull_ratio /= 100.0; + bufferlist bl; + ::encode(nearfull_ratio, bl); + t->put(prefix, "nearfull_ratio", bl); + } + st.apply_transaction(t); + return 0; +} + int rebuild_monstore(const char* progname, vector& subcmds, MonitorDBStore& st) @@ -635,6 +682,9 @@ int rebuild_monstore(const char* progname, } if (!keyring_path.empty()) update_auth(st, keyring_path); + if ((r = update_pgmap_meta(st))) { + return r; + } if ((r = update_paxos(st))) { return r; } diff --git a/src/tools/rebuild_mondb.cc b/src/tools/rebuild_mondb.cc index 81dceeb0755c9..f9da216dd66f7 100644 --- a/src/tools/rebuild_mondb.cc +++ b/src/tools/rebuild_mondb.cc @@ -331,52 +331,6 @@ int update_osdmap(ObjectStore& fs, OSDSuperblock& sb, MonitorDBStore& ms) return 0; } -// rebuild -// - pgmap_meta/version -// - pgmap_meta/last_osdmap_epoch -// - pgmap_meta/last_pg_scan -// - pgmap_meta/full_ratio -// - pgmap_meta/nearfull_ratio -// - pgmap_meta/stamp -int update_pgmap_meta(MonitorDBStore& st) -{ - const string prefix("pgmap_meta"); - auto t = make_shared(); - // stolen from PGMonitor::create_pending() - // the first pgmap_meta - t->put(prefix, "version", 1); - { - auto stamp = ceph_clock_now(g_ceph_context); - bufferlist bl; - ::encode(stamp, bl); - t->put(prefix, "stamp", bl); - } - { - auto last_osdmap_epoch = st.get("osdmap", "last_committed"); - t->put(prefix, "last_osdmap_epoch", last_osdmap_epoch); - } - // be conservative, so PGMonitor will scan the all pools for pg changes - t->put(prefix, "last_pg_scan", 1); - { - auto full_ratio = g_ceph_context->_conf->mon_osd_full_ratio; - if (full_ratio > 1.0) - full_ratio /= 100.0; - bufferlist bl; - ::encode(full_ratio, bl); - t->put(prefix, "full_ratio", bl); - } - { - auto nearfull_ratio = g_ceph_context->_conf->mon_osd_nearfull_ratio; - if (nearfull_ratio > 1.0) - nearfull_ratio /= 100.0; - bufferlist bl; - ::encode(nearfull_ratio, bl); - t->put(prefix, "nearfull_ratio", bl); - } - st.apply_transaction(t); - return 0; -} - // rebuild // - pgmap_pg/${pgid} int update_pgmap_pg(ObjectStore& fs, MonitorDBStore& ms)