Fixes for Version 1.4, Patchlevel 3 ============================================================================== Bug: cache_hierarchy.log file would be owned by root instead of the `cache_effective_user' from the config file. Fix: cache_hierarchy.log is now opened after the calls to setuid(). ------------------------------------------------------------------------------ Bug: HTTP objects with an Expires: date of "Thursday, 01-Jan-70 00:00:00 GMT" would get stuck in the cache. parse_rfc850() returned 0 to indicate an error, but 0 is a valid value the above time. Fix: parse_rfc850() now returns -1 on error. ------------------------------------------------------------------------------ Bug: If the cache did not have any neighbors, asking for the "server_list" from cachemgr.cgi caused a coredump. Fix: The neighbors linked list implementation has been fixed. ------------------------------------------------------------------------------ Bug: Cached expected to find a trailing \r\n at the end of POST request. Fix: Now read only Content-Length bytes and ignore trailing data. ------------------------------------------------------------------------------ Bug: Cached did not recognize the Netscape-specific HTTP error code 407 Proxy Authentication Required and the error object would get cached. Fix: Don't cache any "401" or "407" HTTP replies. ------------------------------------------------------------------------------ Bug: WAIS relaying did not work at all. Fix: Added call to waisStart() in getFromCache(). ------------------------------------------------------------------------------ Fixes for Version 1.4, Patchlevel 2 ============================================================================== BUG: cached coredumped due to calling memset() with an incorrect size value. Fixes for Version 1.4, Patchlevel 1 ============================================================================== BUG: Mutual neighbors could deadlock on expired objects. The cache would return UDP_HIT for any object it knew about. This included expired objects, and in-progress objects. Two neighbor caches could deadlock as follows: C1: logs TCP_MISS (due to user request) C2: logs UDP_HIT (C2 has the object...) C2: logs TCP_MISS_TTL (...but it is expired, so C2 checks...) C1: logs UDP_HIT (...if C1 has the object; it does) C1: logs TCP_HIT (C2 requests the full object from C1) FIX: Only return UDP_HIT if the object is fully stored on disk, and does not expire for at least five (5) minutes. The 5 minute default can be changed by setting UDP_HIT_THRESH in src/server/icp.c. ------------------------------------------------------------------------------ BUG: Some failed (and partial) FTP transfers get cached for long periods of time. Normally, a failed FTP transfer should be negatively cached for 5 minutes. The cache process had two routines which called wait() on child processes. One of these properly checked the process return code, and the other did not. FIX: The incorrect and redundant wait() routine does not get called anymore. ------------------------------------------------------------------------------ BUG: Hardcoded limit of 10 neighbor/parent caches. FIX: Removed limit, neighbor data structure memory is dynamically allocated. ------------------------------------------------------------------------------ BUG: REVIVE_PARENT messages would never get logged. FIX: rearrange the code to reset the counters after the log message. ------------------------------------------------------------------------------ BUG: During reload some objects may become corrupt due to 5 second timestamp window. This is evidenced by seeing "This file number is already allocated!" messages in the logfile. On reload (non-FAST mode), we call stat() for each object. The file modification time must match the time logged in the swap out ("log") file. Previously the timestamps were considered to match if they differed by 5 for fewer seconds. This number was chosen in the event that the swap files might be on NFS partitions which may have slight time drift. This implicitly assumed that a swap file would not be reused within 5 seconds. Indeed on busy caches, swap files do occansionly get reused that quickly. FIX: For this reason, the maximum timestamp delta has been changed to two (2) seconds. The value can be changed by setting REBUILD_TIMESTAMP_DELTA_MAX in src/server/store.c ------------------------------------------------------------------------------ BUG: The cache would exit if the cache_dir directory existed, but all the swap directories did not exist. FIX: Do not exit if mkdir() returns EEXIST.