summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/img/engine_states.pngbin24631 -> 0 bytes
-rw-r--r--doc/source/img/engine_states.svg8
-rw-r--r--doc/source/img/engine_states.txt13
-rw-r--r--doc/source/img/flow_states.pngbin25297 -> 0 bytes
-rw-r--r--doc/source/img/flow_states.svg8
-rw-r--r--doc/source/img/retry_states.pngbin12571 -> 0 bytes
-rw-r--r--doc/source/img/retry_states.svg8
-rw-r--r--doc/source/img/task_states.pngbin10359 -> 0 bytes
-rw-r--r--doc/source/img/task_states.svg8
-rw-r--r--doc/source/states.rst99
-rwxr-xr-xtools/generate_states.sh32
-rwxr-xr-x[-rw-r--r--]tools/state_graph.py137
12 files changed, 205 insertions, 108 deletions
diff --git a/doc/source/img/engine_states.png b/doc/source/img/engine_states.png
deleted file mode 100644
index 3fc83da..0000000
--- a/doc/source/img/engine_states.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/img/engine_states.svg b/doc/source/img/engine_states.svg
new file mode 100644
index 0000000..497c31e
--- /dev/null
+++ b/doc/source/img/engine_states.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: Engines states Pages: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="692pt" height="180pt" viewBox="0.00 0.00 691.60 180.21" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 176.208)"><polygon fill="white" stroke="none" points="-4,4 -4,-176.208 687.6,-176.208 687.6,4 -4,4"/><title>Engines states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="108.6" cy="-80.2084" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="108.6" cy="-80.2084" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="108.6" y="-77.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RESUMING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="243.6" cy="-80.2084" rx="53.5381" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="243.6" cy="-80.2084" rx="53.5381" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="243.6" y="-77.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SCHEDULING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="179.736,-83.7085 189.736,-80.2084 179.736,-76.7085 179.736,-83.7085" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M153.887,-80.2084C162.143,-80.2084 170.914,-80.2084 179.606,-80.2084" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="179.736,-83.7085 189.736,-80.2084 179.736,-76.7085 179.736,-83.7085" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M153.887,-80.2084C162.143,-80.2084 170.914,-80.2084 179.606,-80.2084"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="373.6" cy="-34.2084" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="373.6" cy="-34.2084" rx="39.8775" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="373.6" y="-31.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">WAITING</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="333.581,-51.95 341.808,-45.2741 331.214,-45.3624 333.581,-51.95" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M280.937,-67.1497C296.851,-61.4307 315.591,-54.6961 331.965,-48.8116" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="333.581,-51.95 341.808,-45.2741 331.214,-45.3624 333.581,-51.95" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M280.937,-67.1497C296.851,-61.4307 315.591,-54.6961 331.965,-48.8116"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="634.6" cy="-154.208" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="634.6" cy="-154.208" rx="39.1741" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="634.6" y="-151.408" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUCCESS</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="585.475,-153.356 595.772,-150.859 586.166,-146.39 585.475,-153.356" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M279.687,-93.6583C295.898,-99.4503 315.524,-105.874 333.6,-110.208 421.246,-131.228 525.851,-143.813 585.523,-149.843" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="585.475,-153.356 595.772,-150.859 586.166,-146.39 585.475,-153.356" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M279.687,-93.6583C295.898,-99.4503 315.524,-105.874 333.6,-110.208 421.246,-131.228 525.851,-143.813 585.523,-149.843"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="634.6" cy="-98.2084" rx="48.9176" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="634.6" cy="-98.2084" rx="48.9176" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="634.6" y="-95.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUSPENDED</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="576.031,-103.373 585.955,-99.6641 575.884,-96.3742 576.031,-103.373" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M291.1,-88.8055C304.746,-90.9802 319.729,-93.0311 333.6,-94.2084 417.62,-101.34 515.343,-101.052 575.84,-99.8758" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="576.031,-103.373 585.955,-99.6641 575.884,-96.3742 576.031,-103.373" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M291.1,-88.8055C304.746,-90.9802 319.729,-93.0311 333.6,-94.2084 417.62,-101.34 515.343,-101.052 575.84,-99.8758"/></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="634.6" cy="-41.2084" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="634.6" cy="-41.2084" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="634.6" y="-38.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTED</text></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="588.182,-57.1198 597.066,-51.3481 586.522,-50.3195 588.182,-57.1198" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M297.237,-79.6639C358.257,-78.4014 461.706,-74.3107 549.6,-61.2084 561.879,-59.3781 575.004,-56.639 587.142,-53.7707" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="588.182,-57.1198 597.066,-51.3481 586.522,-50.3195 588.182,-57.1198" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M297.237,-79.6639C358.257,-78.4014 461.706,-74.3107 549.6,-61.2084 561.879,-59.3781 575.004,-56.639 587.142,-53.7707"/></g><g id="node7" class="node"><ellipse fill="none" stroke="black" cx="499.6" cy="-34.2084" rx="49.8222" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="499.6" cy="-34.2084" rx="49.8222" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="499.6" y="-31.4084" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">ANALYZING</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="443.025,-30.9924 453.087,-27.6752 443.153,-23.9936 443.025,-30.9924" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M411.133,-27.9924C421.095,-27.5508 432.118,-27.3831 442.885,-27.4894" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="443.025,-30.9924 453.087,-27.6752 443.153,-23.9936 443.025,-30.9924" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M411.133,-27.9924C421.095,-27.5508 432.118,-27.3831 442.885,-27.4894"/></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="263.406,-52.9427 259.159,-62.6492 268.532,-57.7096 263.406,-52.9427" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M467.663,-20.1636C433.869,-6.86217 378.56,8.87165 333.6,-7.20844 307.002,-16.7213 282.643,-37.9848 266.159,-55.1225" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="263.406,-52.9427 259.159,-62.6492 268.532,-57.7096 263.406,-52.9427" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M467.663,-20.1636C433.869,-6.86217 378.56,8.87165 333.6,-7.20844 307.002,-16.7213 282.643,-37.9848 266.159,-55.1225"/></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="421.247,-37.2687 411.133,-40.4245 421.008,-44.2646 421.247,-37.2687" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M453.087,-40.7417C442.725,-41.0202 431.701,-41.0303 421.291,-40.7721" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="421.247,-37.2687 411.133,-40.4245 421.008,-44.2646 421.247,-37.2687" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M453.087,-40.7417C442.725,-41.0202 431.701,-41.0303 421.291,-40.7721"/></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="597.966,-138.395 608.307,-140.7 601.66,-132.449 597.966,-138.395" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M514.396,-51.6597C530.263,-71.0503 557.729,-102.602 585.6,-125.208 589.948,-128.735 594.764,-132.14 599.619,-135.301" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="597.966,-138.395 608.307,-140.7 601.66,-132.449 597.966,-138.395" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M514.396,-51.6597C530.263,-71.0503 557.729,-102.602 585.6,-125.208 589.948,-128.735 594.764,-132.14 599.619,-135.301"/></g><g id="edge10" class="edge"><polygon fill="black" stroke="black" points="593.323,-82.7112 603.852,-83.8935 596.358,-76.4035 593.323,-82.7112" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M530.448,-48.5713C549.443,-57.7117 574.24,-69.6441 594.76,-79.5187" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="593.323,-82.7112 603.852,-83.8935 596.358,-76.4035 593.323,-82.7112" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M530.448,-48.5713C549.443,-57.7117 574.24,-69.6441 594.76,-79.5187"/></g><g id="edge11" class="edge"><polygon fill="black" stroke="black" points="579.509,-41.8663 589.679,-38.8968 579.877,-34.876 579.509,-41.8663" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M549.369,-36.7752C559.163,-37.2907 569.511,-37.8353 579.475,-38.3597" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="579.509,-41.8663 589.679,-38.8968 579.877,-34.876 579.509,-41.8663" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M549.369,-36.7752C559.163,-37.2907 569.511,-37.8353 579.475,-38.3597"/></g><g id="node8" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-80.2084" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-80.2084" rx="3.6" ry="3.6" style="fill:url(#black);stroke:black;"/><text text-anchor="middle" x="10" y="-67.8084" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:Verdana">start</text></g><g id="edge12" class="edge"><polygon fill="black" stroke="black" points="53.3814,-83.7085 63.3813,-80.2084 53.3813,-76.7085 53.3814,-83.7085" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.3616,-80.2084C31.9737,-80.2084 41.8612,-80.2084 53.1719,-80.2084" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.3814,-83.7085 63.3813,-80.2084 53.3813,-76.7085 53.3814,-83.7085" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.3616,-80.2084C31.9737,-80.2084 41.8612,-80.2084 53.1719,-80.2084"/></g></g>
+</svg>
diff --git a/doc/source/img/engine_states.txt b/doc/source/img/engine_states.txt
deleted file mode 100644
index 3b33255..0000000
--- a/doc/source/img/engine_states.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Created using web sequence diagrams.
-#
-# https://www.websequencediagrams.com/
-
-note over RESUMING
-Running starts here
-end note
-
-RESUMING->SCHEDULING: Resumes and \nschedules initial tasks.
-SCHEDULING->WAITING: Waits for any \nfuture<task> to complete.
-WAITING->WAITING: Continue waiting for \nfuture<task> to complete.
-WAITING->ANALYZING: Analyze future<task> results.
-ANALYZING->SCHEDULING: Schedules next set of tasks.
diff --git a/doc/source/img/flow_states.png b/doc/source/img/flow_states.png
deleted file mode 100644
index 8ee0cb2..0000000
--- a/doc/source/img/flow_states.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/img/flow_states.svg b/doc/source/img/flow_states.svg
new file mode 100644
index 0000000..c6d9825
--- /dev/null
+++ b/doc/source/img/flow_states.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: Flow states Pages: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="672pt" height="307pt" viewBox="0.00 0.00 671.60 307.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 303)"><polygon fill="white" stroke="none" points="-4,4 -4,-303 667.6,-303 667.6,4 -4,4"/><title>Flow states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="103.6" cy="-121" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="103.6" cy="-121" rx="39.8775" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="103.6" y="-118.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">PENDING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="221.6" cy="-178" rx="41.4846" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="221.6" cy="-178" rx="41.4846" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="221.6" y="-175.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RUNNING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="182.787,-163.319 193.306,-164.588 185.874,-157.037 182.787,-163.319" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M131.213,-134.077C146.902,-141.787 166.977,-151.651 184.126,-160.077" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="182.787,-163.319 193.306,-164.588 185.874,-157.037 182.787,-163.319" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M131.213,-134.077C146.902,-141.787 166.977,-151.651 184.126,-160.077"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="484.6" cy="-173" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="484.6" cy="-173" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="484.6" y="-170.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RESUMING</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="429.586,-177.535 439.518,-173.844 429.452,-170.537 429.586,-177.535" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M263.095,-177.224C307.742,-176.369 379.795,-174.989 429.311,-174.04" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="429.586,-177.535 439.518,-173.844 429.452,-170.537 429.586,-177.535" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M263.095,-177.224C307.742,-176.369 379.795,-174.989 429.311,-174.04"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="484.6" cy="-281" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="484.6" cy="-281" rx="38.4712" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="484.6" y="-278.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">FAILURE</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="445.771,-268.95 456.361,-268.626 447.881,-262.275 445.771,-268.95" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M252.793,-190.09C266.643,-198.031 283.529,-207.834 299.6,-215 348.806,-236.942 408.95,-253.841 446.778,-265.598" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="445.771,-268.95 456.361,-268.626 447.881,-262.275 445.771,-268.95" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M252.793,-190.09C266.643,-198.031 283.529,-207.834 299.6,-215 348.806,-236.942 408.95,-253.841 446.778,-265.598"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="484.6" cy="-227" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="484.6" cy="-227" rx="39.1741" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="484.6" y="-224.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUCCESS</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="441.818,-217.643 452.357,-216.564 443.445,-210.835 441.818,-217.643" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M262.809,-180.513C311.536,-187.391 393.203,-202.708 442.38,-214.179" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="441.818,-217.643 452.357,-216.564 443.445,-210.835 441.818,-217.643" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M262.809,-180.513C311.536,-187.391 393.203,-202.708 442.38,-214.179"/></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="484.6" cy="-43" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="484.6" cy="-43" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="484.6" y="-40.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTED</text></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="445.698,-63.5098 453.434,-56.2706 442.872,-57.1055 445.698,-63.5098" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M243.554,-162.423C258.698,-151.523 279.878,-137.002 299.6,-126 313.005,-118.522 394.249,-82.4016 444.194,-60.3479" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="445.698,-63.5098 453.434,-56.2706 442.872,-57.1055 445.698,-63.5098" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M243.554,-162.423C258.698,-151.523 279.878,-137.002 299.6,-126 313.005,-118.522 394.249,-82.4016 444.194,-60.3479"/></g><g id="node7" class="node"><ellipse fill="none" stroke="black" cx="351.6" cy="-18" rx="51.931" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="351.6" cy="-18" rx="51.931" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="351.6" y="-15.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUSPENDING</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="333.098,-45.4799 336.612,-35.4847 327.632,-41.107 333.098,-45.4799" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M236.298,-160.877C258.891,-132.636 304.076,-76.1546 330.362,-43.2976" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="333.098,-45.4799 336.612,-35.4847 327.632,-41.107 333.098,-45.4799" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M236.298,-160.877C258.891,-132.636 304.076,-76.1546 330.362,-43.2976"/></g><g id="node8" class="node"><ellipse fill="none" stroke="black" cx="614.6" cy="-127" rx="48.9176" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="614.6" cy="-127" rx="48.9176" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="614.6" y="-124.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUSPENDED</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="570.732,-146.125 578.959,-139.449 568.364,-139.537 570.732,-146.125" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M518.563,-161.154C534.043,-155.591 552.72,-148.879 569.405,-142.883" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="570.732,-146.125 578.959,-139.449 568.364,-139.537 570.732,-146.125" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M518.563,-161.154C534.043,-155.591 552.72,-148.879 569.405,-142.883"/></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="247.127,-198.213 237.082,-194.846 242.835,-203.742 247.127,-198.213" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M445.998,-278.961C408.127,-271.609 348.469,-254.792 299.6,-233 280.459,-224.465 260.162,-212.19 245.215,-201.159" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="247.127,-198.213 237.082,-194.846 242.835,-203.742 247.127,-198.213" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M445.998,-278.961C408.127,-271.609 348.469,-254.792 299.6,-233 280.459,-224.465 260.162,-212.19 245.215,-201.159"/></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="265.666,-187.657 255.128,-188.751 264.048,-194.467 265.666,-187.657" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M445.576,-224.793C397.515,-218.125 315.031,-202.707 264.987,-191.093" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="265.666,-187.657 255.128,-188.751 264.048,-194.467 265.666,-187.657" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M445.576,-224.793C397.515,-218.125 315.031,-202.707 264.987,-191.093"/></g><g id="edge10" class="edge"><polygon fill="black" stroke="black" points="148.383,-107.375 139.408,-113.004 149.935,-114.201 148.383,-107.375" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M443.333,-50.3114C406.01,-57.1705 348.972,-67.863 299.6,-78 247.898,-88.6154 188.723,-101.813 149.25,-110.767" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="148.383,-107.375 139.408,-113.004 149.935,-114.201 148.383,-107.375" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M443.333,-50.3114C406.01,-57.1705 348.972,-67.863 299.6,-78 247.898,-88.6154 188.723,-101.813 149.25,-110.767"/></g><g id="edge13" class="edge"><polygon fill="black" stroke="black" points="449.534,-154.482 459.623,-157.717 453.753,-148.897 449.534,-154.482" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M362.552,-35.6449C377.281,-60.8182 406.713,-107.676 439.6,-141 443.239,-144.687 447.338,-148.263 451.533,-151.606" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="449.534,-154.482 459.623,-157.717 453.753,-148.897 449.534,-154.482" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M362.552,-35.6449C377.281,-60.8182 406.713,-107.676 439.6,-141 443.239,-144.687 447.338,-148.263 451.533,-151.606"/></g><g id="edge11" class="edge"><polygon fill="black" stroke="black" points="446.52,-265.51 456.709,-268.412 450.553,-259.789 446.52,-265.51" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M355.114,-35.9673C361.837,-78.2857 383.67,-185.79 439.6,-254 442.148,-257.108 445.154,-259.955 448.379,-262.538" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="446.52,-265.51 456.709,-268.412 450.553,-259.789 446.52,-265.51" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M355.114,-35.9673C361.837,-78.2857 383.67,-185.79 439.6,-254 442.148,-257.108 445.154,-259.955 448.379,-262.538"/></g><g id="edge15" class="edge"><polygon fill="black" stroke="black" points="446.853,-211.291 457.067,-214.104 450.836,-205.536 446.853,-211.291" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M357.436,-35.9711C367.614,-71.0273 394.132,-149.515 439.6,-200 442.29,-202.986 445.387,-205.755 448.667,-208.291" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="446.853,-211.291 457.067,-214.104 450.836,-205.536 446.853,-211.291" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M357.436,-35.9711C367.614,-71.0273 394.132,-149.515 439.6,-200 442.29,-202.986 445.387,-205.755 448.667,-208.291"/></g><g id="edge14" class="edge"><polygon fill="black" stroke="black" points="432.998,-36.9062 443.477,-35.3429 434.31,-30.0302 432.998,-36.9062" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M397.316,-26.5337C409.014,-28.7659 421.697,-31.1865 433.648,-33.4672" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="432.998,-36.9062 443.477,-35.3429 434.31,-30.0302 432.998,-36.9062" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M397.316,-26.5337C409.014,-28.7659 421.697,-31.1865 433.648,-33.4672"/></g><g id="edge12" class="edge"><polygon fill="black" stroke="black" points="563.734,-117.501 574.307,-116.83 565.623,-110.761 563.734,-117.501" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M376.193,-34.0612C393.266,-45.1891 417.183,-59.783 439.6,-70 480.449,-88.618 529.181,-104.041 564.667,-114.128" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="563.734,-117.501 574.307,-116.83 565.623,-110.761 563.734,-117.501" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M376.193,-34.0612C393.266,-45.1891 417.183,-59.783 439.6,-70 480.449,-88.618 529.181,-104.041 564.667,-114.128"/></g><g id="edge16" class="edge"><polygon fill="black" stroke="black" points="270.295,-166.897 260.954,-171.898 271.375,-173.813 270.295,-166.897" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M567.384,-131.568C532.288,-135.153 482.852,-140.451 439.6,-146 381.553,-153.447 314.997,-163.485 271.067,-170.319" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="270.295,-166.897 260.954,-171.898 271.375,-173.813 270.295,-166.897" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M567.384,-131.568C532.288,-135.153 482.852,-140.451 439.6,-146 381.553,-153.447 314.997,-163.485 271.067,-170.319"/></g><g id="node9" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-121" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-121" rx="3.6" ry="3.6" style="fill:url(#black);stroke:black;"/><text text-anchor="middle" x="10" y="-108.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:Verdana">start</text></g><g id="edge17" class="edge"><polygon fill="black" stroke="black" points="53.5965,-124.5 63.5964,-121 53.5964,-117.5 53.5965,-124.5" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-121C32.3405,-121 42.3529,-121 53.5516,-121" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.5965,-124.5 63.5964,-121 53.5964,-117.5 53.5965,-124.5" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-121C32.3405,-121 42.3529,-121 53.5516,-121"/></g></g>
+</svg>
diff --git a/doc/source/img/retry_states.png b/doc/source/img/retry_states.png
deleted file mode 100644
index ccab5c6..0000000
--- a/doc/source/img/retry_states.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/img/retry_states.svg b/doc/source/img/retry_states.svg
new file mode 100644
index 0000000..014516e
--- /dev/null
+++ b/doc/source/img/retry_states.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: Retries states Pages: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="644pt" height="159pt" viewBox="0.00 0.00 643.60 159.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 155)"><polygon fill="white" stroke="none" points="-4,4 -4,-155 639.6,-155 639.6,4 -4,4"/><title>Retries states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="103.6" cy="-18" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="103.6" cy="-18" rx="39.8775" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="103.6" y="-15.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">PENDING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="221.6" cy="-60" rx="41.4846" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="221.6" cy="-60" rx="41.4846" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="221.6" y="-57.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RUNNING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="178.519,-48.486 189.113,-48.5996 180.902,-41.9042 178.519,-48.486" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M135.078,-29.035C148.604,-33.9324 164.729,-39.771 179.314,-45.0515" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="178.519,-48.486 189.113,-48.5996 180.902,-41.9042 178.519,-48.486" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M135.078,-29.035C148.604,-33.9324 164.729,-39.771 179.314,-45.0515"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="338.6" cy="-133" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="338.6" cy="-133" rx="38.4712" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="338.6" y="-130.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">FAILURE</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="304.437,-116.094 314.755,-118.498 308.188,-110.184 304.437,-116.094" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M245.872,-74.7726C263.209,-85.7782 287.075,-100.927 306.116,-113.015" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="304.437,-116.094 314.755,-118.498 308.188,-110.184 304.437,-116.094" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M245.872,-74.7726C263.209,-85.7782 287.075,-100.927 306.116,-113.015"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="338.6" cy="-79" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="338.6" cy="-79" rx="39.1741" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="338.6" y="-76.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUCCESS</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="291.179,-74.8779 301.616,-73.0549 292.321,-67.9715 291.179,-74.8779" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M260.574,-66.274C270.486,-67.9116 281.276,-69.6943 291.557,-71.3928" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="291.179,-74.8779 301.616,-73.0549 292.321,-67.9715 291.179,-74.8779" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M260.574,-66.274C270.486,-67.9116 281.276,-69.6943 291.557,-71.3928"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="461.6" cy="-123" rx="48.2143" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="461.6" cy="-123" rx="48.2143" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="461.6" y="-120.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTING</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="404.009,-124.451 413.747,-120.277 403.531,-117.468 404.009,-124.451" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M372.344,-124.22C381.997,-122.917 392.854,-121.798 403.565,-120.973" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="404.009,-124.451 413.747,-120.277 403.531,-117.468 404.009,-124.451" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M372.344,-124.22C381.997,-122.917 392.854,-121.798 403.565,-120.973"/></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="415.902,-110.47 426.496,-110.599 418.294,-103.892 415.902,-110.47" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M369.821,-89.9896C384.081,-95.175 401.365,-101.46 417.009,-107.149" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="415.902,-110.47 426.496,-110.599 418.294,-103.892 415.902,-110.47" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M369.821,-89.9896C384.081,-95.175 401.365,-101.46 417.009,-107.149"/></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="461.6" cy="-60" rx="44.498" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="461.6" cy="-60" rx="44.498" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="461.6" y="-57.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RETRYING</text></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="410.323,-71.4378 419.659,-66.4288 409.237,-64.5225 410.323,-71.4378" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M375.904,-73.2994C386.457,-71.6423 398.185,-69.8007 409.468,-68.0289" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="410.323,-71.4378 419.659,-66.4288 409.237,-64.5225 410.323,-71.4378" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M375.904,-73.2994C386.457,-71.6423 398.185,-69.8007 409.468,-68.0289"/></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="386.373,-132.22 376.561,-136.219 386.725,-139.211 386.373,-132.22" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M420.922,-132.66C409.99,-133.966 398.023,-135.028 386.714,-135.707" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="386.373,-132.22 376.561,-136.219 386.725,-139.211 386.373,-132.22" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M420.922,-132.66C409.99,-133.966 398.023,-135.028 386.714,-135.707"/></g><g id="node7" class="node"><ellipse fill="none" stroke="black" cx="590.6" cy="-59" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="590.6" cy="-59" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="590.6" y="-56.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTED</text></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="554.276,-80.7204 561.631,-73.0946 551.126,-74.4693 554.276,-80.7204" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M491.101,-108.637C509.284,-99.4743 533.034,-87.5057 552.657,-77.617" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="554.276,-80.7204 561.631,-73.0946 551.126,-74.4693 554.276,-80.7204" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M491.101,-108.637C509.284,-99.4743 533.034,-87.5057 552.657,-77.617"/></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="271.307,-50.6546 261.711,-55.1447 272.013,-57.6189 271.307,-50.6546" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M418.433,-55.1445C405.364,-53.8527 390.903,-52.6396 377.6,-52 342.973,-50.3351 334.22,-50.2064 299.6,-52 290.628,-52.4648 281.092,-53.2323 271.898,-54.1127" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="271.307,-50.6546 261.711,-55.1447 272.013,-57.6189 271.307,-50.6546" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M418.433,-55.1445C405.364,-53.8527 390.903,-52.6396 377.6,-52 342.973,-50.3351 334.22,-50.2064 299.6,-52 290.628,-52.4648 281.092,-53.2323 271.898,-54.1127"/></g><g id="edge10" class="edge"><polygon fill="black" stroke="black" points="153.072,-11.9973 143.224,-15.9057 153.36,-18.9914 153.072,-11.9973" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M557.811,-46.4244C543.34,-41.2871 525.849,-35.8834 509.6,-33 382.726,-10.4857 230.113,-12.5073 153.517,-15.4821" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="153.072,-11.9973 143.224,-15.9057 153.36,-18.9914 153.072,-11.9973" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M557.811,-46.4244C543.34,-41.2871 525.849,-35.8834 509.6,-33 382.726,-10.4857 230.113,-12.5073 153.517,-15.4821"/></g><g id="node8" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill:url(#black);stroke:black;"/><text text-anchor="middle" x="10" y="-5.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:Verdana">start</text></g><g id="edge11" class="edge"><polygon fill="black" stroke="black" points="53.5965,-21.5001 63.5964,-18 53.5964,-14.5001 53.5965,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-18C32.3405,-18 42.3529,-18 53.5516,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.5965,-21.5001 63.5964,-18 53.5964,-14.5001 53.5965,-21.5001" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-18C32.3405,-18 42.3529,-18 53.5516,-18"/></g></g>
+</svg>
diff --git a/doc/source/img/task_states.png b/doc/source/img/task_states.png
deleted file mode 100644
index 6654ded..0000000
--- a/doc/source/img/task_states.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/img/task_states.svg b/doc/source/img/task_states.svg
new file mode 100644
index 0000000..f40501a
--- /dev/null
+++ b/doc/source/img/task_states.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: Tasks states Pages: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="644pt" height="121pt" viewBox="0.00 0.00 643.60 121.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 117)"><polygon fill="white" stroke="none" points="-4,4 -4,-117 639.6,-117 639.6,4 -4,4"/><title>Tasks states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="103.6" cy="-18" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="103.6" cy="-18" rx="39.8775" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="103.6" y="-15.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">PENDING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="221.6" cy="-41" rx="41.4846" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="221.6" cy="-41" rx="41.4846" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="221.6" y="-38.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">RUNNING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="173.074,-35.1449 183.564,-33.6567 174.436,-28.2786 173.074,-35.1449" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M140.35,-25.0884C150.85,-27.1702 162.495,-29.4793 173.585,-31.6781" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="173.074,-35.1449 183.564,-33.6567 174.436,-28.2786 173.074,-35.1449" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M140.35,-25.0884C150.85,-27.1702 162.495,-29.4793 173.585,-31.6781"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="338.6" cy="-95" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="338.6" cy="-95" rx="38.4712" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="338.6" y="-92.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">FAILURE</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="300.271,-81.338 310.81,-82.4203 303.246,-75.0018 300.271,-81.338" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M250.438,-54.0719C265.775,-61.2735 284.989,-70.2956 301.471,-78.0351" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="300.271,-81.338 310.81,-82.4203 303.246,-75.0018 300.271,-81.338" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M250.438,-54.0719C265.775,-61.2735 284.989,-70.2956 301.471,-78.0351"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="338.6" cy="-41" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="338.6" cy="-41" rx="39.1741" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="338.6" y="-38.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">SUCCESS</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="289.348,-44.5001 299.348,-41 289.348,-37.5001 289.348,-44.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M263.145,-41C271.604,-41 280.601,-41 289.308,-41" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="289.348,-44.5001 299.348,-41 289.348,-37.5001 289.348,-44.5001" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M263.145,-41C271.604,-41 280.601,-41 289.308,-41"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="461.6" cy="-68" rx="48.2143" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="461.6" cy="-68" rx="48.2143" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="461.6" y="-65.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTING</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="405.391,-77.1725 414.472,-71.7152 403.97,-70.3183 405.391,-77.1725" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M367.36,-83.0248C378.48,-79.8116 391.711,-76.5417 404.663,-73.749" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="405.391,-77.1725 414.472,-71.7152 403.97,-70.3183 405.391,-77.1725" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M367.36,-83.0248C378.48,-79.8116 391.711,-76.5417 404.663,-73.749"/></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="409.41,-60.1635 419.933,-58.9255 410.935,-53.3316 409.41,-60.1635" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M374.274,-48.7371C385.404,-51.2206 397.969,-54.0245 409.998,-56.7086" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="409.41,-60.1635 419.933,-58.9255 410.935,-53.3316 409.41,-60.1635" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M374.274,-48.7371C385.404,-51.2206 397.969,-54.0245 409.998,-56.7086"/></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="386.055,-87.6492 376.891,-92.9664 387.371,-94.5244 386.055,-87.6492" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M428.538,-81.1924C415.767,-84.7318 400.808,-88.2583 386.841,-91.0624" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="386.055,-87.6492 376.891,-92.9664 387.371,-94.5244 386.055,-87.6492" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M428.538,-81.1924C415.767,-84.7318 400.808,-88.2583 386.841,-91.0624"/></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="590.6" cy="-31" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="590.6" cy="-31" rx="45.2009" ry="18" style="fill:url(#none);stroke:black;"/><text text-anchor="middle" x="590.6" y="-28.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:Verdana">REVERTED</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="545.137,-47.5995 553.758,-41.442 543.179,-40.8789 545.137,-47.5995" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M500.017,-57.0989C513.809,-53.0807 529.588,-48.4837 544.022,-44.2786" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="545.137,-47.5995 553.758,-41.442 543.179,-40.8789 545.137,-47.5995" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M500.017,-57.0989C513.809,-53.0807 529.588,-48.4837 544.022,-44.2786"/></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="152.93,-11.5388 143.124,-15.5509 153.292,-18.5295 152.93,-11.5388" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M546.621,-26.5389C503.835,-22.3374 436.262,-16.3482 377.6,-14 289.67,-10.4802 267.569,-11.6558 179.6,-14 171.074,-14.2272 162.01,-14.5994 153.238,-15.0277" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="152.93,-11.5388 143.124,-15.5509 153.292,-18.5295 152.93,-11.5388" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" d="M546.621,-26.5389C503.835,-22.3374 436.262,-16.3482 377.6,-14 289.67,-10.4802 267.569,-11.6558 179.6,-14 171.074,-14.2272 162.01,-14.5994 153.238,-15.0277"/></g><g id="node7" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill:url(#black);stroke:black;"/><text text-anchor="middle" x="10" y="-5.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:Verdana">start</text></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="53.5965,-21.5001 63.5964,-18 53.5964,-14.5001 53.5965,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-18C32.3405,-18 42.3529,-18 53.5516,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.5965,-21.5001 63.5964,-18 53.5964,-14.5001 53.5965,-21.5001" style="fill:url(#black);stroke:black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-18C32.3405,-18 42.3529,-18 53.5516,-18"/></g></g>
+</svg>
diff --git a/doc/source/states.rst b/doc/source/states.rst
index 34841f4..02fcaf1 100644
--- a/doc/source/states.rst
+++ b/doc/source/states.rst
@@ -7,46 +7,40 @@ States
Engine
======
-.. image:: img/engine_states.png
- :height: 265px
- :align: right
+.. image:: img/engine_states.svg
+ :width: 660px
+ :align: left
:alt: Action engine state transitions
-Executing
----------
+**RESUMING** - Prepares flow & atoms to be resumed.
-**RESUMING** - Prepare flow to be resumed.
+**SCHEDULING** - Schedules and submits atoms to be worked on.
-**SCHEDULING** - Schedule nodes to be worked on.
+**WAITING** - Wait for atoms to finish executing.
-**WAITING** - Wait for nodes to finish executing.
+**ANALYZING** - Analyzes and processes result/s of atom completion.
-**ANALYZING** - Analyze and process result/s of node completion.
+**SUCCESS** - Completed successfully.
-End
----
-
-**SUCCESS** - Engine completed successfully.
-
-**REVERTED** - Engine reverting was induced and all nodes were not completed
+**REVERTED** - Reverting was induced and all atoms were **not** completed
successfully.
-**SUSPENDED** - Engine was suspended while running..
+**SUSPENDED** - Suspended while running.
Flow
====
-.. image:: img/flow_states.png
- :height: 400px
- :align: right
+.. image:: img/flow_states.svg
+ :width: 660px
+ :align: left
:alt: Flow state transitions
**PENDING** - A flow starts its life in this state.
**RUNNING** - In this state flow makes a progress, executes and/or reverts its
-tasks.
+atoms.
-**SUCCESS** - Once all tasks have finished successfully the flow transitions to
+**SUCCESS** - Once all atoms have finished successfully the flow transitions to
the SUCCESS state.
**REVERTED** - The flow transitions to this state when it has been reverted
@@ -57,14 +51,14 @@ after the failure.
**SUSPENDING** - In the RUNNING state the flow can be suspended. When this
happens, flow transitions to the SUSPENDING state immediately. In that state
-the engine running the flow waits for running tasks to finish (since the engine
-can not preempt tasks that are active).
+the engine running the flow waits for running atoms to finish (since the engine
+can not preempt atoms that are active).
-**SUSPENDED** - When no tasks are running and all results received so far are
+**SUSPENDED** - When no atoms are running and all results received so far are
saved, the flow transitions from the SUSPENDING state to SUSPENDED. Also it may
-go to the SUCCESS state if all tasks were in fact ran, or to the REVERTED state
-if the flow was reverting and all tasks were reverted while the engine was
-waiting for running tasks to finish, or to the FAILURE state if tasks were run
+go to the SUCCESS state if all atoms were in fact ran, or to the REVERTED state
+if the flow was reverting and all atoms were reverted while the engine was
+waiting for running atoms to finish, or to the FAILURE state if atoms were run
or reverted and some of them failed.
**RESUMING** - When the flow is interrupted 'in a hard way' (e.g. server
@@ -79,24 +73,25 @@ From the SUCCESS, FAILURE or REVERTED states the flow can be ran again (and
thus it goes back into the RUNNING state). One of the possible use cases for
this transition is to allow for alteration of a flow or flow details associated
with a previously ran flow after the flow has finished, and client code wants
-to ensure that each task from this new (potentially updated) flow has its
+to ensure that each atom from this new (potentially updated) flow has its
chance to run.
.. note::
The current code also contains strong checks during each flow state
- transition using the model described above and raises the InvalidState
- exception if an invalid transition is attempted. This exception being
- triggered usually means there is some kind of bug in the engine code or some
- type of misuse/state violation is occurring, and should be reported as such.
+ transition using the model described above and raises the
+ :py:class:`~taskflow.exceptions.InvalidState` exception if an invalid
+ transition is attempted. This exception being triggered usually means there
+ is some kind of bug in the engine code or some type of misuse/state violation
+ is occurring, and should be reported as such.
Task
====
-.. image:: img/task_states.png
- :height: 265px
- :align: right
+.. image:: img/task_states.svg
+ :width: 660px
+ :align: left
:alt: Task state transitions
**PENDING** - When a task is added to a flow, it starts in the PENDING state,
@@ -105,7 +100,8 @@ on to complete. The task transitions to the PENDING state after it was
reverted and its flow was restarted or retried.
**RUNNING** - When flow starts to execute the task, it transitions to the
-RUNNING state, and stays in this state until its execute() method returns.
+RUNNING state, and stays in this state until its
+:py:meth:`execute() <taskflow.task.BaseTask.execute>` method returns.
**SUCCESS** - The task transitions to this state after it was finished
successfully.
@@ -115,20 +111,20 @@ error. When the flow containing this task is being reverted, all its tasks are
walked in particular order.
**REVERTING** - The task transitions to this state when the flow starts to
-revert it and its revert() method is called. Only tasks in the SUCCESS or
-FAILURE state can be reverted. If this method fails (raises exception), task
-goes to the FAILURE state.
+revert it and its :py:meth:`revert() <taskflow.task.BaseTask.revert>` method
+is called. Only tasks in the SUCCESS or FAILURE state can be reverted. If this
+method fails (raises exception), the task goes to the FAILURE state.
-**REVERTED** - The task that has been reverted appears it this state.
+**REVERTED** - A task that has been reverted appears in this state.
Retry
=====
-.. image:: img/retry_states.png
- :height: 275px
- :align: right
- :alt: Task state transitions
+.. image:: img/retry_states.svg
+ :width: 660px
+ :align: left
+ :alt: Retry state transitions
Retry has the same states as a task and one additional state.
@@ -138,7 +134,8 @@ on to complete. The retry transitions to the PENDING state after it was
reverted and its flow was restarted or retried.
**RUNNING** - When flow starts to execute the retry, it transitions to the
-RUNNING state, and stays in this state until its execute() method returns.
+RUNNING state, and stays in this state until its
+:py:meth:`execute() <taskflow.retry.Retry.execute>` method returns.
**SUCCESS** - The retry transitions to this state after it was finished
successfully.
@@ -148,14 +145,12 @@ error. When the flow containing this retry is being reverted, all its tasks are
walked in particular order.
**REVERTING** - The retry transitions to this state when the flow starts to
-revert it and its revert() method is called. Only retries in SUCCESS or FAILURE
-state can be reverted. If this method fails (raises exception), task goes to
-the FAILURE.
+revert it and its :py:meth:`revert() <taskflow.retry.Retry.revert>` method is
+called. Only retries in SUCCESS or FAILURE state can be reverted. If this
+method fails (raises exception), the retry goes to the FAILURE state.
-**REVERTED** - The retry that has been reverted appears it this state.
+**REVERTED** - A retry that has been reverted appears in this state.
**RETRYING** - If flow that is managed by the current retry was failed and
-reverted, the retry prepares it for the next run and transitions to the
+reverted, the engine prepares it for the next run and transitions to the
RETRYING state.
-
-
diff --git a/tools/generate_states.sh b/tools/generate_states.sh
new file mode 100755
index 0000000..2da7581
--- /dev/null
+++ b/tools/generate_states.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -u
+xsltproc=`which xsltproc`
+if [ -z "$xsltproc" ]; then
+ echo "Please install xsltproc before continuing."
+ exit 1
+fi
+
+set -e
+if [ ! -d "$PWD/.diagram-tools" ]; then
+ git clone "https://github.com/vidarh/diagram-tools.git" "$PWD/.diagram-tools"
+fi
+
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+img_dir="$script_dir/../doc/source/img"
+
+echo "---- Updating task state diagram ----"
+python $script_dir/state_graph.py -t -f /tmp/states.svg
+$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/task_states.svg
+
+echo "---- Updating flow state diagram ----"
+python $script_dir/state_graph.py -f /tmp/states.svg
+$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/flow_states.svg
+
+echo "---- Updating engine state diagram ----"
+python $script_dir/state_graph.py -e -f /tmp/states.svg
+$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/engine_states.svg
+
+echo "---- Updating retry state diagram ----"
+python $script_dir/state_graph.py -r -f /tmp/states.svg
+$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/retry_states.svg
diff --git a/tools/state_graph.py b/tools/state_graph.py
index f6a2057..77b8563 100644..100755
--- a/tools/state_graph.py
+++ b/tools/state_graph.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
+import optparse
import os
import sys
@@ -7,41 +8,13 @@ top_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),
os.pardir))
sys.path.insert(0, top_dir)
-import optparse
-import subprocess
-import tempfile
+import networkx as nx
+
+# To get this installed you may have to follow:
+# https://code.google.com/p/pydot/issues/detail?id=93 (until fixed).
+import pydot
from taskflow import states
-from taskflow.types import graph as gr
-
-
-def mini_exec(cmd, ok_codes=(0,)):
- stdout = subprocess.PIPE
- stderr = subprocess.PIPE
- proc = subprocess.Popen(cmd, stdout=stdout, stderr=stderr, stdin=None)
- (stdout, stderr) = proc.communicate()
- rc = proc.returncode
- if rc not in ok_codes:
- raise RuntimeError("Could not run %s [%s]\nStderr: %s"
- % (cmd, rc, stderr))
- return (stdout, stderr)
-
-
-def make_svg(graph, output_filename, output_format):
- # NOTE(harlowja): requires pydot!
- gdot = graph.export_to_dot()
- if output_format == 'dot':
- output = gdot
- elif output_format in ('svg', 'svgz', 'png'):
- with tempfile.NamedTemporaryFile(suffix=".dot") as fh:
- fh.write(gdot)
- fh.flush()
- cmd = ['dot', '-T%s' % output_format, fh.name]
- output, _stderr = mini_exec(cmd)
- else:
- raise ValueError('Unknown format: %s' % output_filename)
- with open(output_filename, "wb") as fh:
- fh.write(output)
def main():
@@ -52,6 +25,14 @@ def main():
action='store_true',
help="use task state transitions",
default=False)
+ parser.add_option("-r", "--retries", dest="retries",
+ action='store_true',
+ help="use retry state transitions",
+ default=False)
+ parser.add_option("-e", "--engines", dest="engines",
+ action='store_true',
+ help="use engine state transitions",
+ default=False)
parser.add_option("-T", "--format", dest="format",
help="output in given format",
default='svg')
@@ -60,20 +41,90 @@ def main():
if options.filename is None:
options.filename = 'states.%s' % options.format
- g = gr.DiGraph(name="State transitions")
- if not options.tasks:
- source = states._ALLOWED_FLOW_TRANSITIONS
+ types = [options.engines, options.retries, options.tasks]
+ if sum([int(i) for i in types]) > 1:
+ parser.error("Only one of task/retry/engines may be specified.")
+
+ disallowed = set()
+ start_node = states.PENDING
+ if options.tasks:
+ source = list(states._ALLOWED_TASK_TRANSITIONS)
+ source_type = "Tasks"
+ disallowed.add(states.RETRYING)
+ elif options.retries:
+ source = list(states._ALLOWED_TASK_TRANSITIONS)
+ source_type = "Retries"
+ elif options.engines:
+ # TODO(harlowja): place this in states.py
+ source = [
+ (states.RESUMING, states.SCHEDULING),
+ (states.SCHEDULING, states.WAITING),
+ (states.WAITING, states.ANALYZING),
+ (states.ANALYZING, states.SCHEDULING),
+ (states.ANALYZING, states.WAITING),
+ ]
+ for u in (states.SCHEDULING, states.ANALYZING):
+ for v in (states.SUSPENDED, states.SUCCESS, states.REVERTED):
+ source.append((u, v))
+ source_type = "Engines"
+ start_node = states.RESUMING
else:
- source = states._ALLOWED_TASK_TRANSITIONS
+ source = list(states._ALLOWED_FLOW_TRANSITIONS)
+ source_type = "Flow"
+
+ transitions = nx.DiGraph()
for (u, v) in source:
- if not g.has_node(u):
- g.add_node(u)
- if not g.has_node(v):
- g.add_node(v)
- g.add_edge(u, v)
- make_svg(g, options.filename, options.format)
+ if u not in disallowed:
+ transitions.add_node(u)
+ if v not in disallowed:
+ transitions.add_node(v)
+ for (u, v) in source:
+ if not transitions.has_node(u) or not transitions.has_node(v):
+ continue
+ transitions.add_edge(u, v)
+
+ graph_name = "%s states" % source_type
+ g = pydot.Dot(graph_name=graph_name, rankdir='LR',
+ nodesep='0.25', overlap='false',
+ ranksep="0.5", size="11x8.5",
+ splines='true', ordering='in')
+ node_attrs = {
+ 'fontsize': '11',
+ }
+ nodes = {}
+ nodes_order = []
+ edges_added = []
+ for (u, v) in nx.bfs_edges(transitions, source=start_node):
+ if u not in nodes:
+ nodes[u] = pydot.Node(u, **node_attrs)
+ g.add_node(nodes[u])
+ nodes_order.append(u)
+ if v not in nodes:
+ nodes[v] = pydot.Node(v, **node_attrs)
+ g.add_node(nodes[v])
+ nodes_order.append(v)
+ for u in nodes_order:
+ for v in transitions.successors_iter(u):
+ if (u, v) not in edges_added:
+ g.add_edge(pydot.Edge(nodes[u], nodes[v]))
+ edges_added.append((u, v))
+ start = pydot.Node("__start__", shape="point", width="0.1",
+ xlabel='start', fontcolor='green', **node_attrs)
+ g.add_node(start)
+ g.add_edge(pydot.Edge(start, nodes[start_node], style='dotted'))
+
+ print("*" * len(graph_name))
+ print(graph_name)
+ print("*" * len(graph_name))
+ print(g.to_string().strip())
+
+ g.write(options.filename, format=options.format)
print("Created %s at '%s'" % (options.format, options.filename))
+ # To make the svg more pretty use the following:
+ # $ xsltproc ../diagram-tools/notugly.xsl ./states.svg > pretty-states.svg
+ # Get diagram-tools from https://github.com/vidarh/diagram-tools.git
+
if __name__ == '__main__':
main()