mon/PGMonitor: use post_paxos_update, not init, to refresh from osdmap

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
a2fe013794 (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>
This commit is contained in:
Sage Weil 2013-06-26 06:53:08 -07:00
parent 131686980f
commit e635c47851
3 changed files with 7 additions and 7 deletions

View File

@ -520,14 +520,14 @@ void Monitor::init_paxos()
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();
}
}
}

View File

@ -271,7 +271,7 @@ void PGMonitor::upgrade_format()
propose_pending();
}
void PGMonitor::init()
void PGMonitor::post_paxos_update()
{
if (mon->osdmon()->osdmap.get_epoch()) {
map_pg_creates();

View File

@ -53,7 +53,7 @@ private:
void create_initial();
void update_from_paxos(bool *need_bootstrap);
void upgrade_format();
void init();
void post_paxos_update();
void handle_osd_timeouts();
void create_pending(); // prepare a new pending
// propose pending update to peers