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(
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;
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(
* and already requeued the items.
*/
friend class PGOpItem;
+ friend class PGRecovery;
class ShardedOpWQ
: public ShardedThreadPool::ShardedWQ<OpQueueItem>
{
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);
+}
+
+
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 {
}
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;
+};
)
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
)
add_ceph_unittest(unittest_mclock_client_queue)
target_link_libraries(unittest_mclock_client_queue
- global osd dmclock
+ global osd dmclock os
)
#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));
}
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);
}
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());
}
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());
}
#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));
}
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());
}
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());
}
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());
}