]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: factor out recover_primary_got() helper
authorSage Weil <sage@newdream.net>
Thu, 13 Oct 2011 19:53:59 +0000 (12:53 -0700)
committerSage Weil <sage@newdream.net>
Sat, 15 Oct 2011 04:02:32 +0000 (21:02 -0700)
This handles the missing set and lsat_complete adjustment when we recover
an object on the primary.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index a027394c82072eb6071b451eb2eb3b7c57abd536..7ff461fe3442d4464430b22e8d61665be285cc88 100644 (file)
@@ -4088,6 +4088,28 @@ void ReplicatedPG::_applied_pushed_object(ObjectStore::Transaction *t, ObjectCon
   delete t;
 }
 
+void ReplicatedPG::recover_primary_got(hobject_t oid, eversion_t v)
+{
+  if (missing.is_missing(oid, v)) {
+    dout(10) << "got missing " << oid << " v " << v << dendl;
+    missing.got(oid, v);
+    if (is_primary())
+      missing_loc.erase(oid);
+      
+    // raise last_complete?
+    while (log.complete_to != log.log.end()) {
+      if (missing.missing.count(log.complete_to->soid))
+       break;
+      if (info.last_complete < log.complete_to->version)
+       info.last_complete = log.complete_to->version;
+      log.complete_to++;
+    }
+    dout(10) << "last_complete now " << info.last_complete << dendl;
+    if (log.complete_to != log.log.end())
+      dout(10) << " log.complete_to = " << log.complete_to->version << dendl;
+  }
+}
+
 /** op_push
  * NOTE: called from opqueue.
  */
@@ -4297,29 +4319,11 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op)
       }
     }
 
-    if (missing.is_missing(soid, v)) {
-      dout(10) << "got missing " << soid << " v " << v << dendl;
-      missing.got(soid, v);
-      if (is_primary())
-       missing_loc.erase(soid);
-      
-      // raise last_complete?
-      while (log.complete_to != log.log.end()) {
-       if (missing.missing.count(log.complete_to->soid))
-         break;
-       if (info.last_complete < log.complete_to->version)
-         info.last_complete = log.complete_to->version;
-       log.complete_to++;
-      }
-      dout(10) << "last_complete now " << info.last_complete << dendl;
-      if (log.complete_to != log.log.end())
-       dout(10) << " log.complete_to = " << log.complete_to->version << dendl;
-    }
+    recover_primary_got(soid, v);
 
     // update pg
     write_info(*t);
 
-
     // track ObjectContext
     if (is_primary()) {
       dout(10) << " setting up obc for " << soid << dendl;
index ffdf414152037235b7ec56916d46a19c09d5a17c..ac5268c994a23710b239cdfbdcda57011b09676c 100644 (file)
@@ -701,6 +701,7 @@ protected:
   void sub_op_modify_reply(MOSDSubOpReply *reply);
   void _applied_pushed_object(ObjectStore::Transaction *t, ObjectContext *obc);
   void _committed_pushed_object(MOSDSubOp *op, epoch_t same_since, eversion_t lc);
+  void recover_primary_got(hobject_t oid, eversion_t v);
   void sub_op_push(MOSDSubOp *op);
   void _failed_push(MOSDSubOp *op);
   void sub_op_push_reply(MOSDSubOpReply *reply);