From f6e219a4df8553336839bb914733a78090561ec8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 5 Feb 2017 22:21:47 -0500 Subject: [PATCH] messages/MOSDOp: take spg_t, not pg_t, and drop old ctor Signed-off-by: Sage Weil --- src/messages/MOSDOp.h | 54 ++++++++++++------------------- src/messages/MOSDOpReply.h | 2 +- src/test/msgr/perf_msgr_client.cc | 5 ++- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index da8958851ef..75af1d747ad 100755 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -45,7 +45,7 @@ private: int32_t retry_attempt; // 0 is first attempt. -1 if we don't know. hobject_t hobj; - pg_t pgid; + spg_t pgid; bufferlist::iterator p; // Decoding flags. Decoding is only needed for messages catched by pipe reader. // Transition from true -> false without locks being held @@ -77,18 +77,22 @@ public: void set_reqid(const osd_reqid_t rid) { reqid = rid; } - void set_pg(pg_t p) { + void set_spg(spg_t p) { pgid = p; } // Fields decoded in partial decoding pg_t get_pg() const { + assert(!partial_decode_needed); + return pgid.pgid; + } + spg_t get_spg() const { assert(!partial_decode_needed); return pgid; } pg_t get_raw_pg() const { assert(!partial_decode_needed); - return pg_t(hobj.get_hash(), pgid.pool()); + return pg_t(hobj.get_hash(), pgid.pgid.pool()); } epoch_t get_map_epoch() const { assert(!partial_decode_needed); @@ -167,25 +171,7 @@ public: : Message(CEPH_MSG_OSD_OP, HEAD_VERSION, COMPAT_VERSION), partial_decode_needed(true), final_decode_needed(true) { } - MOSDOp(int inc, long tid, - object_t& _oid, object_locator_t& _oloc, pg_t& _pgid, - epoch_t _osdmap_epoch, - int _flags, uint64_t feat) - : Message(CEPH_MSG_OSD_OP, HEAD_VERSION, COMPAT_VERSION), - client_inc(inc), - osdmap_epoch(_osdmap_epoch), flags(_flags), retry_attempt(-1), - hobj(_oid, _oloc.key, CEPH_NOSNAP, _pgid.ps(), _pgid.pool(), _oloc.nspace), - pgid(_pgid), - partial_decode_needed(false), - final_decode_needed(false), - features(feat) { - set_tid(tid); - - // also put the client_inc in reqid.inc, so that get_reqid() can - // be used before the full message is decoded. - reqid.inc = inc; - } - MOSDOp(int inc, long tid, const hobject_t& ho, pg_t& _pgid, + MOSDOp(int inc, long tid, const hobject_t& ho, spg_t& _pgid, epoch_t _osdmap_epoch, int _flags, uint64_t feat) : Message(CEPH_MSG_OSD_OP, HEAD_VERSION, COMPAT_VERSION), @@ -416,8 +402,8 @@ struct ceph_osd_request_head { ::decode(flags, p); ::decode(reqid, p); } else if (header.version == 7) { - ::decode(pgid, p); // raw pgid - hobj.set_hash(pgid.ps()); + ::decode(pgid.pgid, p); // raw pgid + hobj.set_hash(pgid.pgid.ps()); ::decode(osdmap_epoch, p); ::decode(flags, p); eversion_t reassert_version; @@ -429,7 +415,7 @@ struct ceph_osd_request_head { old_pg_t opgid; ::decode_raw(opgid, p); - pgid = opgid; + pgid.pgid = opgid; __u32 su; ::decode(su, p); @@ -458,11 +444,11 @@ struct ceph_osd_request_head { decode_nohead(num_snaps, snaps, p); // recalculate pgid hash value - pgid.set_ps(ceph_str_hash(CEPH_STR_HASH_RJENKINS, - hobj.oid.name.c_str(), - hobj.oid.name.length())); - hobj.pool = pgid.pool(); - hobj.set_hash(pgid.ps()); + pgid.pgid.set_ps(ceph_str_hash(CEPH_STR_HASH_RJENKINS, + hobj.oid.name.c_str(), + hobj.oid.name.length())); + hobj.pool = pgid.pgid.pool(); + hobj.set_hash(pgid.pgid.ps()); retry_attempt = -1; features = 0; @@ -488,7 +474,7 @@ struct ceph_osd_request_head { if (header.version < 3) { old_pg_t opgid; ::decode_raw(opgid, p); - pgid = opgid; + pgid.pgid = opgid; } else { ::decode(pgid, p); } @@ -521,10 +507,10 @@ struct ceph_osd_request_head { else reqid = osd_reqid_t(); - hobj.pool = pgid.pool(); + hobj.pool = pgid.pgid.pool(); hobj.set_key(oloc.key); hobj.nspace = oloc.nspace; - hobj.set_hash(pgid.ps()); + hobj.set_hash(pgid.pgid.ps()); OSDOp::split_osd_op_vector_in_data(ops, data); @@ -565,7 +551,7 @@ struct ceph_osd_request_head { ::decode(features, p); - hobj.pool = pgid.pool(); + hobj.pool = pgid.pgid.pool(); hobj.set_key(oloc.key); hobj.nspace = oloc.nspace; diff --git a/src/messages/MOSDOpReply.h b/src/messages/MOSDOpReply.h index 1a231874233..3d51d1c2116 100644 --- a/src/messages/MOSDOpReply.h +++ b/src/messages/MOSDOpReply.h @@ -130,7 +130,7 @@ public: } MOSDOpReply(MOSDOp *req, int r, epoch_t e, int acktype, bool ignore_out_data) : Message(CEPH_MSG_OSD_OPREPLY, HEAD_VERSION, COMPAT_VERSION), - oid(req->hobj.oid), pgid(req->pgid), ops(req->ops) { + oid(req->hobj.oid), pgid(req->pgid.pgid), ops(req->ops) { set_tid(req->get_tid()); result = r; diff --git a/src/test/msgr/perf_msgr_client.cc b/src/test/msgr/perf_msgr_client.cc index f71682ce340..d47238c01a0 100644 --- a/src/test/msgr/perf_msgr_client.cc +++ b/src/test/msgr/perf_msgr_client.cc @@ -95,7 +95,10 @@ class MessengerClient { if (inflight > uint64_t(concurrent)) { cond.Wait(lock); } - MOSDOp *m = new MOSDOp(client_inc.read(), 0, oid, oloc, pgid, 0, 0, 0); + hobject_t hobj(oid, oloc.key, CEPH_NOSNAP, pgid.ps(), pgid.pool(), + oloc.nspace); + spg_t spgid(pgid); + MOSDOp *m = new MOSDOp(client_inc.read(), 0, hobj, spgid, 0, 0, 0); m->write(0, msg_len, data); inflight++; conn->send_message(m); -- 2.39.5