void decode_payload(bufferlist::const_iterator &ti) {}
};
+struct do_not_encode_tag_t {};
+
template <class C, typename... Args>
struct PayloadFrame : public Frame<C> {
protected:
(_encode_payload_each(args), ...);
}
- PayloadFrame() = default;
+ PayloadFrame(do_not_encode_tag_t) {}
+
PayloadFrame(char *payload, uint32_t length) {
this->decode_frame(payload, length);
}
}
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));
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
}
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());
}
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();
}
<< " 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
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);
}
// 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);
}