diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 164899aed2e..64af202e685 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3261,6 +3261,13 @@ epoch_t OSDMonitor::send_pg_creates(int osd, Connection *con, epoch_t next) cons dout(30) << __func__ << " osd." << osd << " next=" << next << " " << creating_pgs_by_osd_epoch << dendl; std::lock_guard l(creating_pgs_lock); + if (creating_pgs_epoch == 0 || + creating_pgs_epoch < mapping.get_epoch()) { + dout(20) << __func__ + << " not using stale creating_pgs@" << creating_pgs_epoch << dendl; + // the subscribers will be updated when the mapping is completed anyway + return next; + } auto creating_pgs_by_epoch = creating_pgs_by_osd_epoch.find(osd); if (creating_pgs_by_epoch == creating_pgs_by_osd_epoch.end()) return next; diff --git a/src/osd/OSDMapMapping.h b/src/osd/OSDMapMapping.h index 81996641ec0..f2affdc7fce 100644 --- a/src/osd/OSDMapMapping.h +++ b/src/osd/OSDMapMapping.h @@ -243,7 +243,7 @@ private: mempool::osdmap_mapping::vector< mempool::osdmap_mapping::vector> acting_rmap; // osd -> pg //unused: mempool::osdmap_mapping::vector> up_rmap; // osd -> pg - epoch_t epoch; + epoch_t epoch = 0; uint64_t num_pgs = 0; void _init_mappings(const OSDMap& osdmap);