OpenAFS Master Repository branch, openafs-stable-1_6_x, updated. openafs-stable-1_6_1pre2-26-gd68f9d8

Gerrit Code Review gerrit@openafs.org
Thu, 23 Feb 2012 09:35:45 -0800 (PST)


The following commit has been merged in the openafs-stable-1_6_x branch:
commit dbaaa4c8f9cc1f2d8400b41a43009a0433544e0f
Author: Andrew Deason <adeason@sinenomine.net>
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 1.1.1.1, and also
    has addresses 1.1.1.2 and 1.1.1.3 on the interface list but not on the
    hash table. Say that host A stops responding on 1.1.1.1, and a
    connection comes in from 1.1.1.2. We ProbeUuid 1.1.1.1 and get a
    failure, so we call MultiProbeAlternateAddress_r.
    MultiProbeAlternateAddress_r probes via rx_Multi the addresses 1.1.1.2
    and 1.1.1.3. Say that 1.1.1.3 responds first, and responds
    successfully, so MultiProbeAlternateAddress_r sets 1.1.1.3 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 1.1.1.2 to the interface list, and
    remove 1.1.1.3, and set 1.1.1.2 to be the primary address, even though
    1.1.1.3 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-on: http://gerrit.openafs.org/6728
    Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
    Reviewed-by: Derrick Brashear <shadow@dementix.org>
    Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com>
    Tested-by: BuildBot <buildbot@rampaginggeek.com>
    (cherry picked from commit 3c803580bb503c7650f7b138c1b3f2eafd92b985)
    
    Change-Id: I6554688447e7e62874e45a00a4c1faf957e29cb6
    Reviewed-on: http://gerrit.openafs.org/6768
    Tested-by: BuildBot <buildbot@rampaginggeek.com>
    Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com>
    Reviewed-by: Derrick Brashear <shadow@dementix.org>

 src/viced/host.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

-- 
OpenAFS Master Repository