]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: WaitFrame of V2 can be crypto processed now.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 14 Feb 2019 00:41:09 +0000 (01:41 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 21 Feb 2019 22:30:59 +0000 (23:30 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/msg/async/ProtocolV2.cc

index e6a6a9a000a85fa406ec3d5a3b7e4c05de751b90..2a6eb2fc3fd28cf2a5e0642cfb67db8620042a36 100644 (file)
@@ -218,6 +218,8 @@ public:
   void decode_payload(bufferlist::const_iterator &ti) {}
 };
 
+struct do_not_encode_tag_t {};
+
 template <class C, typename... Args>
 struct PayloadFrame : public Frame<C> {
 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<T, Args...> {
   }
 
   SignedEncryptedFrame(ProtocolV2 &protocol, char *payload, uint32_t length)
-      : PayloadFrame<T, Args...>() {
+      : PayloadFrame<T, Args...>(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<WaitFrame> {
+struct WaitFrame : public SignedEncryptedFrame<WaitFrame> {
   static const ProtocolV2::Tag tag = ProtocolV2::Tag::WAIT;
+  using SignedEncryptedFrame::SignedEncryptedFrame;
 };
 
 struct ReconnectOkFrame
@@ -552,7 +556,7 @@ struct MessageHeaderFrame
   }
 
   MessageHeaderFrame(ceph::bufferlist&& text)
-      : PayloadFrame<MessageHeaderFrame, ceph_msg_header2>()
+      : PayloadFrame<MessageHeaderFrame, ceph_msg_header2>(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);
   }