From 91f0af3ec1194bfa8ff36b5cdbd656007e02b534 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 10 Jun 2009 10:04:11 -0700 Subject: [PATCH] osd: update rwm flags for incoming ops --- src/messages/MOSDOp.h | 7 +------ src/osd/OSD.cc | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index 8d62596ca02fe..2875114f97b53 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -64,10 +64,6 @@ public: eversion_t get_version() { return head.reassert_version; } utime_t get_mtime() { return head.mtime; } -#if 0 - bool may_read() { return head.flags & CEPH_OSD_FLAG_READ; } - bool may_write() { return head.flags & CEPH_OSD_FLAG_WRITE; } -#endif bool may_read() { assert(rmw_flags); return rmw_flags & CEPH_OSD_FLAG_READ; } bool may_write() { assert(rmw_flags); return rmw_flags & CEPH_OSD_FLAG_WRITE; } @@ -206,12 +202,11 @@ public: out << " " << oid; out << " "; -#if 0 + if (may_read()) out << "r"; if (may_write()) out << "w"; -#endif if (head.snapid != CEPH_NOSNAP) out << "@" << snapid_t((__u64)head.snapid); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index fbf79ad99fa29..f05f19e13f778 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3905,9 +3905,32 @@ void OSD::send_class_request(const char *cname, ClassVersion& version) void OSD::init_op_flags(MOSDOp *op) { - vector::iterator iter; + vector::iterator iter; - /* FIXME */ op->rmw_flags = op->get_flags(); + + for (iter = op->ops.begin(); iter != op->ops.end(); ++iter) { + switch (iter->op.op) { + case CEPH_OSD_OP_RDCALL: + { + bufferlist::iterator bp = iter->data.begin(); + int is_write, is_read; + string cname, mname; + bp.copy(iter->op.class_len, cname); + bp.copy(iter->op.method_len, mname); + is_read = class_handler->get_method_flags(cname, mname) & CLS_METHOD_RD; + is_write = class_handler->get_method_flags(cname, mname) & CLS_METHOD_WR; + dout(0) << "class " << cname << " method " << mname << " flags=" << (is_read ? "r" : "") << (is_write ? "w" : "") << dendl; + if (is_read) + op->rmw_flags |= CEPH_OSD_FLAG_READ; + if (is_write) + op->rmw_flags |= CEPH_OSD_FLAG_WRITE; + break; + } + + default: + break; + } + } } -- 2.39.5