Messenger *msgr;
RefCountedPtr priv;
int peer_type;
- entity_addr_t peer_addr;
+ entity_addrvec_t peer_addrs;
utime_t last_keepalive, last_keepalive_ack;
private:
uint64_t features;
bool peer_is_osd() const { return peer_type == CEPH_ENTITY_TYPE_OSD; }
bool peer_is_client() const { return peer_type == CEPH_ENTITY_TYPE_CLIENT; }
- const entity_addr_t& get_peer_addr() const { return peer_addr; }
- entity_addrvec_t get_peer_addrs() const {
- return entity_addrvec_t(peer_addr);
+ entity_addr_t get_peer_addr() const {
+ return peer_addrs.front();
}
- void set_peer_addr(const entity_addr_t& a) { peer_addr = a; }
+ const entity_addrvec_t& get_peer_addrs() const {
+ return peer_addrs;
+ }
+ void set_peer_addr(const entity_addr_t& a) {
+ peer_addrs = entity_addrvec_t(a);
+ }
+ void set_peer_addrs(const entity_addrvec_t& av) { peer_addrs = av; }
uint64_t get_features() const { return features; }
bool has_feature(uint64_t f) const { return features & f; }
#undef dout_prefix
#define dout_prefix _conn_prefix(_dout)
ostream& AsyncConnection::_conn_prefix(std::ostream *_dout) {
- return *_dout << "-- " << async_msgr->get_myaddr() << " >> " << peer_addr << " conn(" << this
+ return *_dout << "-- " << async_msgr->get_myaddr() << " >> "
+ << peer_addrs << " conn(" << this
<< " :" << port
<< " s=" << get_state_name(state)
<< " pgs=" << peer_global_seq
}
ldout(async_msgr->cct, 20) << __func__ << " connect read peer addr "
<< paddr << " on socket " << cs.fd() << dendl;
- if (peer_addr != paddr) {
- if (paddr.is_blank_ip() && peer_addr.get_port() == paddr.get_port() &&
- peer_addr.get_nonce() == paddr.get_nonce()) {
+ if (peer_addrs.legacy_addr() != paddr) {
+ if (paddr.is_blank_ip() &&
+ peer_addrs.legacy_addr().get_port() == paddr.get_port() &&
+ peer_addrs.legacy_addr().get_nonce() == paddr.get_nonce()) {
ldout(async_msgr->cct, 0) << __func__ << " connect claims to be " << paddr
- << " not " << peer_addr
+ << " not " << peer_addrs
<< " - presumably this is the same node!" << dendl;
} else {
ldout(async_msgr->cct, 10) << __func__ << " connect claims to be "
- << paddr << " not " << peer_addr << dendl;
+ << paddr << " not " << peer_addrs << dendl;
goto fail;
}
}
ldout(async_msgr->cct, 10) << __func__ << " accept setting up session_security." << dendl;
// existing?
- AsyncConnectionRef existing = async_msgr->lookup_conn(peer_addr);
+ AsyncConnectionRef existing = async_msgr->lookup_conn(peer_addrs.legacy_addr());
inject_delay();
}
// connection race?
- if (peer_addr < async_msgr->get_myaddr() || existing->policy.server) {
+ if (peer_addrs.legacy_addr() < async_msgr->get_myaddrs().legacy_addr() ||
+ existing->policy.server) {
// incoming wins
ldout(async_msgr->cct, 10) << __func__ << " accept connection race, existing " << existing
<< ".cseq " << existing->connect_seq << " == " << connect.connect_seq
ldout(async_msgr->cct,10) << __func__ << " accept connection race, existing "
<< existing << ".cseq " << existing->connect_seq
<< " == " << connect.connect_seq << ", sending WAIT" << dendl;
- assert(peer_addr > async_msgr->get_myaddr());
+ assert(peer_addrs.legacy_addr() > async_msgr->get_myaddrs().legacy_addr());
existing->lock.unlock();
return _reply_accept(CEPH_MSGR_TAG_WAIT, connect, reply, authorizer_reply);
}
lock.lock();
replacing = false;
if (r < 0) {
- ldout(async_msgr->cct, 1) << __func__ << " existing race replacing process for addr=" << peer_addr
+ ldout(async_msgr->cct, 1) << __func__ << " existing race replacing process for addr=" << peer_addrs
<< " just fail later one(this)" << dendl;
goto fail_registered;
}
void _init_local_connection() {
assert(lock.is_locked());
- local_connection->peer_addr = my_addr;
+ local_connection->peer_addrs = entity_addrvec_t(my_addr);
local_connection->peer_type = my_name.type();
local_connection->set_features(CEPH_FEATURES_ALL);
ms_deliver_handle_fast_connect(local_connection.get());
int accept_conn(AsyncConnectionRef conn) {
Mutex::Locker l(lock);
- auto it = conns.find(conn->peer_addr);
+ auto it = conns.find(conn->peer_addrs.legacy_addr());
if (it != conns.end()) {
AsyncConnectionRef existing = it->second;
return -1;
}
}
- conns[conn->peer_addr] = conn;
+ conns[conn->peer_addrs.legacy_addr()] = conn;
conn->get_perf_counter()->inc(l_msgr_active_connections);
accepting_conns.erase(conn);
return 0;