const entity_name_t& get_myname() const { return my_name; }
const entity_addrvec_t& get_myaddrs() const { return my_addrs; }
entity_addr_t get_myaddr() const { return my_addrs.front(); }
- virtual seastar::future<> set_myaddrs(const entity_addrvec_t& addrs) {
- my_addrs = addrs;
- return seastar::now();
- }
+ virtual void set_myaddrs(const entity_addrvec_t& addrs) = 0;
virtual bool set_addr_unknowns(const entity_addrvec_t &addrs) = 0;
using bind_ertr = crimson::errorator<
make_error_code(crimson::net::error::bad_peer_address));
}
_my_addr_from_peer.set_type(entity_addr_t::TYPE_MSGR2);
- return messenger.learned_addr(_my_addr_from_peer, conn);
- }).then([this] {
+ messenger.learned_addr(_my_addr_from_peer, conn);
return client_auth();
}).then([this] {
if (server_cookie == 0) {
throw std::system_error(
make_error_code(crimson::net::error::bad_peer_address));
}
- return messenger.learned_addr(_my_addr_from_peer, conn);
- }).then([this] {
+ messenger.learned_addr(_my_addr_from_peer, conn);
return server_auth();
}).then([this] {
return read_main_preamble();
return ret;
}
-seastar::future<> SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs)
+void SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs)
{
assert(seastar::this_shard_id() == master_sid);
- auto my_addrs = addrs;
+ my_addrs = addrs;
for (auto& addr : my_addrs.v) {
addr.nonce = nonce;
}
- return Messenger::set_myaddrs(my_addrs);
}
crimson::net::listen_ertr::future<>
{
assert(seastar::this_shard_id() == master_sid);
ceph_assert(addrs.front().get_family() == AF_INET);
- return set_myaddrs(addrs).then([this] {
+ set_myaddrs(addrs);
+ return seastar::futurize_invoke([this] {
if (!listener) {
return FixedCPUServerSocket::create().then([this] (auto _listener) {
listener = _listener;
}
}
-seastar::future<> SocketMessenger::learned_addr(const entity_addr_t &peer_addr_for_me, const SocketConnection& conn)
+void SocketMessenger::learned_addr(
+ const entity_addr_t &peer_addr_for_me,
+ const SocketConnection& conn)
{
assert(seastar::this_shard_id() == master_sid);
if (!need_addr) {
throw std::system_error(
make_error_code(crimson::net::error::bad_peer_address));
}
- return seastar::now();
+ return;
}
if (get_myaddr().get_type() == entity_addr_t::TYPE_NONE) {
addr.set_type(entity_addr_t::TYPE_ANY);
addr.set_port(0);
need_addr = false;
- return set_myaddrs(entity_addrvec_t{addr}
- ).then([this, &conn] {
- logger().info("{} learned myaddr={} (unbound)", conn, get_myaddr());
- });
+ set_myaddrs(entity_addrvec_t{addr});
+ logger().info("{} learned myaddr={} (unbound)", conn, get_myaddr());
} else {
// Already bound
if (!get_myaddr().is_any() &&
addr.set_type(get_myaddr().get_type());
addr.set_port(get_myaddr().get_port());
need_addr = false;
- return set_myaddrs(entity_addrvec_t{addr}
- ).then([this, &conn] {
- logger().info("{} learned myaddr={} (blank IP)", conn, get_myaddr());
- });
+ set_myaddrs(entity_addrvec_t{addr});
+ logger().info("{} learned myaddr={} (blank IP)", conn, get_myaddr());
} else if (!get_myaddr().is_same_host(peer_addr_for_me)) {
logger().warn("{} peer_addr_for_me {} IP doesn't match myaddr {}",
conn, peer_addr_for_me, get_myaddr());
make_error_code(crimson::net::error::bad_peer_address));
} else {
need_addr = false;
- return seastar::now();
}
}
}
uint32_t nonce);
~SocketMessenger() override;
- seastar::future<> set_myaddrs(const entity_addrvec_t& addr) override;
+ void set_myaddrs(const entity_addrvec_t& addr) override;
bool set_addr_unknowns(const entity_addrvec_t &addr) override;
// Messenger interfaces are assumed to be called from its own shard, but its
public:
seastar::future<uint32_t> get_global_seq(uint32_t old=0);
- seastar::future<> learned_addr(const entity_addr_t &peer_addr_for_me,
- const SocketConnection& conn);
+
+ void learned_addr(const entity_addr_t &peer_addr_for_me,
+ const SocketConnection& conn);
SocketConnectionRef lookup_conn(const entity_addr_t& addr);
void accept_conn(SocketConnectionRef);
void unregister_conn(SocketConnectionRef);
void closing_conn(SocketConnectionRef);
void closed_conn(SocketConnectionRef);
+
seastar::shard_id shard_id() const {
assert(seastar::this_shard_id() == master_sid);
return master_sid;
replace_unknown_addrs(cluster_msgr->get_myaddrs(),
public_msgr->get_myaddrs()); changed) {
logger().debug("replacing unkwnown addrs of cluster messenger");
- return cluster_msgr->set_myaddrs(addrs);
- } else {
- return seastar::now();
+ cluster_msgr->set_myaddrs(addrs);
}
- }).then([this] {
return heartbeat->start(pick_addresses(CEPH_PICK_ADDRESS_PUBLIC),
pick_addresses(CEPH_PICK_ADDRESS_CLUSTER));
}).then([this] {