From: Sage Weil Date: Tue, 28 Feb 2017 02:26:17 +0000 (-0600) Subject: osd: min_epoch for MOSDECSubOp* X-Git-Tag: v12.0.3~80^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=152dfdd06c51cbafd1d757b0d606f8fe687c9ebd;p=ceph.git osd: min_epoch for MOSDECSubOp* Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDECSubOpRead.h b/src/messages/MOSDECSubOpRead.h index 689685b74e63..4e8beeb2d403 100644 --- a/src/messages/MOSDECSubOpRead.h +++ b/src/messages/MOSDECSubOpRead.h @@ -19,12 +19,12 @@ #include "osd/ECMsgTypes.h" class MOSDECSubOpRead : public MOSDFastDispatchOp { - static const int HEAD_VERSION = 2; + static const int HEAD_VERSION = 3; static const int COMPAT_VERSION = 1; public: spg_t pgid; - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; ECSubRead op; int get_cost() const override { @@ -33,6 +33,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; } @@ -46,19 +49,25 @@ public: ::decode(pgid, p); ::decode(map_epoch, p); ::decode(op, p); + if (header.version >= 3) { + ::decode(min_epoch, p); + } else { + min_epoch = map_epoch; + } } void encode_payload(uint64_t features) override { ::encode(pgid, payload); ::encode(map_epoch, payload); ::encode(op, payload, features); + ::encode(min_epoch, payload); } const char *get_type_name() const override { return "MOSDECSubOpRead"; } void print(ostream& out) const override { out << "MOSDECSubOpRead(" << pgid - << " " << map_epoch + << " " << map_epoch << "/" << min_epoch << " " << op; out << ")"; } diff --git a/src/messages/MOSDECSubOpReadReply.h b/src/messages/MOSDECSubOpReadReply.h index 3903db68628d..5be21c932340 100644 --- a/src/messages/MOSDECSubOpReadReply.h +++ b/src/messages/MOSDECSubOpReadReply.h @@ -19,12 +19,12 @@ #include "osd/ECMsgTypes.h" class MOSDECSubOpReadReply : public MOSDFastDispatchOp { - static const int HEAD_VERSION = 1; + static const int HEAD_VERSION = 2; static const int COMPAT_VERSION = 1; public: spg_t pgid; - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; ECSubReadReply op; int get_cost() const override { @@ -33,6 +33,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; } @@ -46,19 +49,25 @@ public: ::decode(pgid, p); ::decode(map_epoch, p); ::decode(op, p); + if (header.version >= 2) { + ::decode(min_epoch, p); + } else { + min_epoch = map_epoch; + } } void encode_payload(uint64_t features) override { ::encode(pgid, payload); ::encode(map_epoch, payload); ::encode(op, payload); + ::encode(min_epoch, payload); } const char *get_type_name() const override { return "MOSDECSubOpReadReply"; } void print(ostream& out) const override { out << "MOSDECSubOpReadReply(" << pgid - << " " << map_epoch + << " " << map_epoch << "/" << min_epoch << " " << op; out << ")"; } diff --git a/src/messages/MOSDECSubOpWrite.h b/src/messages/MOSDECSubOpWrite.h index 679b74458430..6c8e7600e524 100644 --- a/src/messages/MOSDECSubOpWrite.h +++ b/src/messages/MOSDECSubOpWrite.h @@ -19,12 +19,12 @@ #include "osd/ECMsgTypes.h" class MOSDECSubOpWrite : public MOSDFastDispatchOp { - static const int HEAD_VERSION = 1; + static const int HEAD_VERSION = 2; static const int COMPAT_VERSION = 1; public: spg_t pgid; - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; ECSubWrite op; int get_cost() const override { @@ -33,6 +33,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; } @@ -50,19 +53,25 @@ public: ::decode(pgid, p); ::decode(map_epoch, p); ::decode(op, p); + if (header.version >= 2) { + ::decode(min_epoch, p); + } else { + min_epoch = map_epoch; + } } void encode_payload(uint64_t features) override { ::encode(pgid, payload); ::encode(map_epoch, payload); ::encode(op, payload); + ::encode(min_epoch, payload); } const char *get_type_name() const override { return "MOSDECSubOpWrite"; } void print(ostream& out) const override { out << "MOSDECSubOpWrite(" << pgid - << " " << map_epoch + << " " << map_epoch << "/" << min_epoch << " " << op; out << ")"; } diff --git a/src/messages/MOSDECSubOpWriteReply.h b/src/messages/MOSDECSubOpWriteReply.h index dd653983ebfe..d29c2f9f117c 100644 --- a/src/messages/MOSDECSubOpWriteReply.h +++ b/src/messages/MOSDECSubOpWriteReply.h @@ -19,12 +19,12 @@ #include "osd/ECMsgTypes.h" class MOSDECSubOpWriteReply : public MOSDFastDispatchOp { - static const int HEAD_VERSION = 1; + static const int HEAD_VERSION = 2; static const int COMPAT_VERSION = 1; public: spg_t pgid; - epoch_t map_epoch; + epoch_t map_epoch, min_epoch; ECSubWriteReply op; int get_cost() const override { @@ -33,6 +33,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; } @@ -46,19 +49,25 @@ public: ::decode(pgid, p); ::decode(map_epoch, p); ::decode(op, p); + if (header.version >= 2) { + ::decode(min_epoch, p); + } else { + min_epoch = map_epoch; + } } void encode_payload(uint64_t features) override { ::encode(pgid, payload); ::encode(map_epoch, payload); ::encode(op, payload); + ::encode(min_epoch, payload); } const char *get_type_name() const override { return "MOSDECSubOpWriteReply"; } void print(ostream& out) const override { out << "MOSDECSubOpWriteReply(" << pgid - << " " << map_epoch + << " " << map_epoch << "/" << min_epoch << " " << op; out << ")"; } diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 569bb89529ec..14f7a0bda8e7 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -749,6 +749,7 @@ bool ECBackend::handle_message( MOSDECSubOpReadReply *reply = new MOSDECSubOpReadReply; reply->pgid = get_parent()->primary_spg_t(); reply->map_epoch = get_parent()->get_epoch(); + reply->min_epoch = get_parent()->get_interval_start_epoch(); handle_sub_read(op->op.from, op->op, &(reply->op)); get_parent()->send_message_osd_cluster( op->op.from.osd, reply, get_parent()->get_epoch()); @@ -829,6 +830,7 @@ void ECBackend::sub_write_committed( MOSDECSubOpWriteReply *r = new MOSDECSubOpWriteReply; r->pgid = get_parent()->primary_spg_t(); r->map_epoch = get_parent()->get_epoch(); + r->min_epoch = get_parent()->get_interval_start_epoch(); r->op.tid = tid; r->op.last_complete = last_complete; r->op.committed = true; @@ -871,6 +873,7 @@ void ECBackend::sub_write_applied( MOSDECSubOpWriteReply *r = new MOSDECSubOpWriteReply; r->pgid = get_parent()->primary_spg_t(); r->map_epoch = get_parent()->get_epoch(); + r->min_epoch = get_parent()->get_interval_start_epoch(); r->op.from = get_parent()->whoami_shard(); r->op.tid = tid; r->op.applied = true; @@ -1636,6 +1639,7 @@ void ECBackend::do_read_op(ReadOp &op) get_parent()->whoami_spg_t().pgid, i->first.shard); msg->map_epoch = get_parent()->get_epoch(); + msg->min_epoch = get_parent()->get_interval_start_epoch(); msg->op = i->second; msg->op.from = get_parent()->whoami_shard(); msg->op.tid = tid; @@ -1926,6 +1930,7 @@ bool ECBackend::try_reads_to_commit() MOSDECSubOpWrite *r = new MOSDECSubOpWrite(sop); r->pgid = spg_t(get_parent()->primary_spg_t().pgid, i->shard); r->map_epoch = get_parent()->get_epoch(); + r->min_epoch = get_parent()->get_interval_start_epoch(); get_parent()->send_message_osd_cluster( i->osd, r, get_parent()->get_epoch()); }