|  | // vim: set sw=2 sts=2 : | 
|  | digraph { | 
|  | rankdir=BT | 
|  | bgcolor=white | 
|  |  | 
|  | node [shape=plaintext] | 
|  | node [fontcolor=black] | 
|  |  | 
|  | StandAlone     [ style=filled,fillcolor=gray,label=StandAlone ] | 
|  |  | 
|  | node [fontcolor=lightgray] | 
|  |  | 
|  | Unconnected    [ label=Unconnected ] | 
|  |  | 
|  | CommTrouble [ shape=record, | 
|  | label="{communication loss|{Timeout|BrokenPipe|NetworkFailure}}" ] | 
|  |  | 
|  | node [fontcolor=gray] | 
|  |  | 
|  | subgraph cluster_try_connect { | 
|  | label="try to connect, handshake" | 
|  | rank=max | 
|  | WFConnection   [ label=WFConnection ] | 
|  | WFReportParams [ label=WFReportParams ] | 
|  | } | 
|  |  | 
|  | TearDown       [ label=TearDown ] | 
|  |  | 
|  | Connected      [ label=Connected,style=filled,fillcolor=green,fontcolor=black ] | 
|  |  | 
|  | node [fontcolor=lightblue] | 
|  |  | 
|  | StartingSyncS  [ label=StartingSyncS ] | 
|  | StartingSyncT  [ label=StartingSyncT ] | 
|  |  | 
|  | subgraph cluster_bitmap_exchange { | 
|  | node [fontcolor=red] | 
|  | fontcolor=red | 
|  | label="new application (WRITE?) requests blocked\lwhile bitmap is exchanged" | 
|  |  | 
|  | WFBitMapT      [ label=WFBitMapT ] | 
|  | WFSyncUUID     [ label=WFSyncUUID ] | 
|  | WFBitMapS      [ label=WFBitMapS ] | 
|  | } | 
|  |  | 
|  | node [fontcolor=blue] | 
|  |  | 
|  | cluster_resync [ shape=record,label="{<any>resynchronisation process running\l'concurrent' application requests allowed|{{<T>PausedSyncT\nSyncTarget}|{<S>PausedSyncS\nSyncSource}}}" ] | 
|  |  | 
|  | node [shape=box,fontcolor=black] | 
|  |  | 
|  | // drbdadm [label="drbdadm connect"] | 
|  | // handshake [label="drbd_connect()\ndrbd_do_handshake\ndrbd_sync_handshake() etc."] | 
|  | // comm_error [label="communication trouble"] | 
|  |  | 
|  | // | 
|  | // edges | 
|  | // -------------------------------------- | 
|  |  | 
|  | StandAlone -> Unconnected [ label="drbdadm connect" ] | 
|  | Unconnected -> StandAlone  [ label="drbdadm disconnect\lor serious communication trouble" ] | 
|  | Unconnected -> WFConnection [ label="receiver thread is started" ] | 
|  | WFConnection -> WFReportParams [ headlabel="accept()\land/or                        \lconnect()\l" ] | 
|  |  | 
|  | WFReportParams -> StandAlone [ label="during handshake\lpeers do not agree\labout something essential" ] | 
|  | WFReportParams -> Connected [ label="data identical\lno sync needed",color=green,fontcolor=green ] | 
|  |  | 
|  | WFReportParams -> WFBitMapS | 
|  | WFReportParams -> WFBitMapT | 
|  | WFBitMapT -> WFSyncUUID [minlen=0.1,constraint=false] | 
|  |  | 
|  | WFBitMapS -> cluster_resync:S | 
|  | WFSyncUUID -> cluster_resync:T | 
|  |  | 
|  | edge [color=green] | 
|  | cluster_resync:any -> Connected [ label="resnyc done",fontcolor=green ] | 
|  |  | 
|  | edge [color=red] | 
|  | WFReportParams -> CommTrouble | 
|  | Connected -> CommTrouble | 
|  | cluster_resync:any -> CommTrouble | 
|  | edge [color=black] | 
|  | CommTrouble -> Unconnected [label="receiver thread is stopped" ] | 
|  |  | 
|  | } |