]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix up recovery pointers a bit
authorSage Weil <sage@newdream.net>
Tue, 25 Nov 2008 19:22:14 +0000 (11:22 -0800)
committerSage Weil <sage@newdream.net>
Tue, 25 Nov 2008 19:46:06 +0000 (11:46 -0800)
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc

index 42c063f29b9b5d70443f9548a609724efdee6f10..8dfbe2cc18132815a4a1db148209cf9aecc29ced 100644 (file)
@@ -470,29 +470,6 @@ void PG::merge_log(ObjectStore::Transaction& t, Log &olog, Missing &omissing, in
   if (changed) {
     write_info(t);
     write_log(t);
-
-    // init complete pointer
-    if (missing.num_missing() == 0 &&
-       info.last_complete != info.last_update) {
-      dout(10) << "merge_log - no missing, moving last_complete " << info.last_complete 
-              << " -> " << info.last_update << dendl;
-      info.last_complete = info.last_update;
-    }
-
-    if (info.last_complete == info.last_update) {
-      dout(10) << "merge_log - complete" << dendl;
-      log.complete_to = log.log.end();
-      log.requested_to = log.log.end();
-    } else {
-      dout(10) << "merge_log - not complete, " << missing << dendl;
-      
-      log.complete_to = log.log.begin();
-      while (log.complete_to->version < info.last_complete) {
-       log.complete_to++;
-       assert(log.complete_to != log.log.end());
-      }
-      log.requested_to = log.complete_to;
-    }
   }
 }
 
@@ -908,7 +885,7 @@ void PG::clear_primary_state()
   finish_sync_event = 0;  // so that _finish_recvoery doesn't go off in another thread
 
   missing_loc.clear();
-  log.reset_recovery();
+  log.reset_recovery_pointers();
 
   stat_object_temp_rd.clear();
 }
@@ -1177,18 +1154,30 @@ void PG::activate(ObjectStore::Transaction& t,
   if (!info.dead_snaps.empty())
     queue_snap_trim();
 
+  // init complete pointer
+  if (missing.num_missing() == 0 &&
+      info.last_complete != info.last_update) {
+    dout(10) << "activate - no missing, moving last_complete " << info.last_complete 
+            << " -> " << info.last_update << dendl;
+    info.last_complete = info.last_update;
+  }
+
   if (info.last_complete == info.last_update) {
     dout(10) << "activate - complete" << dendl;
-    log.complete_to = log.log.end();
-    log.requested_to = log.log.end();
+    log.reset_recovery_pointers();
   } else {
     dout(10) << "activate - not complete, " << missing << dendl;
-    assert(log.complete_to->version >= info.last_complete);
-    
+
+    log.complete_to = log.log.begin();
+    while (log.complete_to->version < info.last_complete)
+      log.complete_to++;
+    assert(log.complete_to != log.log.end());
+    dout(10) << "activate -     complete_to = " << log.complete_to->version << dendl;
+
     if (is_primary()) {
       // start recovery
-      dout(10) << "activate - starting recovery" << dendl;    
-      assert(log.requested_to == log.complete_to);
+      dout(10) << "activate - starting recovery" << dendl;
+      log.requested_to = log.complete_to;
       osd->queue_for_recovery(this);
     }
   }
@@ -1334,7 +1323,7 @@ void PG::finish_recovery()
   state_set(PG_STATE_CLEAN);
   assert(info.last_complete == info.last_update);
 
-  log.reset_recovery();
+  log.reset_recovery_pointers();
 
   /*
    * sync all this before purging strays.  but don't block!
index c146f10a925a03a1796902f78d3687260d745868..a44d886a5b640d2a53d467ce04000922eeb61687 100644 (file)
@@ -298,9 +298,9 @@ public:
       assert(0);
       unindex();
       Log::clear();
-      reset_recovery();
+      reset_recovery_pointers();
     }
-    void reset_recovery() {
+    void reset_recovery_pointers() {
       requested_to = log.end();
       complete_to = log.end();
     }
index bdd4534e8a5cfedee73b2fe1455770ad9a953fa2..5d5da023406b6515f76175e09f79bf15ffaf6cf0 100644 (file)
@@ -1530,8 +1530,6 @@ void ReplicatedPG::op_modify(MOSDOp *op)
     if (r >= 0) {
       bufferlist::iterator p = bl.begin();
       ::decode(snapset, p);
-    } else {
-      dout(10) << " no \"snapset\" attr, r = " << r << " " << strerror(-r) << dendl;
     }
   } else 
     assert(poid.oid.snap == 0);   // no snapshotting.
@@ -2503,12 +2501,14 @@ void ReplicatedPG::on_role_change()
 
 void ReplicatedPG::cancel_recovery()
 {
+  dout(10) << "cancel_recovery" << dendl;
+
   // forget about where missing items are, or anything we're pulling
   missing_loc.clear();
   osd->num_pulling -= pulling.size();
   pulling.clear();
   pushing.clear();
-  log.reset_recovery();
+  log.reset_recovery_pointers();
 
   osd->finish_recovery_op(this, recovery_ops_active, true);
 }