]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: specify delay in Cancel{Recovery,Backfill}
authorSage Weil <sage@redhat.com>
Tue, 19 Sep 2017 19:53:31 +0000 (14:53 -0500)
committerSage Weil <sage@redhat.com>
Wed, 20 Sep 2017 18:32:21 +0000 (14:32 -0400)
For now it is always the retry interval, but later perhaps not!

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 80676ce0896d4b40368228d3eca735301fd3a4c5..8029c2990ad3599b4fa5ca5d484c10c74ffc666a 100644 (file)
@@ -9155,14 +9155,14 @@ void OSD::do_recovery(
          auto evt = PG::CephPeeringEvtRef(new PG::CephPeeringEvt(
            queued,
            queued,
-           PG::CancelBackfill()));
+           PG::CancelBackfill(cct->_conf->osd_recovery_retry_interval)));
          pg->queue_peering_event(evt);
          action = "in backfill";
         } else if (pg->state_test(PG_STATE_RECOVERING)) {
          auto evt = PG::CephPeeringEvtRef(new PG::CephPeeringEvt(
            queued,
            queued,
-           PG::CancelRecovery()));
+           PG::CancelRecovery(cct->_conf->osd_recovery_retry_interval)));
          pg->queue_peering_event(evt);
          action = "in recovery";
        } else {
index 635dac07213c4edf1761ba20048116605322c182..20d76cdc986663d44eff093d21b642da7708089f 100644 (file)
@@ -3728,21 +3728,21 @@ void PG::reject_reservation()
     get_osdmap()->get_epoch());
 }
 
-void PG::schedule_backfill_full_retry()
+void PG::schedule_backfill_retry(float delay)
 {
   Mutex::Locker lock(osd->recovery_request_lock);
   osd->recovery_request_timer.add_event_after(
-    cct->_conf->osd_backfill_retry_interval,
+    delay,
     new QueuePeeringEvt<RequestBackfill>(
       this, get_osdmap()->get_epoch(),
       RequestBackfill()));
 }
 
-void PG::schedule_recovery_full_retry()
+void PG::schedule_recovery_retry(float delay)
 {
   Mutex::Locker lock(osd->recovery_request_lock);
   osd->recovery_request_timer.add_event_after(
-    cct->_conf->osd_recovery_retry_interval,
+    delay,
     new QueuePeeringEvt<DoRecovery>(
       this, get_osdmap()->get_epoch(),
       DoRecovery()));
@@ -6195,7 +6195,7 @@ PG::RecoveryState::Backfilling::Backfilling(my_context ctx)
 }
 
 boost::statechart::result
-PG::RecoveryState::Backfilling::react(const CancelBackfill &)
+PG::RecoveryState::Backfilling::react(const CancelBackfill &c)
 {
   PG *pg = context< RecoveryMachine >().pg;
   pg->osd->local_reserver.cancel_reservation(pg->info.pgid);
@@ -6221,7 +6221,7 @@ PG::RecoveryState::Backfilling::react(const CancelBackfill &)
 
   pg->waiting_on_backfill.clear();
 
-  pg->schedule_backfill_full_retry();
+  pg->schedule_backfill_retry(c.delay);
   return transit<NotBackfilling>();
 }
 
@@ -6251,7 +6251,7 @@ PG::RecoveryState::Backfilling::react(const RemoteReservationRejected &)
   pg->waiting_on_backfill.clear();
   pg->finish_recovery_op(hobject_t::get_max());
 
-  pg->schedule_backfill_full_retry();
+  pg->schedule_backfill_retry(pg->cct->_conf->osd_recovery_retry_interval);
   return transit<NotBackfilling>();
 }
 
@@ -6345,7 +6345,7 @@ PG::RecoveryState::WaitRemoteBackfillReserved::react(const RemoteReservationReje
   pg->state_set(PG_STATE_BACKFILL_TOOFULL);
   pg->publish_stats_to_osd();
 
-  pg->schedule_backfill_full_retry();
+  pg->schedule_backfill_retry(pg->cct->_conf->osd_recovery_retry_interval);
 
   return transit<NotBackfilling>();
 }
@@ -6630,7 +6630,7 @@ PG::RecoveryState::WaitLocalRecoveryReserved::react(const RecoveryTooFull &evt)
 {
   PG *pg = context< RecoveryMachine >().pg;
   pg->state_set(PG_STATE_RECOVERY_TOOFULL);
-  pg->schedule_recovery_full_retry();
+  pg->schedule_recovery_retry(pg->cct->_conf->osd_recovery_retry_interval);
   return transit<NotRecovering>();
 }
 
@@ -6749,7 +6749,7 @@ PG::RecoveryState::Recovering::react(const CancelRecovery &evt)
   pg->state_set(PG_STATE_RECOVERY_WAIT);
   pg->osd->local_reserver.cancel_reservation(pg->info.pgid);
   release_reservations(true);
-  pg->schedule_recovery_full_retry();
+  pg->schedule_recovery_retry(evt.delay);
   return transit<NotRecovering>();
 }
 
index 05a74afdb9c4fe4a2b643477a4d2738528eef21b..2b9c42e6abbb6ce132fcff6f5faa3c5cc3f048aa 100644 (file)
@@ -1405,8 +1405,8 @@ public:
   void handle_scrub_reserve_release(OpRequestRef op);
 
   void reject_reservation();
-  void schedule_backfill_full_retry();
-  void schedule_recovery_full_retry();
+  void schedule_backfill_retry(float retry);
+  void schedule_recovery_retry(float retry);
 
   // -- recovery state --
 
@@ -1558,6 +1558,21 @@ public:
       *out << #T;                                                 \
     }                                                             \
   };
+  struct CancelBackfill : boost::statechart::event<CancelBackfill> {
+    float delay;
+    explicit CancelBackfill(float delay) : delay(delay) {}
+    void print(std::ostream *out) const {
+      *out << "CancelBackfill: delay " << delay;
+    }
+  };
+  struct CancelRecovery : boost::statechart::event<CancelRecovery> {
+    float delay;
+    explicit CancelRecovery(float delay) : delay(delay) {}
+    void print(std::ostream *out) const {
+      *out << "CancelRecovery: delay " << delay;
+    }
+  };
+
   TrivialEvent(Initialize)
   TrivialEvent(Load)
   TrivialEvent(GotInfo)
@@ -1568,13 +1583,11 @@ public:
   TrivialEvent(LocalBackfillReserved)
   TrivialEvent(RemoteBackfillReserved)
   TrivialEvent(RemoteReservationRejected)
-  TrivialEvent(CancelBackfill)
   TrivialEvent(RequestBackfill)
   TrivialEvent(RequestRecovery)
   TrivialEvent(RecoveryDone)
   TrivialEvent(BackfillTooFull)
   TrivialEvent(RecoveryTooFull)
-  TrivialEvent(CancelRecovery)
 
   TrivialEvent(MakePrimary)
   TrivialEvent(MakeStray)