]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add CheckReadable pg event, queue_check_readable()
authorSage Weil <sage@redhat.com>
Tue, 23 Jul 2019 17:31:58 +0000 (12:31 -0500)
committerSage Weil <sage@redhat.com>
Thu, 26 Sep 2019 17:22:22 +0000 (12:22 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc
src/osd/PG.h
src/osd/PeeringState.cc
src/osd/PeeringState.h

index 78d01a920afdf7ebaeaba03c82a89e83c84c30aa..4d1d519ea11d369e969a7511db265acd4c78fcb8 100644 (file)
@@ -9561,6 +9561,26 @@ void OSD::handle_pg_query_nopg(const MQuery& q)
   }
 }
 
+void OSDService::queue_check_readable(spg_t spgid,
+                                     epoch_t lpr,
+                                     ceph::signedspan delay)
+{
+  if (delay == ceph::signedspan::zero()) {
+    osd->enqueue_peering_evt(
+      spgid,
+      PGPeeringEventRef(
+       std::make_shared<PGPeeringEvent>(
+         lpr, lpr,
+         PeeringState::CheckReadable())));
+  } else {
+    mono_timer.add_event(
+      delay,
+      [this, spgid, lpr]() {
+       queue_check_readable(spgid, lpr);
+      });
+  }
+}
+
 
 // =========================================================
 // RECOVERY
index 57c8a87c3c61bb02f0f38bb9c6f67c7e6a153de1..1a79ce3b2de5f4a2fdde97f372d9d3e4c263a5a4 100644 (file)
@@ -669,6 +669,10 @@ public:
     _queue_for_recovery(make_pair(queued, pg), reserved_pushes);
   }
 
+  void queue_check_readable(spg_t spgid,
+                           epoch_t lpr,
+                           ceph::signedspan delay = ceph::signedspan::zero());
+
   // osd map cache (past osd maps)
   ceph::mutex map_cache_lock = ceph::make_mutex("OSDService::map_cache_lock");
   SharedLRU<epoch_t, const OSDMap> map_cache;
index 2401d9defdd57f2ff86985b130d0b88363467272..e6a0ffca6be3ac68e11381237b32e93cfc9d3443 100644 (file)
@@ -1818,6 +1818,11 @@ void PG::schedule_renew_lease(epoch_t lpr, ceph::timespan delay)
     });
 }
 
+void PG::queue_check_readable(epoch_t lpr, ceph::timespan delay)
+{
+  osd->queue_check_readable(info.pgid, lpr, delay);
+}
+
 void PG::rebuild_missing_set_with_deletes(PGLog &pglog)
 {
   pglog.rebuild_missing_set_with_deletes(
index a35ce49215d6ca04963756dce9e60a577bdd8d8d..7a32b6ff85dd6c00b8473dbdee7af28a9e4ba6ae 100644 (file)
@@ -481,6 +481,7 @@ public:
   ceph::signedspan get_mnow() override;
   HeartbeatStampsRef get_hb_stamps(int peer) override;
   void schedule_renew_lease(epoch_t lpr, ceph::timespan delay) override;
+  void queue_check_readable(epoch_t lpr, ceph::timespan delay) override;
 
   void rebuild_missing_set_with_deletes(PGLog &pglog) override;
 
index 7521fb42791b33534bfaf38f5d30d8d105b7cc62..0c354d73add1c954f31b09c6c47642e0723eab90 100644 (file)
@@ -5766,6 +5766,14 @@ boost::statechart::result PeeringState::Active::react(const MLeaseAck& la)
   return discard_event();
 }
 
+
+boost::statechart::result PeeringState::Active::react(const CheckReadable &evt)
+{
+  DECLARE_LOCALS;
+  pl->recheck_readable();
+  return discard_event();
+}
+
 /*
  * update info.history.last_epoch_started ONLY after we and all
  * replicas have activated AND committed the activate transaction
index 6bd4ead0c684ffa470b695fbae8356a14cb2d6b4..2a3910294c8fe20c4011e6310c1b652c1707f6cf 100644 (file)
@@ -273,6 +273,7 @@ public:
     virtual ceph::signedspan get_mnow() = 0;
     virtual HeartbeatStampsRef get_hb_stamps(int peer) = 0;
     virtual void schedule_renew_lease(epoch_t plr, ceph::timespan delay) = 0;
+    virtual void queue_check_readable(epoch_t lpr, ceph::timespan delay) = 0;
     virtual void recheck_readable() = 0;
 
     // ============ Flush state ==================
@@ -535,6 +536,8 @@ public:
   TrivialEvent(DeleteReserved)
   TrivialEvent(DeleteInterrupted)
 
+  TrivialEvent(CheckReadable)
+
   void start_handle(PeeringCtx *new_ctx);
   void end_handle();
   void begin_block_outgoing();
@@ -698,6 +701,7 @@ public:
       boost::statechart::custom_reaction<SetForceBackfill>,
       boost::statechart::custom_reaction<UnsetForceBackfill>,
       boost::statechart::custom_reaction<RequestScrub>,
+      boost::statechart::custom_reaction<CheckReadable>,
       // crash
       boost::statechart::transition< boost::statechart::event_base, Crashed >
       > reactions;
@@ -816,7 +820,8 @@ public:
       boost::statechart::custom_reaction< RemoteReservationRevoked>,
       boost::statechart::custom_reaction< DoRecovery>,
       boost::statechart::custom_reaction< RenewLease>,
-      boost::statechart::custom_reaction< MLeaseAck>
+      boost::statechart::custom_reaction< MLeaseAck>,
+      boost::statechart::custom_reaction< CheckReadable>
       > reactions;
     boost::statechart::result react(const QueryState& q);
     boost::statechart::result react(const ActMap&);
@@ -853,6 +858,7 @@ public:
     boost::statechart::result react(const DoRecovery&) {
       return discard_event();
     }
+    boost::statechart::result react(const CheckReadable&);
     void all_activated_and_committed();
   };