- Developed at Carnegie Mellon University in the 1980s
- Led by Professor M. Satyanarayanan ("Satya")
- Main goal was scalability - supporting as many clients per server as possible
- Whole-file caching on client local disk
- Callbacks from server to client for cache invalidation
- Simplified consistency model
- Whole-file caching on client local disk
- Client-side caching of file contents only (not directories)
- TestAuth protocol to check if cached file is valid
- Fetch: Get entire file from server
- Store: Send entire file to server
- TestAuth: Check if cached file is still valid
- High path traversal costs on server
- Too many TestAuth messages from clients
- Callbacks - server promises to notify client if file changes
- File identifiers (FIDs) instead of full pathnames
- Client-side caching of directories
- Fetch now returns file/directory contents and sets up callback
- No need for TestAuth - assume cached copy valid until callback
- Updates visible on server when file closed
- Server breaks callbacks on other clients when file updated
- "Last writer wins" for simultaneous updates
- Clients must revalidate cache contents after reboot
- Server must notify all clients after crash to invalidate caches
- Better performance for large file re-reads (from local disk cache)
- Simpler consistency model
- Reduced server load for common operations
- Worse performance for small reads/writes to large files
- Higher overhead for file overwrites
- Global namespace
- Better security and access controls
- Improved manageability for administrators