diff options
author | Sage Weil <sage@inktank.com> | 2013-07-16 16:25:28 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-07-24 16:20:36 -0700 |
commit | 540a6f49d402c1990f0e0fe9f8897dd664e79501 (patch) | |
tree | fd6347f53218295e7ff2a1904c4b14a36ad79b72 | |
parent | f938a5bf604885ffba65a9b86e19258ca254e58c (diff) | |
download | ceph-540a6f49d402c1990f0e0fe9f8897dd664e79501.tar.gz |
msgr: adjust nonce on rebind()
We can have a situation where:
- we have a pipe to a peer
- pipe goes to standby (on peer)
- we rebind to a new port
- ....
- we rebind again to the same old port
- we connect to peer
and get reattached to the ancient pipe from two instances back. Avoid that
by picking a new nonce each time we rebind.
Add 1,000,000 each time so that the port is still legible in the printed
output.
Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 994e2bf224ab7b7d5b832485ee14de05354d2ddf)
Conflicts:
src/msg/Accepter.cc
-rw-r--r-- | src/msg/Accepter.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/msg/Accepter.cc b/src/msg/Accepter.cc index 90c68df6cf3..a3f5e3224c6 100644 --- a/src/msg/Accepter.cc +++ b/src/msg/Accepter.cc @@ -164,6 +164,11 @@ int Accepter::rebind(int avoid_port) int old_port = addr.get_port(); addr.set_port(0); + // adjust the nonce; we want our entity_addr_t to be truly unique. + nonce += 1000000; + msgr->my_inst.addr.nonce = nonce; + ldout(msgr->cct,10) << " new nonce " << nonce << " and inst " << msgr->my_inst << dendl; + ldout(msgr->cct,10) << " will try " << addr << dendl; int r = bind(addr, old_port, avoid_port); if (r == 0) |