From 4d8e9a5ebb8eb255f3a816243c29cf1c9f776a3c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 11 Feb 2012 21:46:17 -0800 Subject: [PATCH] osd: do OpRequest dispatch into PG::do_request This simplifies the external PG interface, and gives us a single path into the PG... Signed-off-by: Sage Weil --- src/osd/OSD.cc | 28 +--------------------------- src/osd/PG.cc | 34 ++++++++++++++++++++++++++++++++++ src/osd/PG.h | 4 ++++ 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index d975aa84b6506..ab4c95d4ede46 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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(); diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 146d57ebb7a3c..c66b4d121a3e9 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1379,6 +1379,40 @@ void PG::activate(ObjectStore::Transaction& t, list& 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() { diff --git a/src/osd/PG.h b/src/osd/PG.h index 791cd6721ed1e..582dab6f5bac7 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -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; -- 2.39.5