From 8fa8e849d9975826d1fe9497dda75e8f25276125 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sun, 27 Jan 2019 17:23:31 +0100 Subject: [PATCH] msg/async: drop MessageFrame. Use MessageHeaderFrame instead. Signed-off-by: Radoslaw Zarzynski --- src/msg/async/ProtocolV2.cc | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 88bb47d63d0..7bec0e69fff 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -116,11 +116,12 @@ protected: public: Frame() {} - bufferlist &get_buffer() { + bufferlist &get_buffer(const uint32_t extra_payload_len = 0) { if (frame_buffer.length()) { return frame_buffer; } - encode((uint32_t)(payload.length() + sizeof(uint32_t)), frame_buffer, -1ll); + encode(static_cast(payload.length() + extra_payload_len + sizeof(uint32_t)), + frame_buffer, -1ll); uint32_t tag = static_cast(static_cast(this)->tag); ceph_assert(tag != 0); encode(tag, frame_buffer, -1ll); @@ -434,20 +435,12 @@ struct AckFrame : public SignedEncryptedFrame { inline uint64_t &seq() { return get_val<0>(); } }; -// This class is only used for encoding the message frame. -struct MessageFrame : public PayloadFrame { - const ProtocolV2::Tag tag = ProtocolV2::Tag::MESSAGE; - - MessageFrame(ProtocolV2 *protocol, ceph_msg_header2 &header2, - bufferlist &data) - : PayloadFrame( - protocol, header2, signature_t(), data) {} -}; - -// This class is only used for decoding the message header +// This class is used for encoding/decoding header of the message frame. +// Body is processed almost independently with the sole junction point +// being the `extra_payload_len` passed to get_buffer(). struct MessageHeaderFrame : public SignedEncryptedFrame { + const ProtocolV2::Tag tag = ProtocolV2::Tag::MESSAGE; using SignedEncryptedFrame::SignedEncryptedFrame; inline ceph_msg_header2 &header() { return get_val<0>(); } @@ -888,14 +881,15 @@ ssize_t ProtocolV2::write_message(Message *m, bufferlist &bl, bool more) { flat_bl.claim_append(bl); } + MessageHeaderFrame message(this, header2); authencrypt_payload(flat_bl); - MessageFrame message(this, header2, flat_bl); ldout(cct, 5) << __func__ << " sending message m=" << m << " seq=" << m->get_seq() << " " << *m << dendl; - bufferlist &msg_bl = message.get_buffer(); + bufferlist &msg_bl = message.get_buffer(flat_bl.length()); connection->outcoming_bl.claim_append(msg_bl); + connection->outcoming_bl.claim_append(flat_bl); m->trace.event("async writing message"); ldout(cct, 20) << __func__ << " sending m=" << m << " seq=" << m->get_seq() -- 2.39.5