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>
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();
+ PGMapUpdater::register_pg(
+ mon->osdmon()->osdmap,
+ pgid,
+ epoch,
+ true,
+ &pg_map,
+ &pending_inc);
}
ss << "pg " << pgidstr << " now creating, ok";
goto update;