From 503a1a895b379533ded6a09140d60460438bf1e2 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Tue, 2 May 2023 13:28:39 +0000 Subject: [PATCH] crimson: Avoid any Message's connection usage In continuation to: https://github.com/ceph/ceph/pull/50835 Do not include Crimson's SocketConnection in Message header. Signed-off-by: Matan Breizman --- src/crimson/admin/admin_socket.cc | 1 + src/crimson/osd/shard_services.h | 1 + src/messages/MForward.h | 4 ++++ src/messages/MOSDOp.h | 6 +++--- src/msg/Message.cc | 15 ++++++++++++--- src/msg/Message.h | 24 ++++++++++++++++-------- src/osd/OpRequest.h | 4 ++++ 7 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/crimson/admin/admin_socket.cc b/src/crimson/admin/admin_socket.cc index 88ce8b1b73c..dc675f5a496 100644 --- a/src/crimson/admin/admin_socket.cc +++ b/src/crimson/admin/admin_socket.cc @@ -20,6 +20,7 @@ #include "messages/MCommandReply.h" #include "crimson/common/log.h" #include "crimson/net/Socket.h" +#include "crimson/net/Connection.h" using namespace crimson::common; using namespace std::literals; diff --git a/src/crimson/osd/shard_services.h b/src/crimson/osd/shard_services.h index 90a06bb90cc..fb3359852e3 100644 --- a/src/crimson/osd/shard_services.h +++ b/src/crimson/osd/shard_services.h @@ -22,6 +22,7 @@ #include "crimson/osd/pg_map.h" #include "crimson/osd/state.h" #include "common/AsyncReserver.h" +#include "crimson/net/Connection.h" namespace crimson::net { class Messenger; diff --git a/src/messages/MForward.h b/src/messages/MForward.h index b6fef9e5bb1..d574a3751c5 100644 --- a/src/messages/MForward.h +++ b/src/messages/MForward.h @@ -48,9 +48,13 @@ public: tid(t), client_caps(caps), msg(NULL) { client_type = m->get_source().type(); client_addrs = m->get_source_addrs(); +#ifdef WITH_SEASTAR + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else if (auto &con = m->get_connection()) { client_socket_addr = con->get_peer_socket_addr(); } +#endif con_features = feat; msg = (PaxosServiceMessage*)m->get(); } diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index 97432d1186b..6edc590e51f 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -167,10 +167,10 @@ public: if (features) return features; #ifdef WITH_SEASTAR - // In crimson, conn is independently maintained outside Message. - ceph_abort(); -#endif + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else return get_connection()->get_features(); +#endif } MOSDOp() diff --git a/src/msg/Message.cc b/src/msg/Message.cc index fdf32b5e09f..372606ea816 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -326,7 +326,10 @@ Message *decode_message(CephContext *cct, if (front_crc != footer.front_crc) { if (cct) { ldout(cct, 0) << "bad crc in front " << front_crc << " != exp " << footer.front_crc - << " from " << conn->get_peer_addr() << dendl; +#ifndef WITH_SEASTAR + << " from " << conn->get_peer_addr() +#endif + << dendl; ldout(cct, 20) << " "; front.hexdump(*_dout); *_dout << dendl; @@ -336,7 +339,10 @@ Message *decode_message(CephContext *cct, if (middle_crc != footer.middle_crc) { if (cct) { ldout(cct, 0) << "bad crc in middle " << middle_crc << " != exp " << footer.middle_crc - << " from " << conn->get_peer_addr() << dendl; +#ifndef WITH_SEASTAR + << " from " << conn->get_peer_addr() +#endif + << dendl; ldout(cct, 20) << " "; middle.hexdump(*_dout); *_dout << dendl; @@ -350,7 +356,10 @@ Message *decode_message(CephContext *cct, if (data_crc != footer.data_crc) { if (cct) { ldout(cct, 0) << "bad crc in data " << data_crc << " != exp " << footer.data_crc - << " from " << conn->get_peer_addr() << dendl; +#ifndef WITH_SEASTAR + << " from " << conn->get_peer_addr() +#endif + << dendl; ldout(cct, 20) << " "; data.hexdump(*_dout); *_dout << dendl; diff --git a/src/msg/Message.h b/src/msg/Message.h index 9eec1c5bb83..c54bba7b665 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -39,10 +39,6 @@ #include "msg/MessageRef.h" #include "msg_types.h" -#ifdef WITH_SEASTAR -# include "crimson/net/SocketConnection.h" -#endif // WITH_SEASTAR - // monitor internal #define MSG_MON_SCRUB 64 #define MSG_MON_ELECTION 65 @@ -251,10 +247,11 @@ class Message : public RefCountedObject { public: #ifdef WITH_SEASTAR - using ConnectionRef = crimson::net::ConnectionRef; + // In crimson, conn is independently maintained outside Message. + using ConnectionRef = void*; #else using ConnectionRef = ::ConnectionRef; -#endif // WITH_SEASTAR +#endif protected: ceph_msg_header header; // headerelope @@ -351,8 +348,7 @@ protected: public: const ConnectionRef& get_connection() const { #ifdef WITH_SEASTAR - // In crimson, conn is independently maintained outside Message. - ceph_abort(); + ceph_abort("In crimson, conn is independently maintained outside Message"); #endif return connection; } @@ -497,13 +493,21 @@ public: return entity_name_t(header.src); } entity_addr_t get_source_addr() const { +#ifdef WITH_SEASTAR + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else if (connection) return connection->get_peer_addr(); +#endif return entity_addr_t(); } entity_addrvec_t get_source_addrs() const { +#ifdef WITH_SEASTAR + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else if (connection) return connection->get_peer_addrs(); +#endif return entity_addrvec_t(); } @@ -561,7 +565,11 @@ class SafeMessage : public Message { public: using Message::Message; bool is_a_client() const { +#ifdef WITH_SEASTAR + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else return get_connection()->get_peer_type() == CEPH_ENTITY_TYPE_CLIENT; +#endif } private: diff --git a/src/osd/OpRequest.h b/src/osd/OpRequest.h index e0bc232a53b..92bb17ef4b6 100644 --- a/src/osd/OpRequest.h +++ b/src/osd/OpRequest.h @@ -54,7 +54,11 @@ public: void _dump(ceph::Formatter *f) const override; bool has_feature(uint64_t f) const { +#ifdef WITH_SEASTAR + ceph_abort("In crimson, conn is independently maintained outside Message"); +#else return request->get_connection()->has_feature(f); +#endif } private: -- 2.39.5