New versions for Coda-6.9.2 and RPC2-2.6 are out.
It has been a while since the last release so we're overdue for a new
one, a couple of annoying bugs have been fixed, some more known problems
(that also exist in earlier releases) are still lingering around but
I've already been delaying this release too long.
There are no RVM or on the wire incompatibilities with previous releases.
Jan
Bugfixes
* 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)
Enhancements
* 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.
Build related
* 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.