]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: make BackgroundRecovery abstract for the sake of backfill.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 4 May 2020 17:47:18 +0000 (19:47 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 13 Jul 2020 14:23:56 +0000 (16:23 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/background_recovery.cc
src/crimson/osd/osd_operations/background_recovery.h
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/pg.h
src/crimson/osd/pg_recovery.cc
src/crimson/osd/pg_recovery.h

index 29b2418c1d6d28d72aa20e8f75f9d74e1dd68322..d8db74bc9d0ef8b0b91ee696e0eed0c36a91a7a1 100644 (file)
@@ -27,15 +27,6 @@ BackgroundRecovery::BackgroundRecovery(
     scheduler_class(scheduler_class)
 {}
 
-seastar::future<bool> BackgroundRecovery::do_recovery()
-{
-  if (pg->has_reset_since(epoch_started))
-    return seastar::make_ready_future<bool>(false);
-  return with_blocking_future(
-    pg->get_recovery_handler()->start_recovery_ops(
-      crimson::common::local_conf()->osd_recovery_max_single_start));
-}
-
 void BackgroundRecovery::print(std::ostream &lhs) const
 {
   lhs << "BackgroundRecovery(" << pg->get_pgid() << ")";
@@ -97,4 +88,24 @@ void UrgentRecovery::dump_detail(Formatter *f) const
   f->close_section();
 }
 
+PglogBasedRecovery::PglogBasedRecovery(
+  Ref<PG> pg,
+  ShardServices &ss,
+  const epoch_t epoch_started)
+  : BackgroundRecovery(
+      std::move(pg),
+      ss,
+      epoch_started,
+      crimson::osd::scheduler::scheduler_class_t::background_recovery)
+{}
+
+seastar::future<bool> PglogBasedRecovery::do_recovery()
+{
+  if (pg->has_reset_since(epoch_started))
+    return seastar::make_ready_future<bool>(false);
+  return with_blocking_future(
+    pg->get_recovery_handler()->start_recovery_ops(
+      crimson::common::local_conf()->osd_recovery_max_single_start));
+}
+
 }
index 1890d22be97736cb0b572af1fe864e483f47b928..789d7b1901ae0c701fb2b086879744cccca35f15 100644 (file)
@@ -3,6 +3,8 @@
 
 #pragma once
 
+#include <boost/statechart/event_base.hpp>
+
 #include "crimson/net/Connection.h"
 #include "crimson/osd/osd_operation.h"
 #include "crimson/common/type_helpers.h"
@@ -39,7 +41,7 @@ protected:
       scheduler_class
     };
   }
-  virtual seastar::future<bool> do_recovery();
+  virtual seastar::future<bool> do_recovery() = 0;
 };
 
 class UrgentRecovery final : public BackgroundRecovery {
@@ -49,9 +51,8 @@ public:
     const eversion_t& need,
     Ref<PG> pg,
     ShardServices& ss,
-    epoch_t epoch_started,
-    crimson::osd::scheduler::scheduler_class_t scheduler_class)
-  : BackgroundRecovery{pg, ss, epoch_started, scheduler_class},
+    epoch_t epoch_started)
+  : BackgroundRecovery{pg, ss, epoch_started, crimson::osd::scheduler::scheduler_class_t::immediate},
     soid{soid}, need(need) {}
   void print(std::ostream&) const final;
   void dump_detail(Formatter* f) const final;
@@ -61,4 +62,14 @@ private:
   seastar::future<bool> do_recovery() override;
 };
 
+class PglogBasedRecovery final : public BackgroundRecovery {
+  seastar::future<bool> do_recovery() override;
+
+public:
+  PglogBasedRecovery(
+    Ref<PG> pg,
+    ShardServices &ss,
+    epoch_t epoch_started);
+};
+
 }
index 0d7123181fbd3d48fb177ee562bcade4462ed9f5..339d4c0935f78c0004fc183aaaa0c72b7747d642 100644 (file)
@@ -131,8 +131,7 @@ seastar::future<> ClientRequest::process_op(
     const hobject_t& soid = m->get_hobj();
     if (pg.is_unreadable_object(soid, &ver)) {
       auto [op, fut] = osd.get_shard_services().start_operation<UrgentRecovery>(
-                         soid, ver, pgref, osd.get_shard_services(), m->get_min_epoch(),
-                         crimson::osd::scheduler::scheduler_class_t::immediate);
+                         soid, ver, pgref, osd.get_shard_services(), m->get_min_epoch());
       return std::move(fut);
     }
     return seastar::now();
index ccf874fae306e9e3d844674eab11efe8589d46b4..9166f4cf0c4d7bf235a1c7d1125d9dd9ee345fd6 100644 (file)
@@ -350,8 +350,7 @@ public:
     ceph_assert(0 == "Not implemented");
   }
   void on_recovery_reserved() final {
-    recovery_handler->start_background_recovery(
-      crimson::osd::scheduler::scheduler_class_t::background_recovery);
+    recovery_handler->start_pglogbased_recovery();
   }
 
 
index 545b2a87be3cd40fb708f50641eefa39bf74a8eb..bc6c56bd60ba9ad31be4bdfee441dd5771aea0f9 100644 (file)
@@ -26,15 +26,13 @@ namespace {
   }
 }
 
-void PGRecovery::start_background_recovery(
-  crimson::osd::scheduler::scheduler_class_t klass)
+void PGRecovery::start_pglogbased_recovery()
 {
-  using BackgroundRecovery = crimson::osd::BackgroundRecovery;
-  (void) pg->get_shard_services().start_operation<BackgroundRecovery>(
+  using PglogBasedRecovery = crimson::osd::PglogBasedRecovery;
+  (void) pg->get_shard_services().start_operation<PglogBasedRecovery>(
     static_cast<crimson::osd::PG*>(pg),
     pg->get_shard_services(),
-    pg->get_osdmap_epoch(),
-    klass);
+    pg->get_osdmap_epoch());
 }
 
 crimson::osd::blocking_future<bool>
index 77ee1122f2e817e250499b30723f7251b73bb2b5..0ba8fda274ccdcaa952d08ad42881f684594999c 100644 (file)
@@ -18,8 +18,7 @@ class PGRecovery {
 public:
   PGRecovery(PGRecoveryListener* pg) : pg(pg) {}
   virtual ~PGRecovery() {}
-  void start_background_recovery(
-    crimson::osd::scheduler::scheduler_class_t klass);
+  void start_pglogbased_recovery();
 
   crimson::osd::blocking_future<bool> start_recovery_ops(size_t max_to_start);
   seastar::future<> stop() { return seastar::now(); }