This is an automated email from the ASF dual-hosted git repository.
elserj pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git
The following commit(s) were added to refs/heads/asf-site by this push:
new fbae764 RATIS-667. Add a lifecycle diagram for the LogService
fbae764 is described below
commit fbae764eb598cc3675e5a22faaf626fbf4d9bd32
Author: Clay Baenziger <[email protected]>
AuthorDate: Fri Aug 30 17:41:28 2019 -0400
RATIS-667. Add a lifecycle diagram for the LogService
Co-authored-by: Josh Elser <[email protected]>
---
lifecycle.dot | 45 ++++++++++
lifecycle.svg | 206 ++++++++++++++++++++++++++++++++++++++++++++++
logservice.html | 7 ++
logservice/lifecycle.html | 7 ++
4 files changed, 265 insertions(+)
diff --git a/lifecycle.dot b/lifecycle.dot
new file mode 100644
index 0000000..afc8d2a
--- /dev/null
+++ b/lifecycle.dot
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Rendered with dot -Tsvg lifecycle.dot > lifecycle.svg */
+digraph LogServiceStates {
+ node [shape=box, fontsize=16]
+ { rank = same;
+ write [shape=plaintext, label="write()",fillcolor=grey,style=filled];
+ read1 [shape=plaintext, label="read()",fillcolor=grey,style=filled];
+ read2 [shape=plaintext, label="read()",fillcolor=grey,style=filled];
+ export [shape=plaintext, label="export()",fillcolor=grey,style=filled];
+ }
+
+ external1 [shape=none,label=""];
+ external2 [shape=none,label=""];
+
+ OPEN [shape=Mdiamond];
+ DELETED [shape=Msquare];
+ OPEN -> CLOSED [label="API\nCall"];
+ OPEN -> CLOSED [label="Quorum\nFailure"];
+ CLOSED -> DELETED;
+ CLOSED -> ARCHIVING [label="API\nCall"];
+ OPEN -> {write; read1; export} -> OPEN;
+ CLOSED -> read2 -> CLOSED;
+ ARCHIVING -> ARCHIVED [label="On\nCompletion"];
+ ARCHIVED -> DELETED;
+
+ ARCHIVING -> external1 [label="Writes\nData\nExternally",style=dotted];
+ export -> external2 [label="Writes\nData\nExternally",style=dotted];
+}
diff --git a/lifecycle.svg b/lifecycle.svg
new file mode 100644
index 0000000..d9bf361
--- /dev/null
+++ b/lifecycle.svg
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: LogServiceStates Pages: 1 -->
+<svg width="315pt" height="597pt"
+ viewBox="0.00 0.00 315.19 596.98" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4
592.9766)">
+<title>LogServiceStates</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-592.9766
311.1875,-592.9766 311.1875,4 -4,4"/>
+<!-- write -->
+<g id="node1" class="node">
+<title>write</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="234.6268,-588.9766
175.5607,-588.9766 175.5607,-552.9766 234.6268,-552.9766 234.6268,-588.9766"/>
+<text text-anchor="middle" x="205.0938" y="-566.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">write()</text>
+</g>
+<!-- OPEN -->
+<g id="node7" class="node">
+<title>OPEN</title>
+<polygon fill="none" stroke="#000000" points="198.0938,-474.9766
143.4609,-456.9766 198.0937,-438.9766 252.7266,-456.9766 198.0938,-474.9766"/>
+<polyline fill="none" stroke="#000000" points="154.8583,-460.7317
154.8583,-453.2215 "/>
+<polyline fill="none" stroke="#000000" points="186.6964,-442.7317
209.4911,-442.7317 "/>
+<polyline fill="none" stroke="#000000" points="241.3292,-453.2215
241.3292,-460.7317 "/>
+<polyline fill="none" stroke="#000000" points="209.4911,-471.2215
186.6964,-471.2215 "/>
+<text text-anchor="middle" x="198.0938" y="-452.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">OPEN</text>
+</g>
+<!-- write->OPEN -->
+<g id="edge8" class="edge">
+<title>write->OPEN</title>
+<path fill="none" stroke="#000000" d="M198.8958,-552.9129C195.8239,-534.3296
193.7857,-505.1697 193.9134,-483.8728"/>
+<polygon fill="#000000" stroke="#000000" points="197.4131,-483.9267
194.1691,-473.8408 190.4154,-483.7483 197.4131,-483.9267"/>
+</g>
+<!-- read1 -->
+<g id="node2" class="node">
+<title>read1</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="307.2816,-588.9766
252.9059,-588.9766 252.9059,-552.9766 307.2816,-552.9766 307.2816,-588.9766"/>
+<text text-anchor="middle" x="280.0938" y="-566.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">read()</text>
+</g>
+<!-- read1->OPEN -->
+<g id="edge9" class="edge">
+<title>read1->OPEN</title>
+<path fill="none" stroke="#000000" d="M259.8299,-552.6845C246.6433,-536.8707
229.8031,-513.4038 215.0938,-492.9766 212.63,-489.5551 210.0324,-485.9526
207.5583,-482.4026"/>
+<polygon fill="#000000" stroke="#000000" points="210.282,-480.1797
201.809,-473.819 204.4661,-484.0752 210.282,-480.1797"/>
+</g>
+<!-- read2 -->
+<g id="node3" class="node">
+<title>read2</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="54.2816,-588.9766
-.0941,-588.9766 -.0941,-552.9766 54.2816,-552.9766 54.2816,-588.9766"/>
+<text text-anchor="middle" x="27.0938" y="-566.1766" font-family="Times,serif"
font-size="16.00" fill="#000000">read()</text>
+</g>
+<!-- CLOSED -->
+<g id="node9" class="node">
+<title>CLOSED</title>
+<polygon fill="none" stroke="#000000" points="87.3206,-374.9766
8.8669,-374.9766 8.8669,-338.9766 87.3206,-338.9766 87.3206,-374.9766"/>
+<text text-anchor="middle" x="48.0938" y="-352.1766" font-family="Times,serif"
font-size="16.00" fill="#000000">CLOSED</text>
+</g>
+<!-- read2->CLOSED -->
+<g id="edge12" class="edge">
+<title>read2->CLOSED</title>
+<path fill="none" stroke="#000000" d="M24.9044,-552.731C25.1567,-515.3011
33.3126,-429.6128 40.6007,-385.0536"/>
+<polygon fill="#000000" stroke="#000000" points="44.0529,-385.6301
42.3323,-375.1759 37.1581,-384.4213 44.0529,-385.6301"/>
+</g>
+<!-- export -->
+<g id="node4" class="node">
+<title>export</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="156.6266,-588.9766
89.5609,-588.9766 89.5609,-552.9766 156.6266,-552.9766 156.6266,-588.9766"/>
+<text text-anchor="middle" x="123.0938" y="-566.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">export()</text>
+</g>
+<!-- external2 -->
+<g id="node6" class="node">
+<title>external2</title>
+</g>
+<!-- export->external2 -->
+<g id="edge16" class="edge">
+<title>export->external2</title>
+<path fill="none" stroke="#000000" stroke-dasharray="1,5"
d="M94.7505,-552.8706C89.0998,-547.815 83.9391,-541.8054 80.7832,-534.9766
73.6132,-519.4618 75.9153,-500.4795 80.143,-485.1257"/>
+<polygon fill="#000000" stroke="#000000" points="83.6152,-485.7527
83.2848,-475.163 76.9393,-483.6474 83.6152,-485.7527"/>
+<text text-anchor="middle" x="110.249" y="-523.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Writes</text>
+<text text-anchor="middle" x="110.249" y="-509.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Data</text>
+<text text-anchor="middle" x="110.249" y="-495.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Externally</text>
+</g>
+<!-- export->OPEN -->
+<g id="edge10" class="edge">
+<title>export->OPEN</title>
+<path fill="none" stroke="#000000" d="M129.889,-552.9129C141.0163,-532.8273
162.2388,-500.3857 178.2385,-478.8715"/>
+<polygon fill="#000000" stroke="#000000" points="181.2215,-480.7323
184.5142,-470.6621 175.6603,-476.481 181.2215,-480.7323"/>
+</g>
+<!-- external1 -->
+<g id="node5" class="node">
+<title>external1</title>
+</g>
+<!-- OPEN->write -->
+<g id="edge5" class="edge">
+<title>OPEN->write</title>
+<path fill="none" stroke="#000000" d="M203.9625,-473.1125C207.1569,-491.2143
209.3251,-520.9099 209.279,-542.8501"/>
+<polygon fill="#000000" stroke="#000000" points="205.7785,-542.8435
209.0733,-552.9129 212.7771,-542.9866 205.7785,-542.8435"/>
+</g>
+<!-- OPEN->read1 -->
+<g id="edge6" class="edge">
+<title>OPEN->read1</title>
+<path fill="none" stroke="#000000" d="M215.2245,-469.6323C221.2328,-476.53
227.5074,-485.2187 233.0938,-492.9766 245.2749,-509.8929 258.9174,-528.8938
268.6383,-543.9065"/>
+<polygon fill="#000000" stroke="#000000" points="265.8617,-546.0673
274.136,-552.6845 271.7942,-542.3517 265.8617,-546.0673"/>
+</g>
+<!-- OPEN->export -->
+<g id="edge7" class="edge">
+<title>OPEN->export</title>
+<path fill="none" stroke="#000000" d="M192.356,-473.1125C182.2618,-491.7079
162.2842,-522.5382 146.2232,-544.6275"/>
+<polygon fill="#000000" stroke="#000000" points="143.2215,-542.7987
140.0665,-552.9129 148.8402,-546.9738 143.2215,-542.7987"/>
+</g>
+<!-- OPEN->CLOSED -->
+<g id="edge1" class="edge">
+<title>OPEN->CLOSED</title>
+<path fill="none" stroke="#000000" d="M189.7429,-441.4718C181.255,-427.0573
166.8478,-405.9181 149.0938,-392.9766 133.878,-381.8853 114.9187,-373.9385
97.5495,-368.3829"/>
+<polygon fill="#000000" stroke="#000000" points="98.1308,-364.9033
87.5468,-365.3824 96.1195,-371.6081 98.1308,-364.9033"/>
+<text text-anchor="middle" x="186.7593" y="-409.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">API</text>
+<text text-anchor="middle" x="186.7593" y="-395.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">Call</text>
+</g>
+<!-- OPEN->CLOSED -->
+<g id="edge2" class="edge">
+<title>OPEN->CLOSED</title>
+<path fill="none" stroke="#000000" d="M164.4541,-449.8273C143.9998,-444.3213
118.1179,-435.1943 98.4316,-420.9766 84.6511,-411.0241 72.71,-396.3003
63.9209,-383.4836"/>
+<polygon fill="#000000" stroke="#000000" points="66.7664,-381.4403
58.3558,-374.9973 60.9128,-385.279 66.7664,-381.4403"/>
+<text text-anchor="middle" x="122.4248" y="-409.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">Quorum</text>
+<text text-anchor="middle" x="122.4248" y="-395.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">Failure</text>
+</g>
+<!-- DELETED -->
+<g id="node8" class="node">
+<title>DELETED</title>
+<polygon fill="none" stroke="#000000" points="88.0703,-87.9648 .1172,-87.9648
.1172,-.0117 88.0703,-.0117 88.0703,-87.9648"/>
+<polyline fill="none" stroke="#000000" points="12.1172,-87.9648 .1172,-75.9648
"/>
+<polyline fill="none" stroke="#000000" points=".1172,-12.0117 12.1172,-.0117
"/>
+<polyline fill="none" stroke="#000000" points="76.0703,-.0117 88.0703,-12.0117
"/>
+<polyline fill="none" stroke="#000000" points="88.0703,-75.9648
76.0703,-87.9648 "/>
+<text text-anchor="middle" x="44.0938" y="-39.1883" font-family="Times,serif"
font-size="16.00" fill="#000000">DELETED</text>
+</g>
+<!-- CLOSED->read2 -->
+<g id="edge11" class="edge">
+<title>CLOSED->read2</title>
+<path fill="none" stroke="#000000" d="M50.2834,-375.1759C50.0377,-412.5661
41.8846,-498.2515 34.5958,-542.8445"/>
+<polygon fill="#000000" stroke="#000000" points="31.142,-542.2771
32.864,-552.731 38.037,-543.4849 31.142,-542.2771"/>
+</g>
+<!-- CLOSED->DELETED -->
+<g id="edge3" class="edge">
+<title>CLOSED->DELETED</title>
+<path fill="none" stroke="#000000" d="M47.8614,-338.7961C47.2726,-292.7238
45.7037,-169.9637 44.7868,-98.2176"/>
+<polygon fill="#000000" stroke="#000000" points="48.284,-97.9719
44.6564,-88.0175 41.2846,-98.0614 48.284,-97.9719"/>
+</g>
+<!-- ARCHIVING -->
+<g id="node10" class="node">
+<title>ARCHIVING</title>
+<polygon fill="none" stroke="#000000" points="165.8674,-274.9766
60.3201,-274.9766 60.3201,-238.9766 165.8674,-238.9766 165.8674,-274.9766"/>
+<text text-anchor="middle" x="113.0938" y="-252.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">ARCHIVING</text>
+</g>
+<!-- CLOSED->ARCHIVING -->
+<g id="edge4" class="edge">
+<title>CLOSED->ARCHIVING</title>
+<path fill="none" stroke="#000000" d="M60.0158,-338.635C70.003,-323.2701
84.3944,-301.1294 95.6729,-283.7778"/>
+<polygon fill="#000000" stroke="#000000" points="98.732,-285.4938
101.2473,-275.2018 92.8628,-281.6788 98.732,-285.4938"/>
+<text text-anchor="middle" x="100.7593" y="-309.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">API</text>
+<text text-anchor="middle" x="100.7593" y="-295.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">Call</text>
+</g>
+<!-- ARCHIVING->external1 -->
+<g id="edge15" class="edge">
+<title>ARCHIVING->external1</title>
+<path fill="none" stroke="#000000" stroke-dasharray="1,5"
d="M159.6663,-238.8905C167.693,-234.0672 175.3025,-228.1469 181.0938,-220.9766
192.4795,-206.8797 197.9773,-187.2254 200.6298,-171.1732"/>
+<polygon fill="#000000" stroke="#000000" points="204.1008,-171.6229
201.9953,-161.2394 197.166,-170.6696 204.1008,-171.6229"/>
+<text text-anchor="middle" x="227.249" y="-209.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Writes</text>
+<text text-anchor="middle" x="227.249" y="-195.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Data</text>
+<text text-anchor="middle" x="227.249" y="-181.7766" font-family="Times,serif"
font-size="14.00" fill="#000000">Externally</text>
+</g>
+<!-- ARCHIVED -->
+<g id="node11" class="node">
+<title>ARCHIVED</title>
+<polygon fill="none" stroke="#000000" points="158.2584,-160.9766
59.9291,-160.9766 59.9291,-124.9766 158.2584,-124.9766 158.2584,-160.9766"/>
+<text text-anchor="middle" x="109.0938" y="-138.1766"
font-family="Times,serif" font-size="16.00" fill="#000000">ARCHIVED</text>
+</g>
+<!-- ARCHIVING->ARCHIVED -->
+<g id="edge13" class="edge">
+<title>ARCHIVING->ARCHIVED</title>
+<path fill="none" stroke="#000000" d="M112.4599,-238.9129C111.823,-220.7593
110.8319,-192.5125 110.0897,-171.3625"/>
+<polygon fill="#000000" stroke="#000000" points="113.5864,-171.2043
109.7378,-161.3332 106.5908,-171.4498 113.5864,-171.2043"/>
+<text text-anchor="middle" x="145.1489" y="-202.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">On</text>
+<text text-anchor="middle" x="145.1489" y="-188.7766"
font-family="Times,serif" font-size="14.00" fill="#000000">Completion</text>
+</g>
+<!-- ARCHIVED->DELETED -->
+<g id="edge14" class="edge">
+<title>ARCHIVED->DELETED</title>
+<path fill="none" stroke="#000000" d="M97.1717,-124.8206C91.9033,-116.7972
85.4092,-106.9074 78.793,-96.8316"/>
+<polygon fill="#000000" stroke="#000000" points="81.6454,-94.799
73.2309,-88.3611 75.7941,-98.6412 81.6454,-94.799"/>
+</g>
+</g>
+</svg>
diff --git a/logservice.html b/logservice.html
index 9bc866c..5c62a69 100644
--- a/logservice.html
+++ b/logservice.html
@@ -202,6 +202,13 @@ an archival of a log is an export of the entire log to a
specific location.</p>
<li>More data can be appended to a log that was exported (but new data would
not be reflected in the exported version of the log).</li>
</ul>
+<h2 id="visualization">Visualization</h2>
+
+<p>To get a visual understanding of the log states, please see the image below:
+<p>
+ <img src="lifecycle.svg" alt="Graphviz view of the logstates"/>“
+</p></p>
+
<h1><a href="/logservice/">LogService</a></h1>
diff --git a/logservice/lifecycle.html b/logservice/lifecycle.html
index f7fb717..b8931de 100644
--- a/logservice/lifecycle.html
+++ b/logservice/lifecycle.html
@@ -194,6 +194,13 @@ an archival of a log is an export of the entire log to a
specific location.</p>
<li>More data can be appended to a log that was exported (but new data would
not be reflected in the exported version of the log).</li>
</ul>
+<h2 id="visualization">Visualization</h2>
+
+<p>To get a visual understanding of the log states, please see the image below:
+<p>
+ <img src="lifecycle.svg" alt="Graphviz view of the logstates"/>“
+</p></p>
+
</div>
<footer>