Completed 10 years ago (Aug 2, 2007, 4:23:28 PM)
It has been a while since the last release so we're overdue for a new one,
- Avoid rm -rf infinite loop. After unlinking all directory entries, (GNU's) rm seeks back to the beginning of the directory and tries to remove any entries that were added during the previous iteration. This didn't work well with Coda's because we wouldn't actually show the changes until the directory was closed and reopened. As a result rm would infinitely retry removing already unlinked files.
- RPC2 defines several Coda-specific error numbers, but these were allocated starting at 100 and as a result overlapped with system specific error number. As a result returned errors from the servers were ambiguous and the client would in some cases interpret an innocent error as something serious and trigger a unnecessary disconnection or possibly mark an operation in conflict. Changing this error number mapping causes in incompatible ABI change for the RPC2 library. The error codes on-the-wire were not conflicting, so there is no network incompatibility between old and new versions.
- When renaming an uncached file, which is really a name space operation on the source and target parent directories, we still dirty the renamed object because the parent pointer changes. As a result we couldn't access the file's contents until the rename operation was reintegrated. Work around this by forcing a (costly) data fetch before renaming.
- There was a race where we could fail to read the most recent version of the update, volutil and auth2 token files on the server. This happens when a token files was updated more than once within a 1 second window, we'd only see the first update. (discovered by Rune)
- Allow file existence check to succeed, access(file, F_OK), for cached files when we are disconnected but do not have cached rights for the user performing the check.
- Coda doesn't like volume names to exceed 32 characters, add a test to createvol_rep to prevent creating volumes overly long volume names. (Nikolai Gjerløff)
- After the removal of the original local repair code (6.9.0) we forgot to reintroduce the bit of code that sets the conflict flag in the cfs listvol code. (Benjamin Gilbert)
- After repairing a conflict on a volume root, when collapsing the expanded object, we replaced the mount link with bad data which crashed the client when we later accessed the volume. (discovered by Phil Nelson)
- Don't disconnect the client just because the CML owner lost tokens. This is a usability improvement similar to the more agressive rights caching that was introduced in the previous Coda release. On the flip side, it makes situations where we are unable to reintegrate less obvious. It is possible to run for a long period of time in writeback caching (write-disconnected) mode without ever realizing that the local state never reaches the servers. Which leads in to,
- Add gcodacon GUI to visualize reintegration state. This is a python/pygtk2 application which shows the state of cached volumes in a small window, and optionally adds a system tray icon. The advantage of using python for this is that it should be mostly OS independent (although I didn't yet get it to work right on Windows) and only introduces a run-time dependency, so you can "build" and install gcodacon without needing any gtk- and X11-related development headers and libraries.
- During a hoard walk we were allocating many namecontext structures, just to discard them when the binding already existed. Delayed the allocation to the point where we know a new namecontext is really necessary. This may reduce some CPU overhead during hoarding, but there are still other issues we identified that cause poor hoard performance that have not yet been addressed in this release.
- 'vcodacon' cleanups. (Phil Nelson)
- Added coda_getservbyname, which knows all the IANA allocated Coda port numbers. This way we could get rid of coda-setup-ports and don't have to add fallback code all over the place.
- Add uncached hint to the getattr result, the next Windows kernel module will use this hint to mark files as offline, which in turn prevents file browsers (windows explorer) from triggering a file fetch by reading icons/thumbnails or other data from the file.
- Remove bash-ism's from various scripts (Greg Troxel)
- Move more towards using POSIX/SuS defined functions (index -> strchr and such) (Rune)
- Changed Coda's build infrastructure to automake, no more copying of the headers during the build and we should no longer depend on GNU make specific extensions.
- Introduce client/server-only builds as configure options (--enable-client / --enable-server).
- Include a coda.spec file in the distributed sources so RPMs can be built straight from the tar, rpmbuild -ta coda-x.x.x.tar.gz.