Skip to content

Commit

Permalink
tools/ceph_monstore_tool: update pgmap_meta also when rebuilding stor…
Browse files Browse the repository at this point in the history
…e.db

we should rebuild pgmap_meta table from the collected osdmaps

Fixes: http://tracker.ceph.com/issues/17400
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit cdfa7a6)
Conflicts:
	src/tools/ceph_monstore_tool.cc: remove C++11-ism
  • Loading branch information
tchaikov committed Nov 12, 2016
1 parent 3251ab5 commit 47840e0
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 47 deletions.
52 changes: 51 additions & 1 deletion src/tools/ceph_monstore_tool.cc
Expand Up @@ -594,7 +594,8 @@ static int update_paxos(MonitorDBStore& st)
bufferlist pending_proposal;
{
MonitorDBStore::Transaction t;
const char* prefixes[] = {"auth", "osdmap", "pgmap", "pgmap_pg"};
const char* prefixes[] = {"auth", "osdmap",
"pgmap", "pgmap_pg", "pgmap_meta"};
for (const char** prefix = &prefixes[0]; prefix != prefixes + sizeof(prefixes); prefix++) {
for (KeyValueDB::Iterator i = st.get_iterator(*prefix); i->valid(); i->next()) {
bufferlist value = i->value();
Expand All @@ -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");
MonitorDBStore::TransactionRef t(new MonitorDBStore::Transaction);
// stolen from PGMonitor::create_pending()
// the first pgmap_meta
t->put(prefix, "version", 1);
{
utime_t stamp = ceph_clock_now(g_ceph_context);
bufferlist bl;
::encode(stamp, bl);
t->put(prefix, "stamp", bl);
}
{
version_t 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);
{
float 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);
}
{
float 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<string>& subcmds,
MonitorDBStore& st)
Expand All @@ -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;
}
Expand Down
46 changes: 0 additions & 46 deletions src/tools/rebuild_mondb.cc
Expand Up @@ -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");
MonitorDBStore::TransactionRef t(new MonitorDBStore::Transaction);
// stolen from PGMonitor::create_pending()
// the first pgmap_meta
t->put(prefix, "version", 1);
{
utime_t stamp = ceph_clock_now(g_ceph_context);
bufferlist bl;
::encode(stamp, bl);
t->put(prefix, "stamp", bl);
}
{
version_t 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);
{
float 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);
}
{
float 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)
Expand Down

0 comments on commit 47840e0

Please sign in to comment.