This simplifies the external PG interface, and gives us a single path into
the PG...
Signed-off-by: Sage Weil <sage@newdream.net>
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();
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()
{
}
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;