From: Sage Weil Date: Mon, 26 Feb 2018 22:23:51 +0000 (-0600) Subject: osd: restructure advance_pg() call mechanism X-Git-Tag: v14.0.1~371^2~58 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2177350b01e2ec28d943fbb0cfbce70232f7a37c;p=ceph.git osd: restructure advance_pg() call mechanism Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e684898fd431..963afe89847e 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -7853,11 +7853,14 @@ void OSD::_finish_splits(set& pgs) dispatch_context(rctx, 0, service.get_osdmap()); }; -void OSD::advance_pg( +bool OSD::advance_pg( epoch_t osd_epoch, PG *pg, ThreadPool::TPHandle &handle, PG::RecoveryCtx *rctx) { + if (osd_epoch <= pg->get_osdmap_epoch()) { + return true; + } ceph_assert(pg->is_locked()); OSDMapRef lastmap = pg->get_osdmap(); ceph_assert(lastmap->get_epoch() < osd_epoch); @@ -7902,6 +7905,8 @@ void OSD::advance_pg( if (!new_pgs.empty()) { rctx->transaction->register_on_applied(new C_FinishSplits(this, new_pgs)); } + + return true; } void OSD::consume_map() @@ -8994,10 +8999,7 @@ void OSD::dequeue_peering_evt( derr << __func__ << " unrecognized pg-less event " << evt->get_desc() << dendl; ceph_abort(); } - } else { - if (curmap->get_epoch() > pg->get_osdmap_epoch()) { - advance_pg(curmap->get_epoch(), pg, handle, &rctx); - } + } else if (advance_pg(curmap->get_epoch(), pg, handle, &rctx)) { pg->do_peering_event(evt, &rctx); if (pg->is_deleted()) { // do not dispatch rctx; the final _delete_some already did it. diff --git a/src/osd/OSD.h b/src/osd/OSD.h index a51a0a825415..982bb1c1bb78 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1804,8 +1804,9 @@ protected: void note_up_osd(int osd); friend class C_OnMapCommit; - void advance_pg( - epoch_t advance_to, PG *pg, + bool advance_pg( + epoch_t advance_to, + PG *pg, ThreadPool::TPHandle &handle, PG::RecoveryCtx *rctx); void consume_map();