allserversdown-20040723
authorJeffrey Altman <jaltman@mit.edu>
Fri, 23 Jul 2004 22:55:23 +0000 (22:55 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 23 Jul 2004 22:55:23 +0000 (22:55 +0000)
commitd4b14b4e947b44c8e167c81d07554ca52bc814ff
treef7b2eca5c096fdb0c4198b7fc7dba316cb3efd5c
parentf84f7306a3bfe143fba59294429af3ba1598222d
allserversdown-20040723

When all servers associated with a volume get into the CM_SERVERFLAG_DOWN
state, the error CM_ERROR_ALLOFFLINE would be returned by cm_ConnByMServers.
cm_Analyze was then supposed to be pausing for 5 seconds and then reset the
volume information.  Unfortunately, although it called cm_ForceUpdateVolume,
cm_ForceUpdateVolume does not reset the CM_SERVERFLAG_DOWN state on the
servers.  Therefore, when cm_ForceUpdateVolume calls cm_ConnByMServers it
would be given a CM_ERROR_ALLOFFLINE.  In other words, there was no way
out of the state.

cm_Analyze will now reset the CM_SERVERFLAG_DOWN as well as setting the
server status to not_busy after its 5 second wait.  This will allow
cm_ForceUpdateVolume to actually reset the volume information, and
refresh it if servers for the volume are newly accessible.

Also, added some missing locking calls in cm_Analyze.

In cm_ConnByMServers, change the error reporting to return CM_ERROR_ALLBUSY
only when all servers are busy or down; return CM_ERROR_ALLOFFLINE when all
servers are down; and only return CM_ERROR_NOSUCHVOLUME if the server list
for the volume is empty.  In all other cases return CM_ERROR_TIMEDOUT.
src/WINNT/afsd/cm_conn.c