* If my_addr doesn't have an IP set, this function
* will fill it in from the passed addr. Otherwise it does nothing and returns.
*/
-void AsyncMessenger::set_addr_unknowns(const entity_addr_t &addr)
+bool AsyncMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
{
+ bool ret = false;
Mutex::Locker l(lock);
- if (my_addrs.legacy_addr().is_blank_ip()) {
- for (auto& a : my_addrs.v) {
+
+ for (auto& a : my_addrs.v) {
+ if (a.is_blank_ip()) {
int port = a.get_port();
- a.u = addr.u;
- a.set_port(port);
+ for (auto& b : addrs.v) {
+ if (a.get_type() == b.get_type() &&
+ a.get_family() == b.get_family()) {
+ ldout(cct,1) << __func__ << " assuming my addr " << a
+ << " matches provided addr " << b << dendl;
+ a = b;
+ a.set_port(port);
+ ret = true;
+ break;
+ }
+ }
}
+ }
+ if (ret) {
_init_local_connection();
}
+ return ret;
}
void AsyncMessenger::set_addrs(const entity_addrvec_t &addrs)
* If my_inst.addr doesn't have an IP set, this function
* will fill it in from the passed addr. Otherwise it does nothing and returns.
*/
-void SimpleMessenger::set_addr_unknowns(const entity_addr_t &addr)
+bool SimpleMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
{
+ bool ret = false;
+ auto addr = addrs.legacy_addr();
assert(my_addr == my_addrs.front());
if (my_addr.is_blank_ip()) {
ldout(cct,1) << __func__ << " " << addr << dendl;
t.set_port(port);
set_addrs(entity_addrvec_t(t));
init_local_connection();
+ ret = true;
} else {
ldout(cct,1) << __func__ << " " << addr << " no-op" << dendl;
}
assert(my_addr == my_addrs.front());
+ return ret;
}
void SimpleMessenger::set_myaddrs(const entity_addrvec_t &av)
<< ", hb_back_addrs " << hb_back_addrs
<< ", hb_front_addrs " << hb_front_addrs
<< dendl;
-
- for (auto& a : cluster_addrs.v) {
- if (a.is_blank_ip()) {
- int port = a.get_port();
- for (auto& b : client_addrs.v) {
- if (a.get_type() == b.get_type() &&
- a.get_family() == b.get_family()) {
- dout(10) << " assuming cluster_addr " << a
- << " matches client_addr " << b << dendl;
- a = b;
- a.set_port(port);
- cluster_messenger->set_addr_unknowns(a);
- break;
- }
- }
- }
+ if (cluster_messenger->set_addr_unknowns(client_addrs)) {
+ dout(10) << " assuming cluster_addrs match client_addrs "
+ << client_addrs << dendl;
+ cluster_addrs = cluster_messenger->get_myaddrs();
}
if (auto session = local_connection->get_priv(); !session) {
cluster_messenger->ms_deliver_handle_fast_connect(local_connection);
}
local_connection = hb_back_server_messenger->get_loopback_connection().get();
- for (auto& a : hb_back_addrs.v) {
- if (a.is_blank_ip()) {
- int port = a.get_port();
- for (auto& b : cluster_addrs.v) {
- if (a.get_type() == b.get_type() &&
- a.get_family() == b.get_family()) {
- dout(10) << " assuming hb_back_addr " << a
- << " matches cluster_addr " << b << dendl;
- a = b;
- a.set_port(port);
- hb_back_server_messenger->set_addr_unknowns(a);
- break;
- }
- }
- }
+ if (hb_back_server_messenger->set_addr_unknowns(cluster_addrs)) {
+ dout(10) << " assuming hb_back_addrs match cluster_addrs "
+ << cluster_addrs << dendl;
+ hb_back_addrs = hb_back_server_messenger->get_myaddrs();
}
if (auto session = local_connection->get_priv(); !session) {
hb_back_server_messenger->ms_deliver_handle_fast_connect(local_connection);
}
local_connection = hb_front_server_messenger->get_loopback_connection().get();
- for (auto& a : hb_front_addrs.v) {
- if (a.is_blank_ip()) {
- int port = a.get_port();
- for (auto& b : client_addrs.v) {
- if (a.get_type() == b.get_type() &&
- a.get_family() == b.get_family()) {
- dout(10) << " assuming hb_front_addr " << a
- << " matches client_addr " << b << dendl;
- a = b;
- a.set_port(port);
- hb_front_server_messenger->set_addr_unknowns(a);
- break;
- }
- }
- }
+ if (hb_front_server_messenger->set_addr_unknowns(client_addrs)) {
+ dout(10) << " assuming hb_front_addrs match client_addrs "
+ << client_addrs << dendl;
+ hb_front_addrs = hb_front_server_messenger->get_myaddrs();
}
if (auto session = local_connection->get_priv(); !session) {
hb_front_server_messenger->ms_deliver_handle_fast_connect(local_connection);