The Andrew File System (AFS) [7] brings client-side caching to a client/server distributed file system. Entire files and directories are cached on client machines for better performance. Servers record the files clients are caching, then execute callback routines to notify clients when their cache data has changed. AFS limits invalidation messages to nodes actually caching a file or directory (the object's copy set), eliminating superfluous network transmissions.
There are three drawbacks to callback invalidations for DCAs: (1) server state must be recoverable in case of failure, (2) the amount of server state grows with each new client, and (3) an invalidation policy may not perform as well as an update policy.
Copy sets translate into server state that is necessary for AFS to work. These copy sets must be recovered or rebuilt after a server failure. Our intent is to implement a simpler crash recovery model for Relay, since disconnections may be common.
Scalability is an issue because each new client adds to the server's recoverable state. As the number of clients grows, server performance will degrade because of the amount of state is must maintain.
Finally, we believe that an update policy will behave better than an invalidation policy for DCAs. If cached data represents graphical state, then DCAs will be accessing cached data to display regions of state. This kind of behavior will cause many cache hits due to locality of reference. For this reason, the cached data should be current when accessed. An invalidation policy leaves stale data in the cache until an access, then validates the data with the server, incurring a round-trip on the network. Relay uses an update policy to keep cached data current, with the expectation that graphical state will be accessed repeatedly.