]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: make response_data bufferlist static
authorSage Weil <sage.weil@dreamhost.com>
Wed, 16 Mar 2011 17:03:38 +0000 (10:03 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Wed, 16 Mar 2011 20:53:39 +0000 (13:53 -0700)
Putting it on the heap unnecessary additional complexity.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/messages/MPoolOpReply.h
src/osdc/Objecter.cc

index e1b64f252ca64f0a0e659f02d69c9f8c6642cf1e..6d9e185aee3f7760d277db309f10914e45e70488 100644 (file)
@@ -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);
+    }
   }
 };
 
index 11ccce04d7b45a5675e12cb0aacac4c927da339d..2ff3306f91b146068a3b134b733759d7d6b2b01a 100644 (file)
@@ -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) {