* instruct an OSD initiate a replica scrub on a specific PG
*/
-struct MOSDRepScrub : public MOSDFastDispatchOp {
+class MOSDRepScrub : public MessageInstance<MOSDRepScrub, MOSDFastDispatchOp> {
+public:
+ friend factory;
- static const int HEAD_VERSION = 9;
- static const int COMPAT_VERSION = 6;
+ static constexpr int HEAD_VERSION = 9;
+ static constexpr int COMPAT_VERSION = 6;
spg_t pgid; // PG to scrub
eversion_t scrub_from; // only scrub log entries after scrub_from
}
MOSDRepScrub()
- : MOSDFastDispatchOp(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
+ : MessageInstance(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
chunky(false),
deep(false) { }
MOSDRepScrub(spg_t pgid, eversion_t scrub_to, epoch_t map_epoch, epoch_t min_epoch,
hobject_t start, hobject_t end, bool deep,
bool preemption, int prio, bool highprio)
- : MOSDFastDispatchOp(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
+ : MessageInstance(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
pgid(pgid),
scrub_to(scrub_to),
map_epoch(map_epoch),
~MOSDRepScrub() override {}
public:
- const char *get_type_name() const override { return "replica scrub"; }
+ std::string_view get_type_name() const override { return "replica scrub"; }
void print(ostream& out) const override {
out << "replica_scrub(pg: " << pgid
<< ",from:" << scrub_from
}
void encode_payload(uint64_t features) override {
- ::encode(pgid.pgid, payload);
- ::encode(scrub_from, payload);
- ::encode(scrub_to, payload);
- ::encode(map_epoch, payload);
- ::encode(chunky, payload);
- ::encode(start, payload);
- ::encode(end, payload);
- ::encode(deep, payload);
- ::encode(pgid.shard, payload);
- ::encode((uint32_t)-1, payload); // seed
- ::encode(min_epoch, payload);
- ::encode(allow_preemption, payload);
- ::encode(priority, payload);
- ::encode(high_priority, payload);
+ using ceph::encode;
+ encode(pgid.pgid, payload);
+ encode(scrub_from, payload);
+ encode(scrub_to, payload);
+ encode(map_epoch, payload);
+ encode(chunky, payload);
+ encode(start, payload);
+ encode(end, payload);
+ encode(deep, payload);
+ encode(pgid.shard, payload);
+ encode((uint32_t)-1, payload); // seed
+ encode(min_epoch, payload);
+ encode(allow_preemption, payload);
+ encode(priority, payload);
+ encode(high_priority, payload);
}
void decode_payload() override {
- bufferlist::iterator p = payload.begin();
- ::decode(pgid.pgid, p);
- ::decode(scrub_from, p);
- ::decode(scrub_to, p);
- ::decode(map_epoch, p);
- ::decode(chunky, p);
- ::decode(start, p);
- ::decode(end, p);
- ::decode(deep, p);
- ::decode(pgid.shard, p);
+ auto p = payload.cbegin();
+ decode(pgid.pgid, p);
+ decode(scrub_from, p);
+ decode(scrub_to, p);
+ decode(map_epoch, p);
+ decode(chunky, p);
+ decode(start, p);
+ decode(end, p);
+ decode(deep, p);
+ decode(pgid.shard, p);
{
uint32_t seed;
- ::decode(seed, p);
+ decode(seed, p);
}
if (header.version >= 7) {
- ::decode(min_epoch, p);
+ decode(min_epoch, p);
} else {
min_epoch = map_epoch;
}
if (header.version >= 8) {
- ::decode(allow_preemption, p);
+ decode(allow_preemption, p);
}
if (header.version >= 9) {
- ::decode(priority, p);
- ::decode(high_priority, p);
+ decode(priority, p);
+ decode(high_priority, p);
}
}
};