]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/osd_operations: make the "recover_missing" phase concurrent
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 27 Jun 2024 10:17:29 +0000 (18:17 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Wed, 7 Aug 2024 11:17:44 +0000 (19:17 +0800)
Otherwise, UrgentRecovery requests within the same pg can only be
processed sequentially

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/osd/osd_operation_external_tracking.h
src/crimson/osd/osd_operations/common/pg_pipeline.h

index 28738a11dda4df3bc4a9dd29f34165073a7dce81..2f05d70a8bde2037b9607207cd5d5ec676cdda12 100644 (file)
@@ -33,6 +33,8 @@ struct LttngBackend
     PGActivationBlocker::BlockingEvent::Backend,
     scrub::PGScrubber::BlockingEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissing::BlockingEvent::Backend,
+    ClientRequest::PGPipeline::RecoverMissing::
+      BlockingEvent::ExitBarrierEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissingLockOBC::BlockingEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissingLockOBC::
       BlockingEvent::ExitBarrierEvent::Backend,
@@ -109,6 +111,10 @@ struct LttngBackend
               const ClientRequest::PGPipeline::RecoverMissing& blocker) override {
   }
 
+  void handle(ClientRequest::PGPipeline::RecoverMissing::BlockingEvent::ExitBarrierEvent& ev,
+             const Operation& op) override {
+  }
+
   void handle(ClientRequest::PGPipeline::RecoverMissingLockOBC::BlockingEvent& ev,
               const Operation& op,
               const ClientRequest::PGPipeline::RecoverMissingLockOBC& blocker) override {
@@ -175,6 +181,8 @@ struct HistoricBackend
     PGActivationBlocker::BlockingEvent::Backend,
     scrub::PGScrubber::BlockingEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissing::BlockingEvent::Backend,
+    ClientRequest::PGPipeline::RecoverMissing::
+      BlockingEvent::ExitBarrierEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissingLockOBC::BlockingEvent::Backend,
     ClientRequest::PGPipeline::RecoverMissingLockOBC::
       BlockingEvent::ExitBarrierEvent::Backend,
@@ -251,6 +259,10 @@ struct HistoricBackend
               const ClientRequest::PGPipeline::RecoverMissing& blocker) override {
   }
 
+  void handle(ClientRequest::PGPipeline::RecoverMissing::BlockingEvent::ExitBarrierEvent& ev,
+              const Operation& op) override {
+  }
+
   void handle(ClientRequest::PGPipeline::RecoverMissingLockOBC::BlockingEvent& ev,
               const Operation& op,
               const ClientRequest::PGPipeline::RecoverMissingLockOBC& blocker) override {
index d13dbe2e0d20039c84bc7735ecba3d24f4a25527..5984a1399baeb6b29afc825a6d1bb945a8e8e61a 100644 (file)
@@ -17,7 +17,7 @@ protected:
   struct WaitForActive : OrderedExclusivePhaseT<WaitForActive> {
     static constexpr auto type_name = "CommonPGPipeline:::wait_for_active";
   } wait_for_active;
-  struct RecoverMissing : OrderedExclusivePhaseT<RecoverMissing> {
+  struct RecoverMissing : OrderedConcurrentPhaseT<RecoverMissing> {
     static constexpr auto type_name = "CommonPGPipeline::recover_missing";
   } recover_missing;
   struct GetOBC : OrderedExclusivePhaseT<GetOBC> {