AFS callback story for reads and writes from multiple clients and one fileserver
[openafs-wiki.git] / diagrams / afs-cb-story.mdwn
1 [afs-cb-0][1]
2 1. create file on *host d*
3  * data version (dv) = 1
4  * callback registration
5 2. read on *hosts a,b,c*
6 3. fetch-states
7 4. add callback at fileserver
8
9 ![afs-cb-1][2]
10 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.
11
12 [afs-cb-2][3]
13 host a modifies the file.
14 1. open, write, close on *host a*
15 2. store-data
16 3. callbacks *b,c,d* are called
17  * "break" callbacks once called (i.e. remove them from the table once called)
18 4. reply *dv=2* for *host a*
19  * incremented at the *fileserver*
20
21 ![afs-cb-3][4]
22 read a stale file on *host c*.
23 1. open, read on *host c*
24 2. fetch-status
25  * returns *dv=2* > local cached *dv=1*
26 3. fetch-data *dv=2* for *host c*
27  * registers callback for the file on *host c*
28
29 [afs-cb-4][5]
30 1. callbacks *a,c* expire.
31 2. read file on *host c*
32 3. fetch-status
33  * returns *dv=2* == local cached *dv*
34  * registers a new callback for the file on *host c* with *fileserver*
35 4. new callback. cached data so local data is used.
36
37 ![afs-cb-5][6]
38 a common failure mode: callback to host fails
39 1. write, close on *host a*
40 2. store-data
41 3. callback (fails)
42 4. store-data reply
43  * *fileserver* increments *dv=3*
44 5. delayed callback (fails until it does not)
45 6. callback expires (read fails)
46
47 [1]: /diagrams/afs-cb-0.png "Create file"
48 [2]: /diagrams/afs-cb-1.png "Replicate file"
49 [3]: /diagrams/afs-cb-2.png "Modify file"
50 [4]: /diagrams/afs-cb-3.png "Read stale file"
51 [5]: /diagrams/afs-cb-4.png "Callback expires"
52 [6]: /diagrams/afs-cb-5.png "Callback failure"