Create file
- create file on host d
- data version (dv) = 1
- callback registration
- read on hosts a,b,c
- fetch-states
- add callback at fileserver
Replicate file
hello.c propagates to hosts a,b,c from fileserver. Callbacks are registered for a period of time. Callbacks notify a host if a change occurs.
Modify file
host a modifies the file.
- open, write, close on host a
- store-data
- callbacks b,c,d are called
- "break" callbacks once called (i.e. remove them from the table once called)
- reply dv=2 for host a
- incremented at the fileserver
Read stale file
read a stale file on host c.
- open, read on host c
- fetch-status
- returns dv=2 > local cached dv=1
- fetch-data dv=2 for host c
- registers callback for the file on host c
Callback expires
- callbacks a,c expire.
- read file on host c
- fetch-status
- returns dv=2 == local cached dv
- registers a new callback for the file on host c with fileserver
- new callback. cached data so local data is used.
Callback failure
a common failure mode: callback to host fails
- write, close on host a
- store-data
- callback (fails)
- store-data reply
- fileserver increments dv=3
- delayed callback (fails until it does not)
- callback expires (read fails)