From: Sage Weil Date: Tue, 16 Jul 2013 23:25:28 +0000 (-0700) Subject: msgr: adjust nonce on rebind() X-Git-Tag: v0.61.8~23^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=540a6f49d402c1990f0e0fe9f8897dd664e79501;p=ceph.git 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 (cherry picked from commit 994e2bf224ab7b7d5b832485ee14de05354d2ddf) Conflicts: src/msg/Accepter.cc --- 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)