We do two things here:
- make init an one-time unconditional init method, which is what the
health service expects/needs.
- switch PGMonitor::init to be post_paxos_update() which is called after
the other services update, which is what PGMonitor really needs.
This is a new version of the fix originally in commit
a2fe0137946541e7b3b537698e1865fbce974ca6 (and those around it). That is,
this re-fixes a problem where osds do not see pg creates from their
subscribe due to map_pg_creates() not getting called.
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit
e635c47851d185eda557e36bdc4bf3775f7b87a2)
Conflicts:
src/mon/PGMonitor.cc
src/mon/PGMonitor.h
dout(10) << __func__ << dendl;
paxos->init();
+ // init services
+ for (int i = 0; i < PAXOS_NUM; ++i) {
+ paxos_service[i]->init();
+ }
+
// update paxos
if (paxos->is_consistent()) {
refresh_from_paxos(NULL);
-
- // init services
- for (int i = 0; i < PAXOS_NUM; ++i) {
- paxos_service[i]->init();
- }
}
}
update_logger();
}
-void PGMonitor::init()
+void PGMonitor::post_paxos_update()
{
if (mon->osdmon()->osdmap.get_epoch()) {
map_pg_creates();
void create_initial();
void update_from_paxos(bool *need_bootstrap);
- void init();
+ void post_paxos_update();
void handle_osd_timeouts();
void create_pending(); // prepare a new pending
// propose pending update to peers