From: Sage Weil Date: Sun, 6 Jan 2013 16:33:01 +0000 (-0800) Subject: msgr: update Message envelope in encode, not write_message X-Git-Tag: v0.56.1~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=299dbad490df5e98c04f17fa8e486a718f3c121f;p=ceph.git msgr: update Message envelope in encode, not write_message Fill out the Message header, footer, and calculate CRCs during encoding, not write_message(). This removes most modifications from Pipe::write_message(). Signed-off-by: Sage Weil (cherry picked from commit 40706afc66f485b2bd40b2b4b1cd5377244f8758) --- diff --git a/src/msg/Message.cc b/src/msg/Message.cc index 8d4a2f7e4d6..cfab666ddf6 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -164,6 +164,15 @@ void Message::encode(uint64_t features, bool datacrc) header.compat_version = header.version; } calc_front_crc(); + + // update envelope + header.front_len = get_payload().length(); + header.middle_len = get_middle().length(); + header.data_len = get_data().length(); + calc_header_crc(); + + footer.flags = CEPH_MSG_FOOTER_COMPLETE; + if (datacrc) { calc_data_crc(); @@ -196,10 +205,9 @@ void Message::encode(uint64_t features, bool datacrc) } } #endif - - } - else + } else { footer.flags = (unsigned)footer.flags | CEPH_MSG_FOOTER_NOCRC; + } } void Message::dump(Formatter *f) const diff --git a/src/msg/Pipe.cc b/src/msg/Pipe.cc index ccae4813d0a..0e387538e30 100644 --- a/src/msg/Pipe.cc +++ b/src/msg/Pipe.cc @@ -1803,17 +1803,10 @@ int Pipe::write_keepalive() int Pipe::write_message(Message *m) { - ceph_msg_header& header = m->get_header(); - ceph_msg_footer& footer = m->get_footer(); + const ceph_msg_header& header = m->get_header(); + const ceph_msg_footer& footer = m->get_footer(); int ret; - // get envelope, buffers - header.front_len = m->get_payload().length(); - header.middle_len = m->get_middle().length(); - header.data_len = m->get_data().length(); - footer.flags = CEPH_MSG_FOOTER_COMPLETE; - m->calc_header_crc(); - // Now that we have all the crcs calculated, handle the digital signature for the message, if the // pipe has session security set up. Some session security options do not actually calculate and // check the signature, but they should handle the calls to sign_message and check_signature. PLR