(Illustration by Gaich Muramatsu)
Coda 6.9.9 has been released. This release includes updates to LWP, RPC2 and RVM. - A large part of this release involved deleting dead and unused code. With a new script 'tools/find_unused_symbols.py' it is possible to generate lists of all functions exported, and all functions that are called and then comparing for functions that are exported, but not referenced. Some of these were functions that were only used in the same file as where they were defined and these have been switched to 'static' many of the ones that ended up with no users were removed completely. I just realized this script is included in a checkout of the git repository, but probably not included in the distributed source tarballs, I'll add it in the next release. - RPC2 - A significant rewrite of the code generated by the rp2gen stub generator. (Thank you, Si Lao) Instead of generating big, hard to read, blocks of repetitive code to pack and unpack all arguments passed to the remote procedure calls, the stub generator now moves packing and unpacking to small functions. - basic RPC2 datatypes use hand-written functions in librpc2. - common structures in *.rpc2 files have generated pack and unpack helpers. - each RPC's request/response packet has unique pack and unpack helpers. This makes the code more readable, faster to compile and results in smaller compiled objects. It even uncovered a couple of places where almost an unbounded amount of memory could have been allocated to unpack a buffer that we know is less than RPC2_MAXPACKETSIZE (a few KB), proper limits have now been added. The restructuring also allowed us to use the request pack and unpack helpers for the CML leading to cleaner code and better bounds checking compared to calling MultiRPC related functions that were internal to RPC2 and not officialy part of the public API. - RVM - should no longer have issues initializing >2GB data segments. (Thanks Rune for showing where the problem was) - Fixed SRV record lookup for realms. This had not been working for a while because configure was testing for the wrong resolver support function. I never noticed because we don't have SRV records for our coda.cs.cmu.edu realm. - Removed the high level backup tools, 'backup' and 'tape.pl'. I didn't use them, and I am pretty sure nobody else did either. The low level volume dump/merge/convert to tar archive tools are still around which makes it fairly straightforward to integrate with something like Amanda or BackupPC which are two of the backup systems we have successfully used in the past. - Removed client support for GetAttr/ValidateAttr and server support for connected mode operations and old-style CML operations. It was about time to remove these, servers have supported alternate *PlusSHA variants of GetAttr and ValidateAttrs since 2003, and clients have not used connected mode operations since 2005 and old-style CML operations since 2002. - All said and done, this release has 4536 fewer lines of code and there is still more where that came from. Plans for the next release - I've been reworking places where we relied on the assumption that a server can be identified by just a single IPv4 address. This assumption fails when we want multihomed servers, IPv6 addresses, servers that are accessible both inside and outside a masqueraded network, servers that do not have a fixed static address or when we want to run multiple servers on different ports on one machine. A lot of the low hanging fruit has been addressed, but these addresses have a way to sneak into unfortunate places. For instance they are being stored persistently in RVM as part of resolution logs, and as a result a server that changes IP address fails to recognize its own log entries during resolution. Right now I think I will introduce a bunch of new RPCs that where possible completely avoid using the PrimaryHost, and otherwise use an identifier that is not linked to the server's IPv4 address. Then next year the old deprecated RPCs can be removed and we can move forward with multihoming, IPv6, running servers on alternate ports and hopefully more goodness. - Maybe switch to semantic versioning for Coda releases, not sure how relevant it is because it seems more focussed on libraries or modules that have APIs used by other applications rather than a filesystem and support programs that communicate with each other and have to be able to talk to both older and newer releases as much as possible. But don't be too surprised if the next release is Coda-6.10.0 instead of Coda-6.9.10.Received on 2016-09-23 20:43:08