bufferlist pending_proposal;
{
MonitorDBStore::Transaction t;
- vector<string> prefixes = {"auth", "osdmap", "pgmap", "pgmap_pg"};
+ vector<string> 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();
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<MonitorDBStore::Transaction>();
+ // 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<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");
- auto t = make_shared<MonitorDBStore::Transaction>();
- // 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)