From: Sage Weil Date: Tue, 23 Jul 2019 17:31:58 +0000 (-0500) Subject: osd: add CheckReadable pg event, queue_check_readable() X-Git-Tag: v15.1.0~1379^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7aec060e0aff4588ff51f744dd194d1c0f7793c2;p=ceph.git osd: add CheckReadable pg event, queue_check_readable() Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 78d01a920afd..4d1d519ea11d 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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( + lpr, lpr, + PeeringState::CheckReadable()))); + } else { + mono_timer.add_event( + delay, + [this, spgid, lpr]() { + queue_check_readable(spgid, lpr); + }); + } +} + // ========================================================= // RECOVERY diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 57c8a87c3c61..1a79ce3b2de5 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -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 map_cache; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 2401d9defdd5..e6a0ffca6be3 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -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( diff --git a/src/osd/PG.h b/src/osd/PG.h index a35ce49215d6..7a32b6ff85dd 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -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; diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 7521fb42791b..0c354d73add1 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -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 diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 6bd4ead0c684..2a3910294c8f 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -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, boost::statechart::custom_reaction, boost::statechart::custom_reaction, + boost::statechart::custom_reaction, // 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(); };