mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
msgr: maintain list of accepting pipes
New pipes exist in a sort of limbo before we know who the peer is and add them to rank_pipe. Keep a list of them in accepting_pipes for that period. Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
parent
994e2bf224
commit
dd4addef2d
@ -595,6 +595,7 @@ int Pipe::accept()
|
||||
// open
|
||||
connect_seq = connect.connect_seq + 1;
|
||||
peer_global_seq = connect.global_seq;
|
||||
assert(state == STATE_ACCEPTING);
|
||||
state = STATE_OPEN;
|
||||
ldout(msgr->cct,10) << "accept success, connect_seq = " << connect_seq << ", sending READY" << dendl;
|
||||
|
||||
@ -621,6 +622,8 @@ int Pipe::accept()
|
||||
// ok!
|
||||
if (msgr->dispatch_queue.stop)
|
||||
goto shutting_down;
|
||||
inr removed = msgr->accepting_pipes.erase(this);
|
||||
assert(removed == 1);
|
||||
register_pipe();
|
||||
msgr->lock.Unlock();
|
||||
|
||||
@ -1098,6 +1101,7 @@ void Pipe::unregister_pipe()
|
||||
msgr->rank_pipe.erase(p);
|
||||
} else {
|
||||
ldout(msgr->cct,10) << "unregister_pipe - not registered" << dendl;
|
||||
msgr->accepting_pipes.erase(this); // somewhat overkill, but safe.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -312,6 +312,7 @@ Pipe *SimpleMessenger::add_accept_pipe(int sd)
|
||||
p->start_reader();
|
||||
p->pipe_lock.Unlock();
|
||||
pipes.insert(p);
|
||||
accepting_pipes.insert(p);
|
||||
lock.Unlock();
|
||||
return p;
|
||||
}
|
||||
|
@ -514,6 +514,12 @@ private:
|
||||
* invalid and can be replaced by anyone holding the msgr lock
|
||||
*/
|
||||
hash_map<entity_addr_t, Pipe*> rank_pipe;
|
||||
/**
|
||||
* list of pipes are in teh process of accepting
|
||||
*
|
||||
* These are not yet in the rank_pipe map.
|
||||
*/
|
||||
set<Pipe*> accepting_pipes;
|
||||
/// a set of all the Pipes we have which are somehow active
|
||||
set<Pipe*> pipes;
|
||||
/// a list of Pipes we want to tear down
|
||||
|
Loading…
Reference in New Issue
Block a user