From: Samuel Just Date: Thu, 21 Mar 2013 20:37:13 +0000 (-0700) Subject: PG: add helper for adding a timer event to retry backfill X-Git-Tag: v0.62~184^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=022903bf73c85343e01336e104ac444806e33af8;p=ceph.git PG: add helper for adding a timer event to retry backfill Signed-off-by: Samuel Just --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index cc131163e61..27376179762 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -3305,6 +3305,16 @@ void PG::reject_reservation() get_osdmap()->get_epoch()); } +void PG::schedule_backfill_full_retry() +{ + Mutex::Locker lock(osd->backfill_request_lock); + osd->backfill_request_timer.add_event_after( + g_conf->osd_backfill_retry_interval, + new QueuePeeringEvt( + this, get_osdmap()->get_epoch(), + RequestBackfill())); +} + void PG::clear_scrub_reserved() { osd->scrub_wq.dequeue(this); @@ -5913,24 +5923,6 @@ void PG::RecoveryState::Backfilling::exit() pg->state_clear(PG_STATE_BACKFILL); } -template -struct QueuePeeringEvt : Context { - boost::intrusive_ptr pg; - epoch_t epoch; - EVT evt; - QueuePeeringEvt(PG *pg, epoch_t epoch, EVT evt) : - pg(pg), epoch(epoch), evt(evt) {} - void finish(int r) { - pg->lock(); - pg->queue_peering_event(PG::CephPeeringEvtRef( - new PG::CephPeeringEvt( - epoch, - epoch, - evt))); - pg->unlock(); - } -}; - /*--WaitRemoteBackfillReserved--*/ PG::RecoveryState::WaitRemoteBackfillReserved::WaitRemoteBackfillReserved(my_context ctx) @@ -5977,12 +5969,7 @@ PG::RecoveryState::WaitRemoteBackfillReserved::react(const RemoteReservationReje pg->state_clear(PG_STATE_BACKFILL_WAIT); pg->state_set(PG_STATE_BACKFILL_TOOFULL); - Mutex::Locker lock(pg->osd->backfill_request_lock); - pg->osd->backfill_request_timer.add_event_after( - g_conf->osd_backfill_retry_interval, - new QueuePeeringEvt( - pg, pg->get_osdmap()->get_epoch(), - RequestBackfill())); + pg->schedule_backfill_full_retry(); return transit(); } diff --git a/src/osd/PG.h b/src/osd/PG.h index 684266558c7..c8dd11a7ab3 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1051,9 +1051,28 @@ public: void sub_op_scrub_stop(OpRequestRef op); void reject_reservation(); + void schedule_backfill_full_retry(); // -- recovery state -- + template + struct QueuePeeringEvt : Context { + boost::intrusive_ptr pg; + epoch_t epoch; + EVT evt; + QueuePeeringEvt(PG *pg, epoch_t epoch, EVT evt) : + pg(pg), epoch(epoch), evt(evt) {} + void finish(int r) { + pg->lock(); + pg->queue_peering_event(PG::CephPeeringEvtRef( + new PG::CephPeeringEvt( + epoch, + epoch, + evt))); + pg->unlock(); + } + }; + class CephPeeringEvt { epoch_t epoch_sent; epoch_t epoch_requested;