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();
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)
}
if (!keyring_path.empty())
update_auth(st, keyring_path);
+ if ((r = update_pgmap_meta(st))) {
+ return r;
+ }
if ((r = update_paxos(st))) {
return r;
}
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)