We weren't carefully registering the creating PG. In
particular, the current osd mappings (acting, up, etc.)
weren't getting filled in, which meant the PG wasn't
(necessarily) mapped to an OSD until the OSDMap updated
and we recalculated mappings.
Fix by sending us through the common code path so that
all fields get updated properly.
Fixes: http://tracker.ceph.com/issues/18298
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit
9a41a0b7289fa59f4b747a63e152e88af6e8abd5)
Conflicts:
src/mon/PGMonitor.cc
PGMap *pg_map,
PGMap::Incremental *pending_inc);
-protected:
static void register_pg(
const OSDMap &osd_map,
pg_t pgid, epoch_t epoch,
goto reply;
}
{
- pg_stat_t& s = pending_inc.pg_stat_updates[pgid];
- s.state = PG_STATE_CREATING;
- s.created = epoch;
- s.last_change = ceph_clock_now(g_ceph_context);
+ PGMapUpdater::register_pg(
+ mon->osdmon()->osdmap,
+ pgid,
+ epoch,
+ true,
+ &pg_map,
+ &pending_inc);
}
ss << "pg " << pgidstr << " now creating, ok";
goto update;