#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()) {
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;
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,
}
// 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());