Coda File System


From: Jan Harkes <>
Date: Fri, 23 Sep 2016 20:42:52 -0400
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/' 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 realm.

- Removed the high level backup tools, 'backup' and ''.

  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
Received on 2016-09-23 20:43:08