]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: restructure advance_pg() call mechanism
authorSage Weil <sage@redhat.com>
Mon, 26 Feb 2018 22:23:51 +0000 (16:23 -0600)
committerSage Weil <sage@redhat.com>
Fri, 7 Sep 2018 17:07:56 +0000 (12:07 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index e684898fd431973591320ccfa9b0af40df2b7c37..963afe89847e48686893350d2442b0f6e83252b0 100644 (file)
@@ -7853,11 +7853,14 @@ void OSD::_finish_splits(set<PGRef>& 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.
index a51a0a82541558c8239da605fed9f1b263f10df6..982bb1c1bb78f57c642162d1f190d27bd3850dd9 100644 (file)
@@ -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();