]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: adjust nonce on rebind()
authorSage Weil <sage@inktank.com>
Tue, 16 Jul 2013 23:25:28 +0000 (16:25 -0700)
committerSage Weil <sage@inktank.com>
Wed, 24 Jul 2013 23:20:36 +0000 (16:20 -0700)
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

src/msg/Accepter.cc

index 90c68df6cf3de3936709bfd1c5f6b6afa763464b..a3f5e3224c6b3f6d5432845a6ad6be61994440ed 100644 (file)
@@ -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)