]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG::C_OSD_CommittedPushedObject take epoch submitted
authorSamuel Just <sam.just@inktank.com>
Mon, 25 Feb 2013 20:35:26 +0000 (12:35 -0800)
committerSage Weil <sage@inktank.com>
Mon, 4 Mar 2013 21:53:55 +0000 (13:53 -0800)
What we really care about is that the epoch in which the Context
was submitted is at complete() time >= last_peering_reset.

Signed-off-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit a01dea6af9aacf0614570ebb5fa161d9dde9b6b6)

src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index becba7afab0e7acfd5aa2a9a8a090a7db8f97bb3..134a612d7bd5f5a727cd94873864a8c5046a33a9 100644 (file)
@@ -5440,9 +5440,10 @@ void ReplicatedPG::handle_pull_response(OpRequestRef op)
     queue_transaction(
       osr.get(), t,
       onreadable,
-      new C_OSD_CommittedPushedObject(this, op,
-                                     info.history.same_interval_since,
-                                     info.last_complete),
+      new C_OSD_CommittedPushedObject(
+       this, op,
+       get_osdmap()->get_epoch(),
+       info.last_complete),
       onreadable_sync,
       oncomplete,
       TrackedOpRef()
@@ -5513,7 +5514,7 @@ void ReplicatedPG::handle_push(OpRequestRef op)
       onreadable,
       new C_OSD_CommittedPushedObject(
        this, op,
-       info.history.same_interval_since,
+       get_osdmap()->get_epoch(),
        info.last_complete),
       onreadable_sync,
       oncomplete,
@@ -5794,10 +5795,11 @@ void ReplicatedPG::sub_op_pull(OpRequestRef op)
 }
 
 
-void ReplicatedPG::_committed_pushed_object(OpRequestRef op, epoch_t same_since, eversion_t last_complete)
+void ReplicatedPG::_committed_pushed_object(
+  OpRequestRef op, epoch_t epoch, eversion_t last_complete)
 {
   lock();
-  if (same_since == info.history.same_interval_since) {
+  if (epoch >= last_peering_reset) {
     dout(10) << "_committed_pushed_object last_complete " << last_complete << " now ondisk" << dendl;
     last_complete_ondisk = last_complete;
 
@@ -6617,9 +6619,10 @@ int ReplicatedPG::recover_primary(int max)
 
              osd->store->queue_transaction(osr.get(), t,
                                            new C_OSD_AppliedRecoveredObject(this, t, obc),
-                                           new C_OSD_CommittedPushedObject(this, OpRequestRef(),
-                                                                           info.history.same_interval_since,
-                                                                           info.last_complete),
+                                           new C_OSD_CommittedPushedObject(
+                                             this, OpRequestRef(),
+                                             get_osdmap()->get_epoch(),
+                                             info.last_complete),
                                            new C_OSD_OndiskWriteUnlock(obc));
              continue;
            }
index ae506e5507463215bd1e50a349b03904fa93a0ba..800477003dd53b3cc80cd3bcef21efdd7f8e40af 100644 (file)
@@ -885,13 +885,15 @@ protected:
   struct C_OSD_CommittedPushedObject : public Context {
     ReplicatedPG *pg;
     OpRequestRef op;
-    epoch_t same_since;
+    epoch_t epoch;
     eversion_t last_complete;
-    C_OSD_CommittedPushedObject(ReplicatedPG *p, OpRequestRef o, epoch_t ss, eversion_t lc) : pg(p), op(o), same_since(ss), last_complete(lc) {
+    C_OSD_CommittedPushedObject(
+      ReplicatedPG *p, OpRequestRef o, epoch_t epoch, eversion_t lc) :
+      pg(p), op(o), epoch(epoch), last_complete(lc) {
       pg->get();
     }
     void finish(int r) {
-      pg->_committed_pushed_object(op, same_since, last_complete);
+      pg->_committed_pushed_object(op, epoch, last_complete);
       pg->put();
     }
   };
@@ -943,7 +945,7 @@ protected:
   void sub_op_modify_reply(OpRequestRef op);
   void _applied_recovered_object(ObjectStore::Transaction *t, ObjectContext *obc);
   void _applied_recovered_object_replica(ObjectStore::Transaction *t);
-  void _committed_pushed_object(OpRequestRef op, epoch_t same_since, eversion_t lc);
+  void _committed_pushed_object(OpRequestRef op, epoch_t epoch, eversion_t lc);
   void recover_got(hobject_t oid, eversion_t v);
   void sub_op_push(OpRequestRef op);
   void _failed_push(OpRequestRef op);