From 1575a7b91955b9ce69f29e1d2bfad8699af8d8c2 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 26 Aug 2019 13:15:16 +0800 Subject: [PATCH] crimson/net: set peer_addr in server_reconnect() Signed-off-by: Yingxin Cheng --- src/crimson/net/ProtocolV2.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/crimson/net/ProtocolV2.cc b/src/crimson/net/ProtocolV2.cc index 270be91132e..fdd45a0ac19 100644 --- a/src/crimson/net/ProtocolV2.cc +++ b/src/crimson/net/ProtocolV2.cc @@ -1344,10 +1344,20 @@ ProtocolV2::server_reconnect() // can peer_addrs be changed on-the-fly? // TODO: change peer_addr to entity_addrvec_t - if (conn.peer_addr != reconnect.addrs().front()) { + entity_addr_t paddr = reconnect.addrs().front(); + if (paddr.is_msgr2() || paddr.is_any()) { + // good + } else { + logger().warn("{} peer's address {} is not v2", conn, paddr); + throw std::system_error( + make_error_code(ceph::net::error::bad_peer_address)); + } + if (conn.peer_addr == entity_addr_t()) { + conn.peer_addr = paddr; + } else if (conn.peer_addr != paddr) { logger().error("{} peer identifies as {}, while conn.peer_addr={}," " reconnect failed", - conn, reconnect.addrs().front(), conn.peer_addr); + conn, paddr, conn.peer_addr); throw std::system_error( make_error_code(ceph::net::error::bad_peer_address)); } @@ -1358,8 +1368,8 @@ ProtocolV2::server_reconnect() if (!existing_conn) { // there is no existing connection therefore cannot reconnect to previous // session - logger().warn("{} server_reconnect: no existing connection," - " reseting client", conn); + logger().warn("{} server_reconnect: no existing connection from address {}," + " reseting client", conn, conn.peer_addr); return send_reset(true); } -- 2.39.5