]> 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>
Thu, 28 Sep 2017 19:14:43 +0000 (15:14 -0400)
For now it is always the retry interval, but later perhaps not!

Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 597dfd11728b55ad181316ac10be7155e37a6ba9)

src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 426da2440089115065c5c2e191580b1137636ee0..8bb38c2f83f60818f9a63d403ec7978d1887b903 100644 (file)
@@ -9404,14 +9404,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 c5899b7716f570503b2a8fee4ca48e13ed71bcf4..80554a6c43ddc247a6cfa14f9b82e713a6c2c597 100644 (file)
@@ -3878,21 +3878,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()));
@@ -6400,7 +6400,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);
@@ -6426,7 +6426,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>();
 }
 
@@ -6456,7 +6456,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>();
 }
 
@@ -6550,7 +6550,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>();
 }
@@ -6835,7 +6835,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>();
 }
 
@@ -6954,7 +6954,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 7f162efc9f5c3a55a028d469897d4801a3f8687f..d73b48daf0538581c0e84bb25ac91288bdaf3ae1 100644 (file)
@@ -1410,8 +1410,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 --
 
@@ -1563,6 +1563,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)
@@ -1573,13 +1588,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)