1// vim: set sw=2 sts=2 :
2digraph {
3  rankdir=BT
4  bgcolor=white
5
6  node [shape=plaintext]
7  node [fontcolor=black]
8
9  StandAlone     [ style=filled,fillcolor=gray,label=StandAlone ]
10
11  node [fontcolor=lightgray]
12
13  Unconnected    [ label=Unconnected ]
14
15  CommTrouble [ shape=record,
16    label="{communication loss|{Timeout|BrokenPipe|NetworkFailure}}" ]
17
18  node [fontcolor=gray]
19
20  subgraph cluster_try_connect {
21    label="try to connect, handshake"
22    rank=max
23    WFConnection   [ label=WFConnection ]
24    WFReportParams [ label=WFReportParams ]
25  }
26
27  TearDown       [ label=TearDown ]
28
29  Connected      [ label=Connected,style=filled,fillcolor=green,fontcolor=black ]
30
31  node [fontcolor=lightblue]
32
33  StartingSyncS  [ label=StartingSyncS ]
34  StartingSyncT  [ label=StartingSyncT ]
35
36  subgraph cluster_bitmap_exchange {
37    node [fontcolor=red]
38    fontcolor=red
39    label="new application (WRITE?) requests blocked\lwhile bitmap is exchanged"
40
41    WFBitMapT      [ label=WFBitMapT ]
42    WFSyncUUID     [ label=WFSyncUUID ]
43    WFBitMapS      [ label=WFBitMapS ]
44  }
45
46  node [fontcolor=blue]
47
48  cluster_resync [ shape=record,label="{<any>resynchronisation process running\l'concurrent' application requests allowed|{{<T>PausedSyncT\nSyncTarget}|{<S>PausedSyncS\nSyncSource}}}" ]
49
50  node [shape=box,fontcolor=black]
51
52  // drbdadm [label="drbdadm connect"]
53  // handshake [label="drbd_connect()\ndrbd_do_handshake\ndrbd_sync_handshake() etc."]
54  // comm_error [label="communication trouble"]
55
56  //
57  // edges
58  // --------------------------------------
59
60  StandAlone -> Unconnected [ label="drbdadm connect" ]
61  Unconnected -> StandAlone  [ label="drbdadm disconnect\lor serious communication trouble" ]
62  Unconnected -> WFConnection [ label="receiver thread is started" ]
63  WFConnection -> WFReportParams [ headlabel="accept()\land/or                        \lconnect()\l" ]
64
65  WFReportParams -> StandAlone [ label="during handshake\lpeers do not agree\labout something essential" ]
66  WFReportParams -> Connected [ label="data identical\lno sync needed",color=green,fontcolor=green ]
67
68    WFReportParams -> WFBitMapS
69    WFReportParams -> WFBitMapT
70    WFBitMapT -> WFSyncUUID [minlen=0.1,constraint=false]
71
72      WFBitMapS -> cluster_resync:S
73      WFSyncUUID -> cluster_resync:T
74
75  edge [color=green]
76  cluster_resync:any -> Connected [ label="resnyc done",fontcolor=green ]
77
78  edge [color=red]
79  WFReportParams -> CommTrouble
80  Connected -> CommTrouble
81  cluster_resync:any -> CommTrouble
82  edge [color=black]
83  CommTrouble -> Unconnected [label="receiver thread is stopped" ]
84
85}
86