• David Howells's avatar
    afs: Fix fileserver rotation · 495f2ae9
    David Howells authored
    Fix the fileserver rotation so that it doesn't use RTT as the basis for
    deciding which server and address to use as this doesn't necessarily give a
    good indication of the best path.  Instead, use the configurable preference
    list in conjunction with whatever probes have succeeded at the time of
    looking.
    
    To this end, make the following changes:
    
     (1) Keep an array of "server states" to track what addresses we've tried
         on each server and move the waitqueue entries there that we'll need
         for probing.
    
     (2) Each afs_server_state struct is made to pin the corresponding server's
         endpoint state rather than the afs_operation struct carrying a pin on
         the server we're currently looking at.
    
     (3) Drop the server list preference; we now always rescan the server list.
    
     (4) afs_wait_for_probes() now uses the server state list to guide it in
         what it waits for (and to provide the waitqueue entries) and returns
         an indication of whether we'd got a response, run out of responsive
         addresses or the endpoint state had been superseded and we need to
         restart the iteration.
    
     (5) Call afs_get_address_preferences*() occasionally to refresh the
         preference values.
    
     (6) When picking a server, scan the addresses of the servers for which we
         have as-yet untested communications, looking for the highest priority
         one and use that instead of trying all the addresses for a particular
         server in ascending-RTT order.
    
     (7) When a Busy or Offline state is seen across all available servers, do
         a short sleep.
    
     (8) If we detect that we accessed a future RO volume version whilst it is
         undergoing replication, reissue the op against the older version until
         at least half of the servers are replicated.
    
     (9) Whilst RO replication is ongoing, increase the frequency of Volume
         Location server checks for that volume to every ten minutes instead of
         hourly.
    
    Also add a tracepoint to track progress through the rotation algorithm.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    495f2ae9
fs_probe.c 13.9 KB