]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/net: fix crimson-osd msgr policies
authorYingxin Cheng <yingxin.cheng@intel.com>
Tue, 16 Jul 2019 08:48:17 +0000 (16:48 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 17 Jul 2019 08:37:04 +0000 (16:37 +0800)
Also add checks to make sure we have a valid target address with
lossless policy.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/ProtocolV1.cc
src/crimson/net/ProtocolV2.cc
src/crimson/osd/heartbeat.cc
src/crimson/osd/osd.cc

index 586b8bd1839fb9be9ab89193f0da1be5d864a3f3..1ae18b6df5c09249dcb38ce615f89caccdcd7480 100644 (file)
@@ -542,6 +542,12 @@ seastar::future<stop_t> 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));
index 7bc9a2565a82124ca7d8aeca217979ed8dfff2a2..7e7a6faf4669afb91410e51197dbfd4b7bfce654 100644 (file)
@@ -1077,6 +1077,12 @@ seastar::future<bool> 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();
index c983ebe6aff45a78013609290b8b30bc890b6a73..bc41ab7b7e5c298c0aaf6581bdc0563408232f6b 100644 (file)
@@ -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] {
index 9fa996be19f00316d2af8b807f26155f8f6fd816..4e9dca1a81466ce6a9f190aa3c2d413a772253f0 100644 (file)
@@ -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());