From 37af6177ae155001a77b1ff5a0b0958bc59048a2 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 10 Jun 2007 18:05:14 +0000 Subject: [PATCH] DEVEL15-windows-notes-20070610 changes since 1.5.20. not ready for 1.5.21 yet --- doc/txt/winnotes/afs-changes-since-1.2.txt | 150 +++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/doc/txt/winnotes/afs-changes-since-1.2.txt b/doc/txt/winnotes/afs-changes-since-1.2.txt index bd67ba1a8..d040a54a8 100644 --- a/doc/txt/winnotes/afs-changes-since-1.2.txt +++ b/doc/txt/winnotes/afs-changes-since-1.2.txt @@ -1,3 +1,153 @@ +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. + + Since 1.5.19 * fix install path of IBM Quick Start Guide when installed by the Wix installer -- 2.39.5