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