]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: basic scrub works
authorSage Weil <sage@newdream.net>
Wed, 19 Nov 2008 19:04:37 +0000 (11:04 -0800)
committerSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 21:23:21 +0000 (13:23 -0800)
src/common/WorkQueue.h
src/osd/OSD.cc
src/osd/ReplicatedPG.cc

index 7901725ba3674913c8814c1da11bcbcff7503ddc..4f1c590a782fd489b1b1e5aceef5cada47a11fe2 100644 (file)
@@ -81,8 +81,8 @@ public:
 
   void unpause() {
     lock.Lock();
-    assert(pause);
-    pause = false;
+    assert(_pause);
+    _pause = false;
     cond.Signal();
     lock.Unlock();
   }
@@ -90,6 +90,7 @@ public:
   void queue(T *item) {
     queue_lock.Lock();
     _enqueue(item);
+    cond.Signal();
     queue_lock.Unlock();
   }
   void unqueue(T *item) {
index 631c41e9fb7d0d6e96395239a7047b747fbf98f0..74d812abb2d37833e6cf8386390d19d6494fb160 100644 (file)
@@ -1702,6 +1702,7 @@ void OSD::handle_osd_map(MOSDMap *m)
 
   map_lock.put_write();
   unpause_recovery_thread();
+  scrub_wq.unpause();
 
   //if (osdmap->get_epoch() == 1) store->sync();     // in case of early death, blah
 
@@ -3221,9 +3222,6 @@ void OSD::handle_op(MOSDOp *op)
   }
   
   pg->unlock();
-  
-#warning hack
-  scrub_wq.queue(pg);
 }
 
 
@@ -3355,6 +3353,9 @@ void OSD::dequeue_op(PG *pg)
   // unlock and put pg
   pg->put_unlock();
   
+  //#warning foo
+  //scrub_wq.queue(pg);
+
   // finish
   osd_lock.Lock();
   {
index 9d770a44da7e4fc076615a1de87cd168aa7515c7..d8f1e2e088e23621f77320a74dfe08a03a71c61e 100644 (file)
@@ -2774,7 +2774,7 @@ void ReplicatedPG::scrub()
   vector<pobject_t> ls;
   osd->store->collection_list(c, ls);
   if (ls.size() != pg_stats.num_objects)
-    dout(10) << " WARNING: " << ls.size() << " != num_objects " << pg_stats.num_objects << dendl;
+    dout(10) << "scrub WARNING: " << ls.size() << " != num_objects " << pg_stats.num_objects << dendl;
   dout(10) << "scrub " << ls.size() << " objects" << dendl;
 
   sort(ls.begin(), ls.end());
@@ -2795,8 +2795,6 @@ void ReplicatedPG::scrub()
        p++) {
     pobject_t poid = *p;
     stat.num_objects++;
-    if (poid.oid.snap != CEPH_NOSNAP)
-      stat.num_object_clones++;
 
     // basic checks.
     eversion_t v;
@@ -2852,6 +2850,8 @@ void ReplicatedPG::scrub()
     } else if (poid.oid.snap) {
       // it's a clone
       assert(head != pobject_t());
+
+      stat.num_object_clones++;
       
       assert(poid.oid.snap == snapset.clones[curclone]);
       bufferlist bl;