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
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)