From 1466c65bfd740032590b9fa7cecb7e4cf39ecc7a Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 16 Jul 2019 16:48:17 +0800 Subject: [PATCH] crimson/net: fix crimson-osd msgr policies Also add checks to make sure we have a valid target address with lossless policy. Signed-off-by: Yingxin Cheng --- src/crimson/net/ProtocolV1.cc | 6 ++++++ src/crimson/net/ProtocolV2.cc | 6 ++++++ src/crimson/osd/heartbeat.cc | 6 ++++++ src/crimson/osd/osd.cc | 23 +++++++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/src/crimson/net/ProtocolV1.cc b/src/crimson/net/ProtocolV1.cc index 586b8bd1839fb..1ae18b6df5c09 100644 --- a/src/crimson/net/ProtocolV1.cc +++ b/src/crimson/net/ProtocolV1.cc @@ -542,6 +542,12 @@ seastar::future ProtocolV1::repeat_handle_connect() ::decode(h.connect, p); conn.set_peer_type(h.connect.host_type); conn.policy = messenger.get_policy(h.connect.host_type); + if (!conn.policy.lossy && !conn.policy.server && conn.target_addr.get_port() <= 0) { + logger().error("{} we don't know how to reconnect to peer {}", + conn, conn.target_addr); + throw std::system_error( + make_error_code(ceph::net::error::bad_peer_address)); + } 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 7bc9a2565a821..7e7a6faf4669a 100644 --- a/src/crimson/net/ProtocolV2.cc +++ b/src/crimson/net/ProtocolV2.cc @@ -1077,6 +1077,12 @@ seastar::future ProtocolV2::server_connect() conn.peer_addr = paddr; logger().debug("{} UPDATE: peer_addr={}", conn, conn.peer_addr); conn.target_addr = conn.peer_addr; + if (!conn.policy.lossy && !conn.policy.server && conn.target_addr.get_port() <= 0) { + logger().warn("{} we don't know how to reconnect to peer {}", + conn, conn.target_addr); + throw std::system_error( + make_error_code(ceph::net::error::bad_peer_address)); + } conn.set_peer_id(client_ident.gid()); client_cookie = client_ident.cookie(); diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index c983ebe6aff45..bc41ab7b7e5c2 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -40,6 +40,12 @@ seastar::future<> Heartbeat::start(entity_addrvec_t front_addrs, for (auto& addr : boost::join(front_addrs.v, back_addrs.v)) { addr.set_port(0); } + + using ceph::net::SocketPolicy; + front_msgr.set_policy(entity_name_t::TYPE_OSD, + SocketPolicy::stateless_server(0)); + back_msgr.set_policy(entity_name_t::TYPE_OSD, + SocketPolicy::stateless_server(0)); return seastar::when_all_succeed(start_messenger(front_msgr, front_addrs), start_messenger(back_msgr, back_addrs)) .then([this] { diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 9fa996be19f00..4e9dca1a81466 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -198,6 +198,29 @@ seastar::future<> OSD::start() osdmap = std::move(map); return load_pgs(); }).then([this] { + + uint64_t osd_required = + CEPH_FEATURE_UID | + CEPH_FEATURE_PGID64 | + CEPH_FEATURE_OSDENC; + using ceph::net::SocketPolicy; + + public_msgr.set_default_policy(SocketPolicy::stateless_server(0)); + public_msgr.set_policy(entity_name_t::TYPE_MON, + SocketPolicy::lossy_client(osd_required)); + public_msgr.set_policy(entity_name_t::TYPE_MGR, + SocketPolicy::lossy_client(osd_required)); + public_msgr.set_policy(entity_name_t::TYPE_OSD, + SocketPolicy::stateless_server(0)); + + cluster_msgr.set_default_policy(SocketPolicy::stateless_server(0)); + cluster_msgr.set_policy(entity_name_t::TYPE_MON, + SocketPolicy::lossy_client(0)); + cluster_msgr.set_policy(entity_name_t::TYPE_OSD, + SocketPolicy::lossless_peer(osd_required)); + cluster_msgr.set_policy(entity_name_t::TYPE_CLIENT, + SocketPolicy::stateless_server(0)); + dispatchers.push_front(this); dispatchers.push_front(monc.get()); dispatchers.push_front(mgrc.get()); -- 2.39.5