From: Radoslaw Zarzynski Date: Thu, 14 Feb 2019 00:41:09 +0000 (+0100) Subject: msg/async: WaitFrame of V2 can be crypto processed now. X-Git-Tag: v14.1.1~157^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7e951dbc55a0818f4bf74745c4144cbf16ed4049;p=ceph.git msg/async: WaitFrame of V2 can be crypto processed now. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index e6a6a9a000a8..2a6eb2fc3fd2 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -218,6 +218,8 @@ public: void decode_payload(bufferlist::const_iterator &ti) {} }; +struct do_not_encode_tag_t {}; + template struct PayloadFrame : public Frame { protected: @@ -282,7 +284,8 @@ public: (_encode_payload_each(args), ...); } - PayloadFrame() = default; + PayloadFrame(do_not_encode_tag_t) {} + PayloadFrame(char *payload, uint32_t length) { this->decode_frame(payload, length); } @@ -387,7 +390,7 @@ struct SignedEncryptedFrame : public PayloadFrame { } SignedEncryptedFrame(ProtocolV2 &protocol, char *payload, uint32_t length) - : PayloadFrame() { + : PayloadFrame(do_not_encode_tag_t{}) { ceph::bufferlist bl; bl.push_back(buffer::create_static(length, payload)); @@ -479,8 +482,9 @@ struct RetryGlobalFrame inline uint64_t &global_seq() { return get_val<0>(); } }; -struct WaitFrame : public Frame { +struct WaitFrame : public SignedEncryptedFrame { static const ProtocolV2::Tag tag = ProtocolV2::Tag::WAIT; + using SignedEncryptedFrame::SignedEncryptedFrame; }; struct ReconnectOkFrame @@ -552,7 +556,7 @@ struct MessageHeaderFrame } MessageHeaderFrame(ceph::bufferlist&& text) - : PayloadFrame() + : PayloadFrame(do_not_encode_tag_t{}) { this->decode_frame(text.c_str(), text.length()); } @@ -2420,6 +2424,8 @@ CtPtr ProtocolV2::handle_wait() { ldout(cct, 20) << __func__ << dendl; ldout(cct, 1) << __func__ << " received WAIT (connection race)" << dendl; state = WAIT; + ceph_assert(rx_segments_data.size() == 1); + WaitFrame(*this, rx_segments_data[0].c_str(), rx_segments_data[0].length()); return _fault(); } @@ -2830,7 +2836,7 @@ CtPtr ProtocolV2::handle_reconnect(char *payload, uint32_t length) { << " reconnect race detected, this connection loses to existing=" << existing << dendl; - WaitFrame wait; + WaitFrame wait(*this); return WRITE(wait.get_buffer(), "wait", read_frame); } else { // this connection wins @@ -2873,7 +2879,7 @@ CtPtr ProtocolV2::handle_existing_connection(AsyncConnectionRef existing) { ldout(cct, 1) << __func__ << " existing racing replace happened while replacing." << " existing=" << existing << dendl; - WaitFrame wait; + WaitFrame wait(*this); return WRITE(wait.get_buffer(), "wait", read_frame); } @@ -2950,7 +2956,7 @@ CtPtr ProtocolV2::handle_existing_connection(AsyncConnectionRef existing) { // has something to send to us. existing->send_keepalive(); existing->lock.lock(); - WaitFrame wait; + WaitFrame wait(*this); bufferlist &bl = wait.get_buffer(); return WRITE(bl, "wait", read_frame); }