--- /dev/null
+digraph mkdir1 {
+ compound=true;
+ subgraph cluster0 {
+ node [style=filled,color=white];
+ style=filled;
+ cli0 [label="idle client"];
+ cli1 [label="waiting\non mkdir"];
+ cli2 [style=invis];
+ cli3 [style=invis];
+ cli4 [style=invis];
+ cli5 [style=invis];
+ cli6 [style=invis];
+ cli7 [style=invis];
+ cli8 [style=invis];
+ cli0 -> cli1 [label="start\nmkdir"];
+ cli1 -> cli0 [label="mkdir\ncomplete"];
+ label = "client";
+ color=lightgrey;
+ }
+ subgraph cluster1 {
+ node [style=filled,color=white];
+ style=filled;
+ label = "MDS thread";
+ color=lightgrey;
+ mds0 [label="idle\nMDS\nthread"];
+ mds1 [label="mkdir request\nhas arrived"];
+ mds2 [label="lock\nacquired"];
+ mds3 [label="memory\nupdates\ncomplete"];
+ mds7 [label="metadata\nupdate\ncomplete"];
+ mds8 [label="lock\nreleased"];
+ mds0 -> mds1 [label="start\nmkdir"];
+ mds1 -> mds2 [label="lock"];
+ mds2 -> mds3 [label="memory\nupdate\ntransaction"];
+ subgraph cluster4 {
+ node [style=filled,color=white];
+ style=filled;
+ cn4 [label="ready to\nnotify client"];
+ cn5 [label="client\nnotified"];
+ cn4 -> cn5 [label="mkdir\ncomplete"];
+ label = "Client notification";
+ color=lightblue;
+ }
+ subgraph cluster5 {
+ node [style=filled,color=white];
+ style=filled;
+ du4 [label="ready to\nwrite to\ndisk"];
+ du5 [label="writing\nto disk"];
+ du6 [label="disk\nwrite\ncomplete"];
+ du4 -> du5 [label="start\nwrite"];
+ du5 -> du6 [label="finish\nwrite"];
+ label = "Disk Update";
+ color=lightblue;
+ }
+ mds3 -> cn4 [style=dotted,lhead=cluster4];
+ mds3 -> du4 [style=dotted,lhead=cluster5];
+ cn5 -> mds7 [style=dotted,ltail=cluster4];
+ du6 -> mds7 [style=dotted,ltail=cluster5];
+ mds7-> mds8 [label="unlock"];
+ mds8 -> mds0;
+ label = "MDS";
+ color=lightgrey;
+ }
+ subgraph cluster2 {
+ node [style=filled,color=white];
+ style=filled;
+ ldlm0 [label=unlocked];
+ ldlm1 [label="locked"];
+ ldlm2 [style=invis];
+ ldlm3 [style=invis];
+ ldlm4 [style=invis];
+ ldlm5 [style=invis];
+ ldlm6 [style=invis];
+ ldlm7 [style=invis];
+ ldlm8 [style=invis];
+ ldlm0 -> ldlm1 [label="lock"];
+ ldlm1 -> ldlm0 [label="unlock"];
+ label = "LDLM";
+ color=lightgrey;
+ }
+ subgraph cluster3 {
+ node [style=filled,color=white];
+ style=filled;
+ disk0 [label="idle disk"];
+ disk1 [label="active disk"];
+ disk2 [style=invis];
+ disk3 [style=invis];
+ disk4 [style=invis];
+ disk5 [style=invis];
+ disk6 [style=invis];
+ disk7 [style=invis];
+ disk8 [style=invis];
+ disk0 -> disk1 [label="start\nwrite"];
+ disk1 -> disk0 [label="write\ncomplete"];
+ label = "Disk";
+ color=lightgrey;
+ }
+ {rank = same; mds0; cli0; ldlm0; disk0; }
+ {rank = same; mds1; cli1; ldlm1; disk1; }
+ {rank = same; mds2; cli2; ldlm2; disk2; }
+ {rank = same; mds3; cli3; ldlm3; disk3; }
+ start -> cli0;
+ start -> mds0;
+ start -> ldlm0;
+ start -> disk0;
+ start [shape=Mdiamond];
+}