From 63d7de697df3fbf3d1816401dfcf229c520a3b00 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 10 Jul 2007 21:01:28 +0000 Subject: [PATCH] DEVEL15-windows-notes-20070710 more updates for 1.5.21 --- doc/txt/winnotes/afs-changes-since-1.2.txt | 454 +++++++++++---------- 1 file changed, 243 insertions(+), 211 deletions(-) diff --git a/doc/txt/winnotes/afs-changes-since-1.2.txt b/doc/txt/winnotes/afs-changes-since-1.2.txt index fba40ef23..36d3ada68 100644 --- a/doc/txt/winnotes/afs-changes-since-1.2.txt +++ b/doc/txt/winnotes/afs-changes-since-1.2.txt @@ -1,216 +1,248 @@ Since 1.5.20 -* changed the enum values for cm_serverRef_t state info to use a - private name space to avoid collisions (srv_) - -* added a srv_deleted state for cm_serverRef_t objects. This - state is set when cm_FreeServerList() is called with the - CM_FREESERVERLIST_DELETE flag set. cm_FreeServerList() may - not always delete the cm_serverRef_t from the list if it is - still in use by another thread. the srv_deleted state means - the object's contents are no longer valid and it must be - skipped. It will be deleted the next time the object is - freed and the refcount hits zero. - -* the srv_deleted state is also used when a file server reports - either VNOVOL or VMOVED instead of marking the cm_serverRef_t - as offline. This is done to prevent additional usage of the - stale vldb data while waiting for the update volume request - to complete. - -* added a state field to the cm_volume_t object (enum volstate - vl_ name space) that maintains the state of the volume based - upon the states of all of the cm_serverRef_t and cm_server_t - objects. - -* modified cm_UpdateVolume() to set the state of the cm_volume_t - RW, RO, and BK to either vl_alldown or vl_online. There can't - be any other states because cm_UpdateVolume() destroys any - previous knowledge we might have had regarding busy or offline - volume status - -* modified cm_UpdateVolume() to update the volume name in the - cm_volume_t to the volume base name if the previous value was - a volume ID. - -* modified cm_FollowMountPoint() to check to see if the volume - name is a volume ID and if so call cm_GetVolumeByID instead - of cm_GetVolumeByName. This ensures that volume IDs are always - looked up as numeric values. There is no longer a need to - maintain a separate cm_volume_t containing the string representation - of the ID value. - -* Added a flags parameter to cm_GetVolumeByName() and cm_GetVolumeByID(). - The first flag is a "CREATE" flag which is set by all existing - calls. The flag is not set by calls to cm_GetVolumeByID() from - the server probe code when volume status is being updated. We - do not want the server probe operation to result in additional - turnover in the cached volume data. The second flag is NO_LRU_UPDATE - which is set when the server probe code updates the volume status. - This flag will be used to prevent the server probe operation from - changing the order of the least recently used queue. - -* Modified cm_GetVolumeByName to ensure that only one cm_volume_t is - allocated for a given set of normal, readonly, and backup volumes - regardless of whether or not the volume is accessed via name or - ID number. The cm_volume_t namep field is always the base name - of the volume. - -* Added a new volume state, vl_unknown. This state is used as - the initial state for all cm_volume_t when the cache manager starts, - for each cm_volume_t at creation, and for each cm_volume_t when - recycling. The cache manager does not know the state of all - volumes in the world, only those that are in the cache and for - which it has queried the VLDB and hosting file servers. - -* modified cm_GetVolumeByName() to initialize the state of a - volume to vl_unknown. The actual state will be set when a - cm_VolumeUpdate() call completes successfully. - -* changed name of scache hash table variables to avoid ambiguity - when adding hash tables for volumes - -* fix a buffer overrun in sys\pioctl_nt.c pioctl(). - -* modified cm_UpdateVolume() to handle the case in which there is - no RW volume but there is are RO volumes for a given base name. - This is done by querying for the ".readonly" volume name if the - base name does not exist in the VLDB. We never query for the - .backup name because under the current usage model a .backup - volume may only exist on the server that the read-write volume - is located. If there is no RW volume, there can be no .backup. - -* Added four hash tables for cm_volume_t objects to improve the - search time of cm_GetVolumeByID(), cm_GetVolumeByName() and - cm_ForceUpdateVolume(). One each for Name, RWID, ROID, and - BKID. Three ID hash tables are necessary as long as it is - desireable to maintain a single cm_volume_t containing all - of the related RW, RO, and BK volume data. Having the RW and - RO volume data in the same object is necessary for the - implementation of cm_GetROVolumeID() which returns either the - RO or RW ID depending upon the existence of RO volume instances. - -* Added a volume LRU queue so that volume reuse becomes fairer. - This does not replace the all Volumes list which is used when - it is desireable to walk a list of all the volumes whose order - is not going to change out from underneath you which makes it - safe to drop the cm_volumeLock. - -* handles volume hash table updates where volume name to - volume ID number changes. The volume name remains - constant in the cm_volume_t. if a vos rename is performed, - the name of the volume will change and the volume IDs will be - updated. Subsequent access to the old volume ID will create a - new cm_volume_t with the new name. - -* Added a daemon thread operation to query the state of volumes - listed as busy or offline. cm_CheckBusyVolumes() calls - RXAFS_GetVolumeStatus() for each volume ID that is marked vl_busy - or vl_offline. If the volume is now online, the status on the - volume is updated. The default period is 600 seconds. This can - be configured with the BusyVolumeCheckInterval registry value. - -* Added prototype for smb_IoctlPrepareRead() which was missing a - return type in the function definition. - -* Added volume id lists to the cm_server_t. These lists are - allocated in blocks of ~32 IDs. When a cm_PingServer() - detects a change in server state, the state of the cm_volume_t - is updated. - -* Added volID to the cm_serverRef_t object. volID is used - to identify the volume for which the object is a referral. - cm_FreeServerList() uses the volID to remove the volume - from the cm_server_t. - -* In cm_Analyze, when VNOVOL or VMOVED are received, - call cm_ForceVolumeUpdate() to force a refresh of the volume - location data. - -* Added cm_VolumeStatusNotification() which is used at the moment - to log volume status changes to the trace log. It will also - be used as the access point to the File System Filter driver - notification engine. - -* Added an all cm_scache_t list to cm_data. This replaces the use - of the stat cache LRU queue when we need to enumerate all - entries. The LRU list order is not static and when using it to - enumerate all entries it can result in items being missed or - items being processed more than once. - -* Modified cm_Analyze(). Instead of reseting the busy or offline - state of a volume and forcing a retry of the operation - cm_Analyze will defer to the background daemon thread that will - update the state once every 600 seconds. - -* Added the automatic generation of a Freelance ".root" read-write - mountpoint that refers to the root.afs volume of the workstation - cellname at the time the mountpoint is created. - -* re-write cm_Analyze to make better use of the known volume - status. VL_Server queries cannot result in CM_ERROR_ALLOFFLINE - messages. - -* renamed cm_CheckBusyVolumes to cm_CheckOfflineVolumes. - busy volumes will be reset to srv_non_busy by the function - but there is no mechanism for querying the busy state other - than by attempting to access the resource. - -* cm_Analyze will query the state of an offline volume before - deciding whether or not to retry when all volume instances - are offline. - -* the algorithm used after an IP address list change detection - has been modified. we now check the state of the VLDB servers, - then reset the rx connections, and finally check the state of - the file servers. Previously we flushed the rx connections - and then checked the servers in whatever random order they - were first discovered. - -* fix the volume status reported by "fs examine" - -* various improvements to the AFS Network Identity Manager Provider. - - Don't access freed objects after the window has been destroyed. - - Write back the AFS cell list in the identity configuration - even when its empty. - - Disable all use of the provider when AFS is disabled for a - particular identity. - -* Fix cm_cell_t leak. When evaluating a mountpoint that uses an - alias instead of the full cellname, double check the full cell - name and see if we have a matching cell before allocating a new - one. - -* Dump more data with "fs memdump". All volumes and scaches and - now cells. - -* Reverse the order of the all cells list. This ensures that - the workstation cell is always first in the list. - -* If we recognize the server from which a callback revoke was - received, then we can ensure that we only invalidate the status - information for cm_scache_t objects belonging to that cell. - -* When building for amd64, use APPVER 5.02 as we do not support - 64-bit Windows 2000 and explicitly state the machine type in - the link flags. - -* no longer treat VMWare network adapters as equivalent to a - loopback adapter. For some unknown reason, publishing the "AFS" - netbios name on them frequently results in a name collision - error. - -* Use read locks whenever possible instead of write locks when - walking the allCellsp list. This permits better use of multiple - CPUs. - -* In 1.5.20 a bug was introduced by the fake status when PRSFS_READ - is not present on the directory optimization. It would report - mount points and directory objects for which there was no - status information as a zero length file. Instead we can use - the vnode number of the object to determine if it should be - considered to be a directory or a file. If it is even it is a - directory; odd it is a file. + * changed the enum values for cm_serverRef_t state info to use a + private name space to avoid collisions (srv_) + + * added a srv_deleted state for cm_serverRef_t objects. This + state is set when cm_FreeServerList() is called with the + CM_FREESERVERLIST_DELETE flag set. cm_FreeServerList() may + not always delete the cm_serverRef_t from the list if it is + still in use by another thread. the srv_deleted state means + the object's contents are no longer valid and it must be + skipped. It will be deleted the next time the object is + freed and the refcount hits zero. + + * the srv_deleted state is also used when a file server reports + either VNOVOL or VMOVED instead of marking the cm_serverRef_t + as offline. This is done to prevent additional usage of the + stale vldb data while waiting for the update volume request + to complete. + + * added a state field to the cm_volume_t object (enum volstate + vl_ name space) that maintains the state of the volume based + upon the states of all of the cm_serverRef_t and cm_server_t + objects. + + * modified cm_UpdateVolume() to set the state of the cm_volume_t + RW, RO, and BK to either vl_alldown or vl_online. There can't + be any other states because cm_UpdateVolume() destroys any + previous knowledge we might have had regarding busy or offline + volume status + + * modified cm_UpdateVolume() to update the volume name in the + cm_volume_t to the volume base name if the previous value was + a volume ID. + + * modified cm_FollowMountPoint() to check to see if the volume + name is a volume ID and if so call cm_GetVolumeByID instead + of cm_GetVolumeByName. This ensures that volume IDs are always + looked up as numeric values. There is no longer a need to + maintain a separate cm_volume_t containing the string representation + of the ID value. + + * Added a flags parameter to cm_GetVolumeByName() and cm_GetVolumeByID(). + The first flag is a "CREATE" flag which is set by all existing + calls. The flag is not set by calls to cm_GetVolumeByID() from + the server probe code when volume status is being updated. We + do not want the server probe operation to result in additional + turnover in the cached volume data. The second flag is NO_LRU_UPDATE + which is set when the server probe code updates the volume status. + This flag will be used to prevent the server probe operation from + changing the order of the least recently used queue. + + * Modified cm_GetVolumeByName to ensure that only one cm_volume_t is + allocated for a given set of normal, readonly, and backup volumes + regardless of whether or not the volume is accessed via name or + ID number. The cm_volume_t namep field is always the base name + of the volume. + + * Added a new volume state, vl_unknown. This state is used as + the initial state for all cm_volume_t when the cache manager starts, + for each cm_volume_t at creation, and for each cm_volume_t when + recycling. The cache manager does not know the state of all + volumes in the world, only those that are in the cache and for + which it has queried the VLDB and hosting file servers. + + * modified cm_GetVolumeByName() to initialize the state of a + volume to vl_unknown. The actual state will be set when a + cm_VolumeUpdate() call completes successfully. + + * changed name of scache hash table variables to avoid ambiguity + when adding hash tables for volumes + + * fix a buffer overrun in sys\pioctl_nt.c pioctl(). + + * modified cm_UpdateVolume() to handle the case in which there is + no RW volume but there is are RO volumes for a given base name. + This is done by querying for the ".readonly" volume name if the + base name does not exist in the VLDB. We never query for the + .backup name because under the current usage model a .backup + volume may only exist on the server that the read-write volume + is located. If there is no RW volume, there can be no .backup. + + * Added four hash tables for cm_volume_t objects to improve the + search time of cm_GetVolumeByID(), cm_GetVolumeByName() and + cm_ForceUpdateVolume(). One each for Name, RWID, ROID, and + BKID. Three ID hash tables are necessary as long as it is + desireable to maintain a single cm_volume_t containing all + of the related RW, RO, and BK volume data. Having the RW and + RO volume data in the same object is necessary for the + implementation of cm_GetROVolumeID() which returns either the + RO or RW ID depending upon the existence of RO volume instances. + + * Added a volume LRU queue so that volume reuse becomes fairer. + This does not replace the all Volumes list which is used when + it is desireable to walk a list of all the volumes whose order + is not going to change out from underneath you which makes it + safe to drop the cm_volumeLock. + + * handles volume hash table updates where volume name to + volume ID number changes. The volume name remains + constant in the cm_volume_t. if a vos rename is performed, + the name of the volume will change and the volume IDs will be + updated. Subsequent access to the old volume ID will create a + new cm_volume_t with the new name. + + * Added a daemon thread operation to query the state of volumes + listed as busy or offline. cm_CheckBusyVolumes() calls + RXAFS_GetVolumeStatus() for each volume ID that is marked vl_busy + or vl_offline. If the volume is now online, the status on the + volume is updated. The default period is 600 seconds. This can + be configured with the BusyVolumeCheckInterval registry value. + + * Added prototype for smb_IoctlPrepareRead() which was missing a + return type in the function definition. + + * Added volume id lists to the cm_server_t. These lists are + allocated in blocks of ~32 IDs. When a cm_PingServer() + detects a change in server state, the state of the cm_volume_t + is updated. + + * Added volID to the cm_serverRef_t object. volID is used + to identify the volume for which the object is a referral. + cm_FreeServerList() uses the volID to remove the volume + from the cm_server_t. + + * In cm_Analyze, when VNOVOL or VMOVED are received, + call cm_ForceVolumeUpdate() to force a refresh of the volume + location data. + + * Added cm_VolumeStatusNotification() which is used at the moment + to log volume status changes to the trace log. It will also + be used as the access point to the File System Filter driver + notification engine. + + * Added an all cm_scache_t list to cm_data. This replaces the use + of the stat cache LRU queue when we need to enumerate all + entries. The LRU list order is not static and when using it to + enumerate all entries it can result in items being missed or + items being processed more than once. + + * Modified cm_Analyze(). Instead of reseting the busy or offline + state of a volume and forcing a retry of the operation + cm_Analyze will defer to the background daemon thread that will + update the state once every 600 seconds. + + * Added the automatic generation of a Freelance ".root" read-write + mountpoint that refers to the root.afs volume of the workstation + cellname at the time the mountpoint is created. + + * re-write cm_Analyze to make better use of the known volume + status. VL_Server queries cannot result in CM_ERROR_ALLOFFLINE + messages. + + * renamed cm_CheckBusyVolumes to cm_CheckOfflineVolumes. + busy volumes will be reset to srv_non_busy by the function + but there is no mechanism for querying the busy state other + than by attempting to access the resource. + + * cm_Analyze will query the state of an offline volume before + deciding whether or not to retry when all volume instances + are offline. + + * the algorithm used after an IP address list change detection + has been modified. we now check the state of the VLDB servers, + then reset the rx connections, and finally check the state of + the file servers. Previously we flushed the rx connections + and then checked the servers in whatever random order they + were first discovered. + + * fix the volume status reported by "fs examine" + + * various improvements to the AFS Network Identity Manager Provider. + - Don't access freed objects after the window has been destroyed. + - Write back the AFS cell list in the identity configuration + even when its empty. + - Disable all use of the provider when AFS is disabled for a + particular identity. + + * Fix cm_cell_t leak. When evaluating a mountpoint that uses an + alias instead of the full cellname, double check the full cell + name and see if we have a matching cell before allocating a new + one. + + * Dump more data with "fs memdump". All volumes and scaches and + now cells. + + * Reverse the order of the all cells list. This ensures that + the workstation cell is always first in the list. + + * If we recognize the server from which a callback revoke was + received, then we can ensure that we only invalidate the status + information for cm_scache_t objects belonging to that cell. + + * When building for amd64, use APPVER 5.02 as we do not support + 64-bit Windows 2000 and explicitly state the machine type in + the link flags. + + * no longer treat VMWare network adapters as equivalent to a + loopback adapter. For some unknown reason, publishing the "AFS" + netbios name on them frequently results in a name collision + error. + + * Use read locks whenever possible instead of write locks when + walking the allCellsp list. This permits better use of multiple + CPUs. + + * In 1.5.20 a bug was introduced by the fake status when PRSFS_READ + is not present on the directory optimization. It would report + mount points and directory objects for which there was no + status information as a zero length file. Instead we can use + the vnode number of the object to determine if it should be + considered to be a directory or a file. If it is odd it is a + directory; even it is a file. + + * Give Back Callbacks to the file servers in response to suspend + and shutdown power management events. Only give up callbacks + to UP servers and do so with a very short RX dead timeout. + (10 seconds) + + * Fix a race condition in the SMB FID cleanup code that could + result in a stat cache mutex never being released. + + * Fix the graphics files that are installed as part of the + IBM Administrators Guide. + + * Change the behavior of pioctl path parsing to not follow + symlinks or mount points during evaluation. This results in + the FID being the symlink or mount point and not the object + they point to. This is consistent with the behavior of the + UNIX client. + + * Enable AFSDB record lookup for command line tools such as + "fs" and "vos". + + * CellServDB update 2007-07-05 + + * Added a Volume Status Plug-in Interface that permits third parties + to receive notifications when the volume state changes occur. + + * Ensure that all writes to the afsd_alloc.log file use CR-LF. + + * Prevent the afsprocmgmt.dll from being unloaded while the + background thread it starts is running. + + * Avoid a race condition when closing smb_fid_t objects. Since 1.5.19 * fix install path of IBM Quick Start Guide when installed by -- 2.39.5