]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: generalize PGSrub, PGRecovery, PGSnapTrim
authormyoungwon oh <omwmw@sk.com>
Fri, 15 Sep 2017 13:30:23 +0000 (22:30 +0900)
committermyoungwon oh <omwmw@sk.com>
Tue, 10 Oct 2017 14:18:22 +0000 (23:18 +0900)
This commit will allow PGScrub, PGRecovery, PGSnapTrim
to be created anywhere (e.g. TestMClockClientQueue.cc)

Signed-off-by: Myoungwon Oh <omwmw@sk.com>
src/osd/OSD.cc
src/osd/OSD.h
src/osd/OpQueueItem.cc
src/osd/OpQueueItem.h
src/test/osd/CMakeLists.txt
src/test/osd/TestMClockClientQueue.cc
src/test/osd/TestMClockOpClassQueue.cc

index edf05b4d2e3017b9aaccd49d505a3a14a8e2be8f..39404f7ddb0b9504f9940ebde8ecfb712b74f0d1 100644 (file)
@@ -1691,26 +1691,6 @@ void OSDService::queue_for_peering(PG *pg)
 
 void OSDService::queue_for_snap_trim(PG *pg)
 {
-  class PGSnapTrim : public PGOpQueueable {
-    epoch_t epoch_queued;
-  public:
-    PGSnapTrim(
-      spg_t pg,
-      epoch_t epoch_queued)
-      : PGOpQueueable(pg), epoch_queued(epoch_queued) {}
-    op_type_t get_op_type() const override final {
-      return op_type_t::bg_snaptrim;
-    }
-    ostream &print(ostream &rhs) const override final {
-      return rhs << "PGSnapTrim(pgid=" << get_pgid()
-                << "epoch_queued=" << epoch_queued
-                << ")";
-    }
-    void run(
-      OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final {
-      pg->snap_trimmer(epoch_queued);
-    }
-  };
   dout(10) << "queueing " << *pg << " for snaptrim" << dendl;
   enqueue_back(
     OpQueueItem(
@@ -1725,26 +1705,6 @@ void OSDService::queue_for_snap_trim(PG *pg)
 
 void OSDService::queue_for_scrub(PG *pg, bool with_high_priority)
 {
-  class PGScrub : public PGOpQueueable {
-    epoch_t epoch_queued;
-  public:
-    PGScrub(
-      spg_t pg,
-      epoch_t epoch_queued)
-      : PGOpQueueable(pg), epoch_queued(epoch_queued) {}
-    op_type_t get_op_type() const override final {
-      return op_type_t::bg_scrub;
-    }
-    ostream &print(ostream &rhs) const override final {
-      return rhs << "PGScrub(pgid=" << get_pgid()
-                << "epoch_queued=" << epoch_queued
-                << ")";
-    }
-    void run(
-      OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final {
-      pg->scrub(epoch_queued, handle);
-    }
-  };
   unsigned scrub_queue_priority = pg->scrubber.priority;
   if (with_high_priority && scrub_queue_priority < cct->_conf->osd_client_op_priority) {
     scrub_queue_priority = cct->_conf->osd_client_op_priority;
@@ -1764,34 +1724,6 @@ void OSDService::_queue_for_recovery(
   std::pair<epoch_t, PGRef> p,
   uint64_t reserved_pushes)
 {
-  class PGRecovery : public PGOpQueueable {
-    epoch_t epoch_queued;
-    uint64_t reserved_pushes;
-  public:
-    PGRecovery(
-      spg_t pg,
-      epoch_t epoch_queued,
-      uint64_t reserved_pushes)
-      : PGOpQueueable(pg),
-       epoch_queued(epoch_queued),
-       reserved_pushes(reserved_pushes) {}
-    op_type_t get_op_type() const override final {
-      return op_type_t::bg_recovery;
-    }
-    virtual ostream &print(ostream &rhs) const override final {
-      return rhs << "PGRecovery(pgid=" << get_pgid()
-                << "epoch_queued=" << epoch_queued
-                << "reserved_pushes=" << reserved_pushes
-                << ")";
-    }
-    virtual uint64_t get_reserved_pushes() const override final {
-      return reserved_pushes;
-    }
-    virtual void run(
-      OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final {
-      osd->do_recovery(pg.get(), epoch_queued, reserved_pushes, handle);
-    }
-  };
   assert(recovery_lock.is_locked_by_me());
   enqueue_back(
     OpQueueItem(
index 2df4ad6e87efda0165ce4cb78bfd1539c3130f9c..4895bcbdab47fd7d3c9fb873098a2afd43c5f28b 100644 (file)
@@ -1593,6 +1593,7 @@ private:
    * and already requeued the items.
    */
   friend class PGOpItem;
+  friend class PGRecovery;
 
   class ShardedOpWQ
     : public ShardedThreadPool::ShardedWQ<OpQueueItem>
index 02bd16727718e0615c4254ec0d52c8369e20b503..90d256f21c18a15bb6916d0420df01de61c3f035 100644 (file)
@@ -21,3 +21,26 @@ void PGOpItem::run(OSD *osd,
 {
   osd->dequeue_op(pg, op, handle);
 }
+
+void PGSnapTrim::run(OSD *osd,
+                   PGRef& pg,
+                   ThreadPool::TPHandle &handle)
+{
+  pg->snap_trimmer(epoch_queued);
+}
+
+void PGScrub::run(OSD *osd,
+                   PGRef& pg,
+                   ThreadPool::TPHandle &handle)
+{
+  pg->scrub(epoch_queued, handle);
+}
+
+void PGRecovery::run(OSD *osd,
+                   PGRef& pg,
+                   ThreadPool::TPHandle &handle)
+{
+  osd->do_recovery(pg.get(), epoch_queued, reserved_pushes, handle);
+}
+
+
index 212be71c96af635a9aff8b06fd864ee72535ea19..457c9ee4b474dd1f869f9c6f841b127d60662108 100644 (file)
 
 class OSD;
 
-
-struct PGScrub {
-  epoch_t epoch_queued;
-  explicit PGScrub(epoch_t e) : epoch_queued(e) {}
-  ostream &operator<<(ostream &rhs) {
-    return rhs << "PGScrub";
-  }
-};
-
-struct PGSnapTrim {
-  epoch_t epoch_queued;
-  explicit PGSnapTrim(epoch_t e) : epoch_queued(e) {}
-  ostream &operator<<(ostream &rhs) {
-    return rhs << "PGSnapTrim";
-  }
-};
-
-struct PGRecovery {
-  epoch_t epoch_queued;
-  uint64_t reserved_pushes;
-  PGRecovery(epoch_t e, uint64_t reserved_pushes)
-    : epoch_queued(e), reserved_pushes(reserved_pushes) {}
-  ostream &operator<<(ostream &rhs) {
-    return rhs << "PGRecovery(epoch=" << epoch_queued
-              << ", reserved_pushes: " << reserved_pushes << ")";
-  }
-};
-
 class OpQueueItem {
 public:
   class OrderLocker {
@@ -213,3 +185,68 @@ public:
   }
   void run(OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final;
 };
+
+class PGSnapTrim : public PGOpQueueable {
+  epoch_t epoch_queued;
+public:
+  PGSnapTrim(
+    spg_t pg,
+    epoch_t epoch_queued)
+    : PGOpQueueable(pg), epoch_queued(epoch_queued) {}
+  op_type_t get_op_type() const override final {
+    return op_type_t::bg_snaptrim;
+  }
+  ostream &print(ostream &rhs) const override final {
+    return rhs << "PGSnapTrim(pgid=" << get_pgid()
+              << "epoch_queued=" << epoch_queued
+              << ")";
+  }
+  void run(
+    OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final;
+};
+
+class PGScrub : public PGOpQueueable {
+  epoch_t epoch_queued;
+public:
+  PGScrub(
+    spg_t pg,
+    epoch_t epoch_queued)
+    : PGOpQueueable(pg), epoch_queued(epoch_queued) {}
+  op_type_t get_op_type() const override final {
+    return op_type_t::bg_scrub;
+  }
+  ostream &print(ostream &rhs) const override final {
+    return rhs << "PGScrub(pgid=" << get_pgid()
+              << "epoch_queued=" << epoch_queued
+              << ")";
+  }
+  void run(
+    OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final;
+};
+
+class PGRecovery : public PGOpQueueable {
+  epoch_t epoch_queued;
+  uint64_t reserved_pushes;
+public:
+  PGRecovery(
+    spg_t pg,
+    epoch_t epoch_queued,
+    uint64_t reserved_pushes)
+    : PGOpQueueable(pg),
+      epoch_queued(epoch_queued),
+      reserved_pushes(reserved_pushes) {}
+  op_type_t get_op_type() const override final {
+    return op_type_t::bg_recovery;
+  }
+  virtual ostream &print(ostream &rhs) const override final {
+    return rhs << "PGRecovery(pgid=" << get_pgid()
+              << "epoch_queued=" << epoch_queued
+              << "reserved_pushes=" << reserved_pushes
+              << ")";
+  }
+  virtual uint64_t get_reserved_pushes() const override final {
+    return reserved_pushes;
+  }
+  virtual void run(
+    OSD *osd, PGRef& pg, ThreadPool::TPHandle &handle) override final;
+};
index 3d5af54c222bc72a3ba252343a3e9b0f2bd4d934..64639d5ec8eba202fa409bc8b99d479f51ad29f0 100644 (file)
@@ -103,7 +103,7 @@ add_executable(unittest_mclock_op_class_queue
 )
 add_ceph_unittest(unittest_mclock_op_class_queue)
 target_link_libraries(unittest_mclock_op_class_queue
-  global osd dmclock
+  global osd dmclock os
 )
 
 # unittest_mclock_client_queue
@@ -112,5 +112,5 @@ add_executable(unittest_mclock_client_queue
 )
 add_ceph_unittest(unittest_mclock_client_queue)
 target_link_libraries(unittest_mclock_client_queue
-  global osd dmclock
+  global osd dmclock os
 )
index afdec02eb53865ffd51167562e65ef076ce10380..82490e594d2f10cb26ee670c3458b5ccb13a2c73 100644 (file)
@@ -43,22 +43,19 @@ public:
 #endif
 
   Request create_snaptrim(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGSnapTrim(e),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGSnapTrim(spg_t(), e)),
                               12, 12,
                               utime_t(), owner, e));
   }
 
   Request create_scrub(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGScrub(e),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGScrub(spg_t(), e)),
                               12, 12,
                               utime_t(), owner, e));
   }
 
   Request create_recovery(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGRecovery(e, 64),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGRecovery(spg_t(), e, 64)),
                               12, 12,
                               utime_t(), owner, e));
   }
@@ -116,21 +113,21 @@ TEST_F(MClockClientQueueTest, TestEnqueue) {
   q.enqueue(client1, 12, 0, create_snaptrim(104, client1));
 
   Request r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(101u, r.second.get_map_epoch());
+  ASSERT_EQ(101u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_TRUE(r.second.get_map_epoch() == 102u ||
-              r.second.get_map_epoch() == 104u);
+  ASSERT_TRUE(r.get_map_epoch() == 102u ||
+              r.get_map_epoch() == 104u);
 
   r = q.dequeue();
-  ASSERT_TRUE(r.second.get_map_epoch() == 102u ||
-              r.second.get_map_epoch() == 104u);
+  ASSERT_TRUE(r.get_map_epoch() == 102u ||
+              r.get_map_epoch() == 104u);
 }
 
 
@@ -142,19 +139,19 @@ TEST_F(MClockClientQueueTest, TestEnqueueStrict) {
   q.enqueue_strict(client1, 15, create_snaptrim(104, client1));
 
   Request r = q.dequeue();
-  ASSERT_EQ(102u, r.second.get_map_epoch());
+  ASSERT_EQ(102u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(104u, r.second.get_map_epoch());
+  ASSERT_EQ(104u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(101u, r.second.get_map_epoch());
+  ASSERT_EQ(101u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 }
 
 
@@ -170,18 +167,18 @@ TEST_F(MClockClientQueueTest, TestRemoveByClass) {
 
   ASSERT_EQ(2u, filtered_out.size());
   while (!filtered_out.empty()) {
-    auto e = filtered_out.front().second.get_map_epoch() ;
+    auto e = filtered_out.front().get_map_epoch() ;
     ASSERT_TRUE(e == 101 || e == 102);
     filtered_out.pop_front();
   }
 
   ASSERT_EQ(3u, q.length());
   Request r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(104u, r.second.get_map_epoch());
+  ASSERT_EQ(104u, r.get_map_epoch());
 }
index d6fd8f46e81452e4d7c0a70d8032d46b4871ec0a..1c9329cfdfa431e7c16d6cf014b3279d1083bad8 100644 (file)
@@ -45,22 +45,19 @@ public:
 #endif
 
   Request create_snaptrim(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGSnapTrim(e),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGSnapTrim(spg_t(), e)),
                               12, 12,
                               utime_t(), owner, e));
   }
 
   Request create_scrub(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGScrub(e),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGScrub(spg_t(), e)),
                               12, 12,
                               utime_t(), owner, e));
   }
 
   Request create_recovery(epoch_t e, uint64_t owner) {
-    return Request(spg_t(),
-                  OpQueueItem(PGRecovery(e, 64),
+    return Request(OpQueueItem(unique_ptr<OpQueueItem::OpQueueable>(new PGRecovery(spg_t(), e, 64)),
                               12, 12,
                               utime_t(), owner, e));
   }
@@ -118,19 +115,19 @@ TEST_F(MClockOpClassQueueTest, TestEnqueue) {
   q.enqueue(client1, 12, 0, create_snaptrim(104, client1));
 
   Request r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(101u, r.second.get_map_epoch());
+  ASSERT_EQ(101u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(102u, r.second.get_map_epoch());
+  ASSERT_EQ(102u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(104u, r.second.get_map_epoch());
+  ASSERT_EQ(104u, r.get_map_epoch());
 }
 
 
@@ -142,19 +139,19 @@ TEST_F(MClockOpClassQueueTest, TestEnqueueStrict) {
   q.enqueue_strict(client1, 15, create_snaptrim(104, client1));
 
   Request r = q.dequeue();
-  ASSERT_EQ(102u, r.second.get_map_epoch());
+  ASSERT_EQ(102u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(104u, r.second.get_map_epoch());
+  ASSERT_EQ(104u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(101u, r.second.get_map_epoch());
+  ASSERT_EQ(101u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 }
 
 
@@ -170,18 +167,18 @@ TEST_F(MClockOpClassQueueTest, TestRemoveByClass) {
 
   ASSERT_EQ(2u, filtered_out.size());
   while (!filtered_out.empty()) {
-    auto e = filtered_out.front().second.get_map_epoch() ;
+    auto e = filtered_out.front().get_map_epoch() ;
     ASSERT_TRUE(e == 101 || e == 102);
     filtered_out.pop_front();
   }
 
   ASSERT_EQ(3u, q.length());
   Request r = q.dequeue();
-  ASSERT_EQ(103u, r.second.get_map_epoch());
+  ASSERT_EQ(103u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(100u, r.second.get_map_epoch());
+  ASSERT_EQ(100u, r.get_map_epoch());
 
   r = q.dequeue();
-  ASSERT_EQ(104u, r.second.get_map_epoch());
+  ASSERT_EQ(104u, r.get_map_epoch());
 }