OpenAFS Master Repository branch, master, updated. openafs-devel-1_5_76-2190-gf52c33e
Gerrit Code Review
Mon, 20 Feb 2012 13:15:44 -0800 (PST)
The following commit has been merged in the master branch:
Author: Andrew Deason <firstname.lastname@example.org>
Date: Fri Feb 17 15:46:50 2012 -0600
viced: Set h_GetHost_r probefail if MPAA_r fails
Currently, in h_GetHost_r, if we get a connection whose address does
not match an extant host, but the reported uuid does, we ProbeUuid the
old host. If it fails, we call MultiProbeAlternateAddress_r and set
'probefail'. Later on, if 'probefail' is set, we always add the
connection address to the host, and remove the host->host,host->port
address from the host.
However, this is not always correct. Consider the following situation.
We have an existing host that has primary address 188.8.131.52, and also
has addresses 184.108.40.206 and 220.127.116.11 on the interface list but not on the
hash table. Say that host A stops responding on 18.104.22.168, and a
connection comes in from 22.214.171.124. We ProbeUuid 126.96.36.199 and get a
failure, so we call MultiProbeAlternateAddress_r.
MultiProbeAlternateAddress_r probes via rx_Multi the addresses 188.8.131.52
and 184.108.40.206. Say that 220.127.116.11 responds first, and responds
successfully, so MultiProbeAlternateAddress_r sets 18.104.22.168 to be the
primary address for the host.
After MultiProbeAlternateAddress_r returns, 'probefail' is set. A few
lines down, we see that oldHost->host does not match haddr, and
'probefail' is set, so we add 22.214.171.124 to the interface list, and
remove 126.96.36.199, and set 188.8.131.52 to be the primary address, even though
184.108.40.206 is the address we most recently 'know' is correct.
To fix this, only set 'probefail' if MultiProbeAlternateAddress_r also
fails after the failed ProbeUuid call. Conceptually this makes sense,
since if MultiProbeAlternateAddress_r succeeds, it found an address
that responds successfully to ProbeUuid, and it sets that address to
be the primary address. Therefore, after MultiProbeAlternateAddress_r
returns success, the situation is the same as if the 'good' address
was already the primary address, and the ProbeUuid call succeeded, so
'probefail' should be cleared.
Reviewed-by: Jeffrey Altman <email@example.com>
Reviewed-by: Derrick Brashear <firstname.lastname@example.org>
Reviewed-by: Alistair Ferguson <email@example.com>
Tested-by: BuildBot <firstname.lastname@example.org>
src/viced/host.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
OpenAFS Master Repository