]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Message: Make encode_payload can be reentrant
authorHaomai Wang <haomaiwang@gmail.com>
Mon, 1 Jun 2015 06:50:45 +0000 (14:50 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Mon, 1 Jun 2015 06:50:45 +0000 (14:50 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/messages/MClientCaps.h
src/messages/MClientReconnect.h
src/messages/MClientSession.h
src/messages/MMonPaxos.h
src/messages/MMonSubscribe.h
src/messages/MOSDMap.h
src/messages/MOSDOp.h
src/messages/MOSDOpReply.h
src/messages/MRoute.h
src/msg/async/AsyncConnection.cc

index 6aa89c87242ceee29851dc1f9aa55c4965da5bf2..91ffdf52ffdbfff112b6b175d778241627c18934 100644 (file)
@@ -194,6 +194,7 @@ public:
     }
   }
   void encode_payload(uint64_t features) {
+    header.version = HEAD_VERSION;
     head.snap_trace_len = snapbl.length();
     head.xattr_len = xattrbl.length();
 
index 1b072a35d5533aa75c2abb4c4e6fc4dee935e390..8a9ff42f4a1c1895ac795a9de19f6560ea176af6 100644 (file)
@@ -56,6 +56,7 @@ public:
     data.clear();
     if (features & CEPH_FEATURE_MDSENC) {
       ::encode(caps, data);
+      header.version = HEAD_VERSION;
     } else if (features & CEPH_FEATURE_FLOCK) {
       // encode with old cap_reconnect_t encoding
       __u32 n = caps.size();
index 3ef28e96c277f2f3e140178c678df63d6a28a767..8975b18bce60bcd711fa9a1a5901ea2211024477 100644 (file)
@@ -76,6 +76,7 @@ public:
       header.version = 1;
     } else {
       ::encode(client_meta, payload);
+      header.version = HEAD_VERSION;
     }
 
   }
index 206586ccd215667cc8beaaa119f1f31c5e63006a..b8a9d37545df92c8dab3318d9f3b2b6a0baa1e4c 100644 (file)
@@ -92,6 +92,8 @@ public:
   void encode_payload(uint64_t features) {
     if ((features & CEPH_FEATURE_MONCLOCKCHECK) == 0)
       header.version = 0;
+    else
+      header.version = HEAD_VERSION;
     ::encode(epoch, payload);
     ::encode(op, payload);
     ::encode(first_committed, payload);
index 0233010fd8957fdfa521a6e7c8fe00b56e6b0803..2363775259cb770094393605412031a27f22de92 100644 (file)
@@ -74,6 +74,7 @@ public:
   void encode_payload(uint64_t features) {
     if (features & CEPH_FEATURE_SUBSCRIBE2) {
       ::encode(what, payload);
+      header.version = HEAD_VERSION;
     } else {
       header.version = 0;
       map<string, ceph_mon_subscribe_item_old> oldwhat;
index 9c15290b7e9d9d524a9fae6c3fc7cc4be5dc1cbf..06e79de47794d563a88761935f2fd2b387e4bf2d 100644 (file)
@@ -80,6 +80,7 @@ public:
     }
   }
   void encode_payload(uint64_t features) {
+    header.version = HEAD_VERSION;
     ::encode(fsid, payload);
     if ((features & CEPH_FEATURE_PGID64) == 0 ||
        (features & CEPH_FEATURE_PGPOOL3) == 0 ||
index 867ac0ae8cb0fa6fa2a16af2989542b2f184a296..628a21cc3d9ef39ee0cfd73611f929d2478fd772 100644 (file)
@@ -241,6 +241,7 @@ struct ceph_osd_request_head {
       ::encode_nohead(oid.name, payload);
       ::encode_nohead(snaps, payload);
     } else {
+      header.version = HEAD_VERSION;
       ::encode(client_inc, payload);
       ::encode(osdmap_epoch, payload);
       ::encode(flags, payload);
index b2d51555f6239c749df163f0ff8ae78ba278929a..45ec3d0dc25de312637b34cdeace6d4811753211 100644 (file)
@@ -169,6 +169,7 @@ public:
       }
       ::encode_nohead(oid.name, payload);
     } else {
+      header.version = HEAD_VERSION;
       ::encode(oid, payload);
       ::encode(pgid, payload);
       ::encode(flags, payload);
index d7a826e2dec7da5ee3fcd919e59021a681cee18c..5282d39ae8def7640ad9492e46d71d40686fbd6f 100644 (file)
@@ -60,6 +60,8 @@ public:
     ::encode(session_mon_tid, payload);
     ::encode(dest, payload);
     if (features & CEPH_FEATURE_MON_NULLROUTE) {
+      header.version = HEAD_VERSION;
+      header.compat_version = COMPAT_VERSION;
       bool m = msg ? true : false;
       ::encode(m, payload);
       if (msg)
index 43b4ca515f287c213a0bc8922dd35d71d34e77fe..db2ed403b17435d647d9959bc8e093ee0a60df7b 100644 (file)
@@ -1968,6 +1968,7 @@ int AsyncConnection::send_message(Message *m)
   if (can_write == NOWRITE || get_features() != f) {
     // ensure the correctness of message encoding
     bl.clear();
+    m->get_payload().clear();
     ldout(async_msgr->cct, 5) << __func__ << " clear encoded buffer, can_write=" << can_write << " previous "
                               << f << " != " << get_features() << dendl;
   }