From: Yingxin Cheng Date: Tue, 16 Jul 2019 08:48:17 +0000 (+0800) Subject: crimson/net: fix crimson-osd msgr policies X-Git-Tag: v15.1.0~2161^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1466c65bfd740032590b9fa7cecb7e4cf39ecc7a;p=ceph.git 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 --- diff --git a/src/crimson/net/ProtocolV1.cc b/src/crimson/net/ProtocolV1.cc index 586b8bd1839..1ae18b6df5c 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 7bc9a2565a8..7e7a6faf466 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 c983ebe6aff..bc41ab7b7e5 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 9fa996be19f..4e9dca1a814 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());