]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: do OpRequest dispatch into PG::do_request
authorSage Weil <sage@newdream.net>
Sun, 12 Feb 2012 05:46:17 +0000 (21:46 -0800)
committerSage Weil <sage@newdream.net>
Sun, 12 Feb 2012 05:46:17 +0000 (21:46 -0800)
This simplifies the external PG interface, and gives us a single path into
the PG...

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

index d975aa84b6506b4bde762edfa3b0d022cf504fe2..ab4c95d4ede461953083859a8258ec960282b9da 100644 (file)
@@ -5715,33 +5715,7 @@ void OSD::dequeue_op(PG *pg)
 
   op->mark_reached_pg();
 
-  switch (op->request->get_type()) {
-  case CEPH_MSG_OSD_OP:
-    if (op_is_discardable((MOSDOp*)op->request))
-      op->put();
-    else
-      pg->do_op(op); // do it now
-    break;
-
-  case MSG_OSD_SUBOP:
-    pg->do_sub_op(op);
-    break;
-    
-  case MSG_OSD_SUBOPREPLY:
-    pg->do_sub_op_reply(op);
-    break;
-
-  case MSG_OSD_PG_SCAN:
-    pg->do_scan(op);
-    break;
-
-  case MSG_OSD_PG_BACKFILL:
-    pg->do_backfill(op);
-    break;
-
-  default:
-    assert(0 == "bad message type in dequeue_op");
-  }
+  pg->do_request(op);
 
   // unlock and put pg
   pg->unlock();
index 146d57ebb7a3c6a17b024cb7a1e6702a568d834e..c66b4d121a3e9c8ea8c9451cbd48cc3922674f03 100644 (file)
@@ -1379,6 +1379,40 @@ void PG::activate(ObjectStore::Transaction& t, list<Context*>& tfin,
   on_activate();
 }
 
+void PG::do_request(OpRequest *op)
+{
+  // do any pending flush
+  do_pending_flush();
+
+  switch (op->request->get_type()) {
+  case CEPH_MSG_OSD_OP:
+    if (osd->op_is_discardable((MOSDOp*)op->request))
+      op->put();
+    else
+      do_op(op); // do it now
+    break;
+
+  case MSG_OSD_SUBOP:
+    do_sub_op(op);
+    break;
+
+  case MSG_OSD_SUBOPREPLY:
+    do_sub_op_reply(op);
+    break;
+
+  case MSG_OSD_PG_SCAN:
+    do_scan(op);
+    break;
+
+  case MSG_OSD_PG_BACKFILL:
+    do_backfill(op);
+    break;
+
+  default:
+    assert(0 == "bad message type in do_request");
+  }
+}
+
 
 void PG::replay_queued_ops()
 {
index 791cd6721ed1e5d218d1f5dba34ce97d86092878..582dab6f5bac708fc8bb0ba67865737416950a6f 100644 (file)
@@ -1370,7 +1370,11 @@ public:
   }
 
   void on_removal();
+
+
   // abstract bits
+  void do_request(OpRequest *op);
+
   virtual void do_op(OpRequest *op) = 0;
   virtual void do_sub_op(OpRequest *op) = 0;
   virtual void do_sub_op_reply(OpRequest *op) = 0;