From 2177350b01e2ec28d943fbb0cfbce70232f7a37c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 Feb 2018 16:23:51 -0600 Subject: [PATCH] osd: restructure advance_pg() call mechanism Signed-off-by: Sage Weil --- src/osd/OSD.cc | 12 +++++++----- src/osd/OSD.h | 5 +++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e684898fd4319..963afe89847e4 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 a51a0a8254155..982bb1c1bb78f 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(); -- 2.39.5