From 3e29446a80d76dd3737c05f180d1033ae1a3a933 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Tue, 27 Jun 2017 21:35:55 -0400 Subject: [PATCH] osd/PGBackend: include min_epoch in RecoveryDelete messages This matches ordering with other recovery messages, and may speed up processing a bit. Signed-off-by: Josh Durgin --- src/messages/MOSDPGRecoveryDelete.h | 16 ++++++++++++---- src/messages/MOSDPGRecoveryDeleteReply.h | 9 +++++++-- src/osd/PGBackend.cc | 5 ++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/messages/MOSDPGRecoveryDelete.h b/src/messages/MOSDPGRecoveryDelete.h index ae768fd4bc224..7d30c28f33605 100644 --- a/src/messages/MOSDPGRecoveryDelete.h +++ b/src/messages/MOSDPGRecoveryDelete.h @@ -17,7 +17,7 @@ struct MOSDPGRecoveryDelete : public MOSDFastDispatchOp { pg_shard_t from; spg_t pgid; ///< target spg_t - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; list > objects; ///< objects to remove private: @@ -31,6 +31,9 @@ public: epoch_t get_map_epoch() const override { return map_epoch; } + epoch_t get_min_epoch() const override { + return min_epoch; + } spg_t get_spg() const override { return pgid; } @@ -43,12 +46,14 @@ public: : MOSDFastDispatchOp(MSG_OSD_PG_RECOVERY_DELETE, HEAD_VERSION, COMPAT_VERSION) {} - MOSDPGRecoveryDelete(pg_shard_t from, spg_t pgid, epoch_t map_epoch) + MOSDPGRecoveryDelete(pg_shard_t from, spg_t pgid, epoch_t map_epoch, + epoch_t min_epoch) : MOSDFastDispatchOp(MSG_OSD_PG_RECOVERY_DELETE, HEAD_VERSION, COMPAT_VERSION), from(from), pgid(pgid), - map_epoch(map_epoch) {} + map_epoch(map_epoch), + min_epoch(min_epoch) {} private: ~MOSDPGRecoveryDelete() {} @@ -56,13 +61,15 @@ private: public: const char *get_type_name() const { return "recovery_delete"; } void print(ostream& out) const { - out << "MOSDPGRecoveryDelete(" << pgid << " e" << map_epoch << " " << objects << ")"; + out << "MOSDPGRecoveryDelete(" << pgid << " e" << map_epoch << "," + << min_epoch << " " << objects << ")"; } void encode_payload(uint64_t features) { ::encode(from, payload); ::encode(pgid, payload); ::encode(map_epoch, payload); + ::encode(min_epoch, payload); ::encode(cost, payload); ::encode(objects, payload); } @@ -71,6 +78,7 @@ public: ::decode(from, p); ::decode(pgid, p); ::decode(map_epoch, p); + ::decode(min_epoch, p); ::decode(cost, p); ::decode(objects, p); } diff --git a/src/messages/MOSDPGRecoveryDeleteReply.h b/src/messages/MOSDPGRecoveryDeleteReply.h index 4732c8f3474da..aa3e1135f11d1 100644 --- a/src/messages/MOSDPGRecoveryDeleteReply.h +++ b/src/messages/MOSDPGRecoveryDeleteReply.h @@ -12,12 +12,15 @@ struct MOSDPGRecoveryDeleteReply : public MOSDFastDispatchOp { pg_shard_t from; spg_t pgid; - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; list > objects; epoch_t get_map_epoch() const override { return map_epoch; } + epoch_t get_min_epoch() const override { + return min_epoch; + } spg_t get_spg() const override { return pgid; } @@ -30,6 +33,7 @@ struct MOSDPGRecoveryDeleteReply : public MOSDFastDispatchOp { bufferlist::iterator p = payload.begin(); ::decode(pgid.pgid, p); ::decode(map_epoch, p); + ::decode(min_epoch, p); ::decode(objects, p); ::decode(pgid.shard, p); ::decode(from, p); @@ -38,6 +42,7 @@ struct MOSDPGRecoveryDeleteReply : public MOSDFastDispatchOp { void encode_payload(uint64_t features) override { ::encode(pgid.pgid, payload); ::encode(map_epoch, payload); + ::encode(min_epoch, payload); ::encode(objects, payload); ::encode(pgid.shard, payload); ::encode(from, payload); @@ -45,7 +50,7 @@ struct MOSDPGRecoveryDeleteReply : public MOSDFastDispatchOp { void print(ostream& out) const override { out << "MOSDPGRecoveryDeleteReply(" << pgid - << " e" << map_epoch << " " << objects << ")"; + << " e" << map_epoch << "," << min_epoch << " " << objects << ")"; } const char *get_type_name() const override { return "recovery_delete_reply"; } diff --git a/src/osd/PGBackend.cc b/src/osd/PGBackend.cc index 858fb270ba613..4bde06ef8c4b0 100644 --- a/src/osd/PGBackend.cc +++ b/src/osd/PGBackend.cc @@ -58,6 +58,7 @@ void PGBackend::recover_delete_object(const hobject_t &oid, eversion_t v, void PGBackend::send_recovery_deletes(int prio, const map > > &deletes) { + epoch_t min_epoch = get_parent()->get_last_peering_reset_epoch(); for (const auto& p : deletes) { const auto& shard = p.first; const auto& objects = p.second; @@ -74,7 +75,8 @@ void PGBackend::send_recovery_deletes(int prio, MOSDPGRecoveryDelete *msg = new MOSDPGRecoveryDelete(get_parent()->whoami_shard(), target_pg, - get_osdmap()->get_epoch()); + get_osdmap()->get_epoch(), + min_epoch); msg->set_priority(prio); while (it != objects.end() && @@ -130,6 +132,7 @@ void PGBackend::handle_recovery_delete(OpRequestRef op) reply->set_priority(m->get_priority()); reply->pgid = spg_t(get_parent()->get_info().pgid.pgid, m->from.shard); reply->map_epoch = m->map_epoch; + reply->min_epoch = m->min_epoch; reply->objects = m->objects; ConnectionRef conn = m->get_connection(); -- 2.39.5