]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async V1: No need calc header crc for ProtocolV1. 26534/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Thu, 28 Feb 2019 00:43:02 +0000 (08:43 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 28 Feb 2019 00:51:28 +0000 (08:51 +0800)
For ProtocolV1, in fun write_message it update seq of header, so it
recalc header crc.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/msg/Message.cc
src/msg/Message.h
src/msg/async/ProtocolV1.cc

index caf0f031cdec917241d8732ae271d8c48b891f0e..a02b8a892aceb711eb25f0d887f87a840c6ede17 100644 (file)
 
 #define dout_subsys ceph_subsys_ms
 
-void Message::encode(uint64_t features, int crcflags)
+void Message::encode(uint64_t features, int crcflags, bool skip_header_crc)
 {
   // encode and copy out of *m
   if (empty_payload()) {
@@ -229,7 +229,7 @@ void Message::encode(uint64_t features, int crcflags)
   header.front_len = get_payload().length();
   header.middle_len = get_middle().length();
   header.data_len = get_data().length();
-  if (crcflags & MSG_CRC_HEADER)
+  if (!skip_header_crc && (crcflags & MSG_CRC_HEADER))
     calc_header_crc();
 
   footer.flags = CEPH_MSG_FOOTER_COMPLETE;
index 42405ed3411346dec6e7b59b5e5e8bf16a1637ec..c6f61b429cf59ceff068676bec2a3e22b97b7619 100644 (file)
@@ -504,7 +504,7 @@ public:
 
   virtual void dump(Formatter *f) const;
 
-  void encode(uint64_t features, int crcflags);
+  void encode(uint64_t features, int crcflags, bool skip_header_crc = false);
 };
 
 extern Message *decode_message(CephContext *cct, int crcflags,
index dac1bbd5840126cf9c5ed2bdff989cb5365d6db5..9ee7a85736ee6b9e47da36dda38079e7466a2823 100644 (file)
@@ -266,7 +266,9 @@ void ProtocolV1::prepare_send_message(uint64_t features, Message *m,
   }
 
   // encode and copy out of *m
-  m->encode(features, messenger->crcflags);
+  // in write_message we update header.seq and need recalc crc
+  // so skip calc header in encode function.
+  m->encode(features, messenger->crcflags, true);
 
   bl.append(m->get_payload());
   bl.append(m->get_middle());