]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: min_epoch for MOSDECSubOp*
authorSage Weil <sage@redhat.com>
Tue, 28 Feb 2017 02:26:17 +0000 (20:26 -0600)
committerSage Weil <sage@redhat.com>
Tue, 2 May 2017 02:01:28 +0000 (21:01 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/messages/MOSDECSubOpRead.h
src/messages/MOSDECSubOpReadReply.h
src/messages/MOSDECSubOpWrite.h
src/messages/MOSDECSubOpWriteReply.h
src/osd/ECBackend.cc

index 689685b74e6334c3bc6729d05695aa256514f616..4e8beeb2d40318b71983de1653f9dbec77131d5f 100644 (file)
 #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 << ")";
   }
index 3903db68628d7ab385ed72e2053f021e1ac5b0f3..5be21c932340c7f5c3ceba3883ee784a9e9ec84e 100644 (file)
 #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 << ")";
   }
index 679b744584306a1a38e1da402487a134467ba495..6c8e7600e524fe5fb31132cc3df570234046c2b2 100644 (file)
 #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 << ")";
   }
index dd653983ebfe1bb27c8bc9e383ef6737302dae6c..d29c2f9f117c2551646680f615d80eedd69071f4 100644 (file)
 #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 << ")";
   }
index 569bb89529ecc05f7ec5aa05fcd07554f4521943..14f7a0bda8e7b5992e50a4d6a17c9dbf9dc1f73b 100644 (file)
@@ -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());
     }