From cfc0e32e392c5ca475da3e2d08377ba44f0f1767 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 11 Jul 2019 17:47:20 +0800 Subject: [PATCH] crimson/net: unify the usage of entity_type_t and entity_name_t * use standard entity_type_t(uint8_t) in favor of peer_type_t(int); * use standard ceph_entity_type_name() to print where possible; * use peer_name to encapsulate peer_type and peer_id in Connection.h; * clean related interfaces in Messenger and Connection; * print peer_name in Connection logging prefix; Signed-off-by: Yingxin Cheng --- src/crimson/mon/MonClient.cc | 4 ++-- src/crimson/net/Connection.h | 25 ++++++++++++++----------- src/crimson/net/Dispatcher.h | 2 +- src/crimson/net/Fwd.h | 1 - src/crimson/net/Messenger.h | 2 +- src/crimson/net/ProtocolV1.cc | 8 ++++---- src/crimson/net/ProtocolV2.cc | 28 ++++++++++++++-------------- src/crimson/net/ProtocolV2.h | 1 - src/crimson/net/SocketConnection.cc | 6 +++--- src/crimson/net/SocketConnection.h | 4 ---- src/test/crimson/test_alien_echo.cc | 2 +- 11 files changed, 40 insertions(+), 43 deletions(-) diff --git a/src/crimson/mon/MonClient.cc b/src/crimson/mon/MonClient.cc index 9660e639e93..2c236af718b 100644 --- a/src/crimson/mon/MonClient.cc +++ b/src/crimson/mon/MonClient.cc @@ -83,7 +83,7 @@ public: // v1 and v2 seastar::future<> close(); bool is_my_peer(const entity_addr_t& addr) const; - AuthAuthorizer* get_authorizer(peer_type_t peer) const; + AuthAuthorizer* get_authorizer(entity_type_t peer) const; KeyStore& get_keys(); seastar::future<> renew_tickets(); seastar::future<> renew_rotating_keyring(); @@ -176,7 +176,7 @@ seastar::future<> Connection::renew_rotating_keyring() }); } -AuthAuthorizer* Connection::get_authorizer(peer_type_t peer) const +AuthAuthorizer* Connection::get_authorizer(entity_type_t peer) const { if (auth) { return auth->build_authorizer(peer); diff --git a/src/crimson/net/Connection.h b/src/crimson/net/Connection.h index a8a7f43a195..e4408c19bc1 100644 --- a/src/crimson/net/Connection.h +++ b/src/crimson/net/Connection.h @@ -25,14 +25,17 @@ namespace ceph::net { using seq_num_t = uint64_t; class Connection : public seastar::enable_shared_from_this { + entity_name_t peer_name = {0, -1}; + protected: entity_addr_t peer_addr; - peer_type_t peer_type = -1; - int64_t peer_id = -1; using clock_t = seastar::lowres_system_clock; clock_t::time_point last_keepalive; clock_t::time_point last_keepalive_ack; + void set_peer_type(entity_type_t peer_type) { peer_name._type = peer_type; } + void set_peer_id(int64_t peer_id) { peer_name._num = peer_id; } + public: uint64_t peer_global_id = 0; @@ -42,15 +45,15 @@ class Connection : public seastar::enable_shared_from_this { virtual Messenger* get_messenger() const = 0; const entity_addr_t& get_peer_addr() const { return peer_addr; } - virtual int get_peer_type() const = 0; - - bool peer_is_mon() const { return get_peer_type() == CEPH_ENTITY_TYPE_MON; } - bool peer_is_mgr() const { return get_peer_type() == CEPH_ENTITY_TYPE_MGR; } - bool peer_is_mds() const { return get_peer_type() == CEPH_ENTITY_TYPE_MDS; } - bool peer_is_osd() const { return get_peer_type() == CEPH_ENTITY_TYPE_OSD; } - bool peer_is_client() const { - return get_peer_type() == CEPH_ENTITY_TYPE_CLIENT; - } + const entity_name_t& get_peer_name() const { return peer_name; } + entity_type_t get_peer_type() const { return peer_name.type(); } + int64_t get_peer_id() const { return peer_name.num(); } + + bool peer_is_mon() const { return peer_name.is_mon(); } + bool peer_is_mgr() const { return peer_name.is_mgr(); } + bool peer_is_mds() const { return peer_name.is_mds(); } + bool peer_is_osd() const { return peer_name.is_osd(); } + bool peer_is_client() const { return peer_name.is_client(); } /// true if the handshake has completed and no errors have been encountered virtual seastar::future is_connected() = 0; diff --git a/src/crimson/net/Dispatcher.h b/src/crimson/net/Dispatcher.h index 8d6d9b71f92..134a91ba525 100644 --- a/src/crimson/net/Dispatcher.h +++ b/src/crimson/net/Dispatcher.h @@ -48,7 +48,7 @@ class Dispatcher { } virtual seastar::future - ms_verify_authorizer(peer_type_t, + ms_verify_authorizer(entity_type_t, auth_proto_t, bufferlist&) { return seastar::make_ready_future(0, bufferlist{}); diff --git a/src/crimson/net/Fwd.h b/src/crimson/net/Fwd.h index c6b4b5c2e82..80f3c1a4b95 100644 --- a/src/crimson/net/Fwd.h +++ b/src/crimson/net/Fwd.h @@ -20,7 +20,6 @@ #include "msg/msg_types.h" #include "msg/Message.h" -using peer_type_t = int; using auth_proto_t = int; class AuthConnectionMeta; diff --git a/src/crimson/net/Messenger.h b/src/crimson/net/Messenger.h index c0e2602707a..6d857463da8 100644 --- a/src/crimson/net/Messenger.h +++ b/src/crimson/net/Messenger.h @@ -47,7 +47,7 @@ public: {} virtual ~Messenger() {} - int get_mytype() const { return my_name.type(); } + entity_type_t get_mytype() const { return my_name.type(); } const entity_name_t& get_myname() const { return my_name; } const entity_addrvec_t& get_myaddrs() const { return my_addrs; } entity_addr_t get_myaddr() const { return my_addrs.front(); } diff --git a/src/crimson/net/ProtocolV1.cc b/src/crimson/net/ProtocolV1.cc index 093cb1c3288..48b628684af 100644 --- a/src/crimson/net/ProtocolV1.cc +++ b/src/crimson/net/ProtocolV1.cc @@ -258,7 +258,7 @@ ProtocolV1::handle_connect_reply(msgr_tag_t tag) ceph::bufferlist ProtocolV1::get_auth_payload() { // only non-mons connectings to mons use MAuth messages - if (conn.peer_type == CEPH_ENTITY_TYPE_MON && + if (conn.peer_is_mon() && messenger.get_mytype() != CEPH_ENTITY_TYPE_MON) { return {}; } else { @@ -284,7 +284,7 @@ ProtocolV1::repeat_connect() h.connect.host_type = messenger.get_myname().type(); h.connect.global_seq = h.global_seq; h.connect.connect_seq = h.connect_seq; - h.connect.protocol_version = get_proto_version(conn.peer_type, true); + h.connect.protocol_version = get_proto_version(conn.get_peer_type(), true); // this is fyi, actually, server decides! h.connect.flags = conn.policy.lossy ? CEPH_MSG_CONNECT_LOSSY : 0; @@ -327,7 +327,7 @@ void ProtocolV1::start_connect(const entity_addr_t& _peer_addr, ceph_assert(!socket); conn.peer_addr = _peer_addr; - conn.peer_type = _peer_type; + conn.set_peer_type(_peer_type); messenger.register_conn( seastar::static_pointer_cast(conn.shared_from_this())); seastar::with_gate(pending_dispatch, [this] { @@ -537,7 +537,7 @@ seastar::future ProtocolV1::repeat_handle_connect() .then([this](bufferlist bl) { auto p = bl.cbegin(); ::decode(h.connect, p); - conn.peer_type = h.connect.host_type; + conn.set_peer_type(h.connect.host_type); return socket->read(h.connect.authorizer_len); }).then([this] (bufferlist authorizer) { memset(&h.reply, 0, sizeof(h.reply)); diff --git a/src/crimson/net/ProtocolV2.cc b/src/crimson/net/ProtocolV2.cc index e5bee37a5eb..8b26a3b8891 100644 --- a/src/crimson/net/ProtocolV2.cc +++ b/src/crimson/net/ProtocolV2.cc @@ -108,7 +108,7 @@ void ProtocolV2::start_connect(const entity_addr_t& _peer_addr, ceph_assert(!socket); conn.peer_addr = _peer_addr; conn.target_addr = _peer_addr; - conn.peer_type = _peer_type; + conn.set_peer_type(_peer_type); conn.policy = messenger.get_policy(_peer_type); messenger.register_conn( seastar::static_pointer_cast(conn.shared_from_this())); @@ -476,7 +476,8 @@ seastar::future ProtocolV2::banner_exchange() // 6. process peer HelloFrame auto hello = HelloFrame::Decode(rx_segments_data.back()); logger().trace("{} received hello: peer_type={} peer_addr_for_me={}", - conn, (int)hello.entity_type(), hello.peer_addr()); + conn, ceph_entity_type_name(hello.entity_type()), + hello.peer_addr()); return seastar::make_ready_future( hello.entity_type(), hello.peer_addr()); }); @@ -662,8 +663,7 @@ seastar::future ProtocolV2::client_connect() // TODO: change peer_addr to entity_addrvec_t ceph_assert(conn.peer_addr == server_ident.addrs().front()); - peer_name = entity_name_t(conn.get_peer_type(), server_ident.gid()); - conn.peer_id = server_ident.gid(); + conn.set_peer_id(server_ident.gid()); conn.set_features(server_ident.supported_features() & conn.policy.features_supported); peer_global_seq = server_ident.global_seq(); @@ -787,9 +787,10 @@ void ProtocolV2::execute_connecting() return banner_exchange(); }).then([this] (entity_type_t _peer_type, entity_addr_t _peer_addr) { - if (conn.peer_type != _peer_type) { + if (conn.get_peer_type() != _peer_type) { logger().debug("{} connection peer type does not match what peer advertises {} != {}", - conn, conn.peer_type, (int)_peer_type); + conn, ceph_entity_type_name(conn.get_peer_type()), + ceph_entity_type_name(_peer_type)); dispatch_reset(); abort_in_close(); } @@ -999,8 +1000,7 @@ seastar::future ProtocolV2::server_connect() logger().trace("{} got paddr={}, conn.peer_addr={}", conn, paddr, conn.peer_addr); conn.target_addr = conn.peer_addr; - peer_name = entity_name_t(conn.get_peer_type(), client_ident.gid()); - conn.peer_id = client_ident.gid(); + conn.set_peer_id(client_ident.gid()); client_cookie = client_ident.cookie(); uint64_t feat_missing = @@ -1199,12 +1199,12 @@ void ProtocolV2::execute_accepting() return banner_exchange() .then([this] (entity_type_t _peer_type, entity_addr_t _peer_addr) { - ceph_assert(conn.get_peer_type() == -1); - conn.peer_type = _peer_type; + ceph_assert(conn.get_peer_type() == 0); + conn.set_peer_type(_peer_type); conn.policy = messenger.get_policy(_peer_type); logger().trace("{} accept of host type {}, lossy={} server={} standby={} resetcheck={}", - conn, (int)_peer_type, + conn, ceph_entity_type_name(_peer_type), conn.policy.lossy, conn.policy.server, conn.policy.standby, conn.policy.resetcheck); return server_auth(); @@ -1387,7 +1387,7 @@ ceph::bufferlist ProtocolV2::do_sweep_messages( auto message = MessageFrame::Encode(header2, msg->get_payload(), msg->get_middle(), msg->get_data()); logger().debug("{} --> [{} {}] #{} === {} ({}) // {}", - messenger, peer_name, conn.get_peer_addr(), + messenger, conn.get_peer_name(), conn.get_peer_addr(), msg->get_seq(), *msg, msg->get_type(), conn); bl.append(message.get_buffer(session_stream_handlers)); }); @@ -1418,7 +1418,7 @@ seastar::future<> ProtocolV2::read_message(utime_t throttle_stamp) logger().trace("{} got {} + {} + {} byte message," " envelope type={} src={} off={} seq={}", conn, msg_frame.front_len(), msg_frame.middle_len(), - msg_frame.data_len(), current_header.type, peer_name, + msg_frame.data_len(), current_header.type, conn.get_peer_name(), current_header.data_off, current_header.seq); ceph_msg_header header{current_header.seq, @@ -1430,7 +1430,7 @@ seastar::future<> ProtocolV2::read_message(utime_t throttle_stamp) msg_frame.middle_len(), msg_frame.data_len(), current_header.data_off, - peer_name, + conn.get_peer_name(), current_header.compat_version, current_header.reserved, 0}; diff --git a/src/crimson/net/ProtocolV2.h b/src/crimson/net/ProtocolV2.h index b8681c2199d..52ffaf5c86c 100644 --- a/src/crimson/net/ProtocolV2.h +++ b/src/crimson/net/ProtocolV2.h @@ -62,7 +62,6 @@ class ProtocolV2 final : public Protocol { void trigger_state(state_t state, write_state_t write_state, bool reentrant); - entity_name_t peer_name; uint64_t connection_features = 0; uint64_t peer_required_features = 0; diff --git a/src/crimson/net/SocketConnection.cc b/src/crimson/net/SocketConnection.cc index 9e83f1b16a4..19b27dfb791 100644 --- a/src/crimson/net/SocketConnection.cc +++ b/src/crimson/net/SocketConnection.cc @@ -121,12 +121,12 @@ seastar::shard_id SocketConnection::shard_id() const { void SocketConnection::print(ostream& out) const { messenger.print(out); if (side == side_t::none) { - out << " >> " << peer_addr; + out << " >> " << get_peer_name() << " " << peer_addr; } else if (side == side_t::acceptor) { - out << " >> " << peer_addr + out << " >> " << get_peer_name() << " " << peer_addr << "@" << socket_port; } else { // side == side_t::connector out << "@" << socket_port - << " >> " << peer_addr; + << " >> " << get_peer_name() << " " << peer_addr; } } diff --git a/src/crimson/net/SocketConnection.h b/src/crimson/net/SocketConnection.h index 482cbd723d1..38c303a98c4 100644 --- a/src/crimson/net/SocketConnection.h +++ b/src/crimson/net/SocketConnection.h @@ -74,10 +74,6 @@ class SocketConnection : public Connection { Messenger* get_messenger() const override; - int get_peer_type() const override { - return peer_type; - } - seastar::future is_connected() override; seastar::future<> send(MessageRef msg) override; diff --git a/src/test/crimson/test_alien_echo.cc b/src/test/crimson/test_alien_echo.cc index d784c843e40..a35c617380a 100644 --- a/src/test/crimson/test_alien_echo.cc +++ b/src/test/crimson/test_alien_echo.cc @@ -52,7 +52,7 @@ struct Server { }); } seastar::future - ms_verify_authorizer(peer_type_t peer_type, + ms_verify_authorizer(entity_type_t peer_type, auth_proto_t protocol, bufferlist& auth) override { return seastar::make_ready_future( -- 2.39.5