From: Kefu Chai Date: Wed, 9 Jan 2019 15:51:44 +0000 (+0800) Subject: crimson: add entity_addrvec_t interfaces to Messenger X-Git-Tag: v14.1.0~356^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1d6b3e7344f380e826bfe0a3ae9c03314f41c7c8;p=ceph.git crimson: add entity_addrvec_t interfaces to Messenger Signed-off-by: Kefu Chai --- diff --git a/src/crimson/net/Messenger.h b/src/crimson/net/Messenger.h index e78f1a373bc3..5033bfe10907 100644 --- a/src/crimson/net/Messenger.h +++ b/src/crimson/net/Messenger.h @@ -24,7 +24,7 @@ namespace ceph::net { class Messenger { entity_name_t my_name; - entity_addr_t my_addr; + entity_addrvec_t my_addrs; uint32_t global_seq = 0; uint32_t crc_flags = 0; @@ -35,13 +35,14 @@ class Messenger { virtual ~Messenger() {} const entity_name_t& get_myname() const { return my_name; } - const entity_addr_t& get_myaddr() const { return my_addr; } - virtual void set_myaddr(const entity_addr_t& addr) { - my_addr = addr; + const entity_addrvec_t& get_myaddrs() const { return my_addrs; } + entity_addr_t get_myaddr() const { return my_addrs.front(); } + virtual void set_myaddrs(const entity_addrvec_t& addrs) { + my_addrs = addrs; } /// bind to the given address - virtual void bind(const entity_addr_t& addr) = 0; + virtual void bind(const entity_addrvec_t& addr) = 0; /// start the messenger virtual seastar::future<> start(Dispatcher *dispatcher) = 0; diff --git a/src/crimson/net/SocketMessenger.cc b/src/crimson/net/SocketMessenger.cc index 6fe4932f3e93..74a0b86333e2 100644 --- a/src/crimson/net/SocketMessenger.cc +++ b/src/crimson/net/SocketMessenger.cc @@ -34,21 +34,26 @@ SocketMessenger::SocketMessenger(const entity_name_t& myname, : Messenger{myname}, logic_name{logic_name}, nonce{nonce} {} -void SocketMessenger::set_myaddr(const entity_addr_t& addr) +void SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs) { - entity_addr_t my_addr = addr; - my_addr.nonce = nonce; + auto my_addrs = addrs; + for (auto& addr : my_addrs.v) { + addr.nonce = nonce; + } // TODO: propagate to all the cores of the Messenger - Messenger::set_myaddr(my_addr); + Messenger::set_myaddrs(my_addrs); } -void SocketMessenger::bind(const entity_addr_t& addr) +void SocketMessenger::bind(const entity_addrvec_t& addrs) { + // TODO: v2: listen on multiple addresses + auto addr = addrs.legacy_addr(); + if (addr.get_family() != AF_INET) { throw std::system_error(EAFNOSUPPORT, std::generic_category()); } - set_myaddr(addr); + set_myaddrs(addrs); seastar::socket_address address(addr.in4_addr()); seastar::listen_options lo; @@ -125,7 +130,7 @@ void SocketMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) addr.u = peer_addr_for_me.u; addr.set_type(peer_addr_for_me.get_type()); addr.set_port(get_myaddr().get_port()); - set_myaddr(addr); + set_myaddrs(entity_addrvec_t{addr}); } void SocketMessenger::set_default_policy(const SocketPolicy& p) diff --git a/src/crimson/net/SocketMessenger.h b/src/crimson/net/SocketMessenger.h index 372de243feb3..4843d569527f 100644 --- a/src/crimson/net/SocketMessenger.h +++ b/src/crimson/net/SocketMessenger.h @@ -48,9 +48,9 @@ class SocketMessenger final : public Messenger { const std::string& logic_name, uint32_t nonce); - void set_myaddr(const entity_addr_t& addr) override; + void set_myaddrs(const entity_addrvec_t& addr) override; - void bind(const entity_addr_t& addr) override; + void bind(const entity_addrvec_t& addr) override; seastar::future<> start(Dispatcher *dispatcher) override; diff --git a/src/test/crimson/test_alien_echo.cc b/src/test/crimson/test_alien_echo.cc index 046d48971b41..d327cd92d501 100644 --- a/src/test/crimson/test_alien_echo.cc +++ b/src/test/crimson/test_alien_echo.cc @@ -280,7 +280,7 @@ seastar_echo(SeastarContext& sc, // bind the server server.msgr.set_policy_throttler(entity_name_t::TYPE_OSD, &server.byte_throttler); - server.msgr.bind(addr); + server.msgr.bind(entity_addrvec_t{addr}); return server.msgr.start(&server.dispatcher) .then([&dispatcher=server.dispatcher, count] { return dispatcher.on_reply.wait([&dispatcher, count] { diff --git a/src/test/crimson/test_messenger.cc b/src/test/crimson/test_messenger.cc index e5a582c80b37..9b6cede47ab7 100644 --- a/src/test/crimson/test_messenger.cc +++ b/src/test/crimson/test_messenger.cc @@ -85,7 +85,7 @@ static seastar::future<> test_echo(unsigned rounds, t.addr.set_family(AF_INET); t.addr.set_port(9010); t.addr.set_nonce(1); - t.server.messenger.bind(t.addr); + t.server.messenger.bind(entity_addrvec_t{t.addr}); t.client.rounds = rounds; t.client.keepalive_dist = std::bernoulli_distribution{keepalive_ratio}; @@ -164,7 +164,7 @@ static seastar::future<> test_concurrent_dispatch() t.addr.set_family(AF_INET); t.addr.set_port(9010); t.addr.set_nonce(3); - t.server.messenger.bind(t.addr); + t.server.messenger.bind(entity_addrvec_t{t.addr}); return t.server.messenger.start(&t.server.dispatcher) .then([&] {