Create file

afs-cb-0

  1. create file on host d
    • data version (dv) = 1
    • callback registration
  2. read on hosts a,b,c
  3. fetch-states
  4. add callback at fileserver

Replicate file

afs-cb-1

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

afs-cb-2

host a modifies the file.

  1. open, write, close on host a
  2. store-data
  3. callbacks b,c,d are called
    • "break" callbacks once called (i.e. remove them from the table once called)
  4. reply dv=2 for host a
    • incremented at the fileserver

Read stale file

afs-cb-3

read a stale file on host c.

  1. open, read on host c
  2. fetch-status
    • returns dv=2 > local cached dv=1
  3. fetch-data dv=2 for host c
    • registers callback for the file on host c

Callback expires

afs-cb-4

  1. callbacks a,c expire.
  2. read file on host c
  3. fetch-status
    • returns dv=2 == local cached dv
    • registers a new callback for the file on host c with fileserver
  4. new callback. cached data so local data is used.

Callback failure

afs-cb-5

a common failure mode: callback to host fails

  1. write, close on host a
  2. store-data
  3. callback (fails)
  4. store-data reply
    • fileserver increments dv=3
  5. delayed callback (fails until it does not)
  6. callback expires (read fails)