From 9e1828af76606928e60dbd848ab7f21c119726cc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 16 Mar 2011 10:03:38 -0700 Subject: [PATCH] objecter: make response_data bufferlist static Putting it on the heap unnecessary additional complexity. Signed-off-by: Sage Weil --- src/messages/MPoolOpReply.h | 33 ++++++++++++++++++--------------- src/osdc/Objecter.cc | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/messages/MPoolOpReply.h b/src/messages/MPoolOpReply.h index e1b64f252ca64..6d9e185aee3f7 100644 --- a/src/messages/MPoolOpReply.h +++ b/src/messages/MPoolOpReply.h @@ -21,24 +21,27 @@ public: ceph_fsid_t fsid; __u32 replyCode; epoch_t epoch; - bufferlist *response_data; + bufferlist response_data; - //Once you pass in a response_data pointer it becomes the responsibility - // of the Message. Don't delete it! (This reduces memory copies.) - MPoolOpReply() : PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, 0), response_data(NULL) + MPoolOpReply() : PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, 0) {} MPoolOpReply( ceph_fsid_t& f, tid_t t, int rc, int e, version_t v) : - PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, v), fsid(f), replyCode(rc), - epoch(e), response_data(NULL) { + PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, v), + fsid(f), + replyCode(rc), + epoch(e) { set_tid(t); } MPoolOpReply( ceph_fsid_t& f, tid_t t, int rc, int e, version_t v, bufferlist *blp) : - PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, v), fsid(f), replyCode(rc), - epoch(e), response_data(blp) { + PaxosServiceMessage(CEPH_MSG_POOLOP_REPLY, v), + fsid(f), + replyCode(rc), + epoch(e) { set_tid(t); + if (blp) + response_data.claim(*blp); } - ~MPoolOpReply() { if(response_data) delete response_data; } const char *get_type_name() { return "poolopreply"; } @@ -52,10 +55,11 @@ public: ::encode(fsid, payload); ::encode(replyCode, payload); ::encode(epoch, payload); - if (response_data) { + if (response_data.length()) { ::encode(true, payload); - ::encode(*response_data, payload); - } else ::encode(false, payload); + ::encode(response_data, payload); + } else + ::encode(false, payload); } void decode_payload() { bufferlist::iterator p = payload.begin(); @@ -66,9 +70,8 @@ public: bool has_response_data; ::decode(has_response_data, p); if (has_response_data) { - response_data = new bufferlist(); - ::decode(*response_data, p); - } else response_data = NULL; + ::decode(response_data, p); + } } }; diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 11ccce04d7b45..2ff3306f91b14 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -1089,7 +1089,7 @@ void Objecter::handle_pool_op_reply(MPoolOpReply *m) PoolOp *op = pool_ops[tid]; dout(10) << "have request " << tid << " at " << op << " Op: " << ceph_pool_op_name(op->pool_op) << dendl; if (op->blp) - op->blp->claim(*m->response_data); + op->blp->claim(m->response_data); if (m->version > last_seen_osdmap_version) last_seen_osdmap_version = m->version; if (m->replyCode == 0 && osdmap->get_epoch() < m->epoch) { -- 2.39.5