From 48801c14eb51f415209139c770f2d53619a8c362 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 21 May 2009 07:52:13 -0700 Subject: [PATCH] osd: reorg handle_op; turn off preprocess_op None of the preprocess stuff is working at the moment.. just skip it all for now. --- src/osd/OSD.cc | 103 +++++++++++++++++++++------------------- src/osd/ReplicatedPG.cc | 3 +- 2 files changed, 57 insertions(+), 49 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 35fe0f59965d3..1607e292bddcc 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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; iget_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; iget_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); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4fb988c9c38a1..d969a433f8e16 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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; } -- 2.39.5