]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: reorg handle_op; turn off preprocess_op
authorSage Weil <sage@newdream.net>
Thu, 21 May 2009 14:52:13 +0000 (07:52 -0700)
committerSage Weil <sage@newdream.net>
Thu, 21 May 2009 14:52:13 +0000 (07:52 -0700)
None of the preprocess stuff is working at the moment.. just skip it all
for now.

src/osd/OSD.cc
src/osd/ReplicatedPG.cc

index 35fe0f59965d35a452c1b28b220464745d0934e6..1607e292bddcc55145baff7b5f2a08d8bed03190 100644 (file)
@@ -3441,35 +3441,36 @@ void OSD::handle_op(MOSDOp *op)
     return;
   }
   
-  // pg must be same-ish...
-  if (!op->may_write()) {
-    // read
-    if (!pg->same_for_read_since(op->get_map_epoch())) {
-      dout(7) << "handle_rep_op pg changed " << pg->info.history
-             << " after " << op->get_map_epoch() 
-             << ", dropping" << dendl;
-      assert(op->get_map_epoch() < osdmap->get_epoch());
-      pg->unlock();
-      delete op;
-      return;
-    }
-    
-    if (op->get_snapid() > 0) {
-      // snap read.  hrm.
-      // are we missing a revision that we might need?
-      // let's get them all.
-      for (unsigned i=0; i<op->get_snaps().size(); i++) {
-       sobject_t soid(op->get_oid(), op->get_snaps()[i]);
-       if (pg->is_missing_object(soid)) {
-         dout(10) << "handle_op _may_ need missing rev " << soid << ", pulling" << dendl;
-         pg->wait_for_missing_object(soid, op);
-         pg->unlock();
-         return;
-       }
+  // pg must be active.
+  if (!pg->is_active()) {
+    // replay?
+    if (op->get_version().version > 0) {
+      if (op->get_version() > pg->info.last_update) {
+       dout(7) << *pg << " queueing replay at " << op->get_version()
+               << " for " << *op << dendl;
+       pg->replay_queue[op->get_version()] = op;
+       pg->unlock();
+       return;
+      } else {
+       dout(7) << *pg << " replay at " << op->get_version() << " <= " << pg->info.last_update 
+               << " for " << *op
+               << ", will queue for WRNOOP" << dendl;
       }
     }
     
-  } else {
+    dout(7) << *pg << " not active (yet)" << dendl;
+    pg->waiting_for_active.push_back(op);
+    pg->unlock();
+    return;
+  }
+
+  // pg must be same-ish...
+  if (op->may_write()) {
+    if (op->get_snapid() != CEPH_NOSNAP) {
+      reply_op_error(op, -EINVAL);
+      return;
+    }
+
     // modify
     if ((!pg->is_primary() ||
         !pg->same_for_modify_since(op->get_map_epoch()))) {
@@ -3489,31 +3490,34 @@ void OSD::handle_op(MOSDOp *op)
       pg->unlock();
       return;
     }
-  }
-  
-  // pg must be active.
-  if (!pg->is_active()) {
-    // replay?
-    if (op->get_version().version > 0) {
-      if (op->get_version() > pg->info.last_update) {
-       dout(7) << *pg << " queueing replay at " << op->get_version()
-               << " for " << *op << dendl;
-       pg->replay_queue[op->get_version()] = op;
-       pg->unlock();
-       return;
-      } else {
-       dout(7) << *pg << " replay at " << op->get_version() << " <= " << pg->info.last_update 
-               << " for " << *op
-               << ", will queue for WRNOOP" << dendl;
+  } else {
+    // read
+    if (!pg->same_for_read_since(op->get_map_epoch())) {
+      dout(7) << "handle_op pg changed " << pg->info.history
+             << " after " << op->get_map_epoch() 
+             << ", dropping" << dendl;
+      assert(op->get_map_epoch() < osdmap->get_epoch());
+      pg->unlock();
+      delete op;
+      return;
+    }
+
+    if (op->get_snapid() > 0) {
+      // snap read.  hrm.
+      // are we missing a revision that we might need?
+      // let's get them all.
+      for (unsigned i=0; i<op->get_snaps().size(); i++) {
+       sobject_t soid(op->get_oid(), op->get_snaps()[i]);
+       if (pg->is_missing_object(soid)) {
+         dout(10) << "handle_op _may_ need missing rev " << soid << ", pulling" << dendl;
+         pg->wait_for_missing_object(soid, op);
+         pg->unlock();
+         return;
+       }
       }
     }
-    
-    dout(7) << *pg << " not active (yet)" << dendl;
-    pg->waiting_for_active.push_back(op);
-    pg->unlock();
-    return;
   }
-  
+
   // missing object?
   sobject_t head(op->get_oid(), CEPH_NOSNAP);
   if (pg->is_missing_object(head)) {
@@ -3521,14 +3525,17 @@ void OSD::handle_op(MOSDOp *op)
     pg->unlock();
     return;
   }
+
   
   dout(10) << "handle_op " << *op << " in " << *pg << dendl;
 
+  /* turn this off for now.
   // proprocess op? 
   if (pg->preprocess_op(op, now)) {
     pg->unlock();
     return;
   }
+  */
 
   if (!op->may_write()) {
     Mutex::Locker lock(peer_stat_lock);
index 4fb988c9c38a1c8336a292a16102f8511848171e..d969a433f8e16c0f3d85466b5558980a4f41451c 100644 (file)
@@ -108,6 +108,7 @@ void ReplicatedPG::wait_for_missing_object(sobject_t soid, Message *m)
  */
 bool ReplicatedPG::preprocess_op(MOSDOp *op, utime_t now)
 {
+#if 0
   // we only care about reads here on out..
   if (op->may_write() ||
       op->ops.size() < 1)
@@ -360,7 +361,7 @@ bool ReplicatedPG::preprocess_op(MOSDOp *op, utime_t now)
       return true;
     }
   }
-
+#endif
   return false;
 }