[arvados] created: 2.5.0-61-g7da8a84dd

git repository hosting git at public.arvados.org
Mon Jan 30 20:44:48 UTC 2023


        at  7da8a84dd3697b2a69fc9fd0671dbe0a996a993b (commit)


commit 7da8a84dd3697b2a69fc9fd0671dbe0a996a993b
Author: Tom Clegg <tom at curii.com>
Date:   Mon Jan 30 15:43:08 2023 -0500

    19624: Container request state transition / lifecycle diagram.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>

diff --git a/doc/api/methods/container_request_lifecycle.svg b/doc/api/methods/container_request_lifecycle.svg
new file mode 100644
index 000000000..f9c4246c6
--- /dev/null
+++ b/doc/api/methods/container_request_lifecycle.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ --><!-- Title: %0 Pages: 1 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="208pt" height="394pt" viewBox="0.00 0.00 208.00 394.40">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 390.4)">
+<title>%0</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-390.4 204,-390.4 204,4 -4,4"/>
+<g id="clust1" class="cluster">
+<title>cluster_draft</title>
+<polygon fill="#d3d3d3" stroke="#d3d3d3" points="24,-284.8 24,-378.4 170,-378.4 170,-284.8 24,-284.8"/>
+<text text-anchor="middle" x="97" y="-361.8" font-family="Times,serif" font-size="14.00" fill="#000000">Draft</text>
+<text text-anchor="middle" x="97" y="-345" font-family="Times,serif" font-size="14.00" fill="#000000">(no container assigned)</text>
+</g>
+<g id="clust2" class="cluster">
+<title>cluster_active</title>
+<polygon fill="#d3d3d3" stroke="#d3d3d3" points="8,-177.6 8,-276.8 137,-276.8 137,-177.6 8,-177.6"/>
+<text text-anchor="middle" x="72.5" y="-260.2" font-family="Times,serif" font-size="14.00" fill="#000000">Active</text>
+<text text-anchor="middle" x="72.5" y="-243.4" font-family="Times,serif" font-size="14.00" fill="#000000">(container assigned)</text>
+</g>
+<g id="clust3" class="cluster">
+<title>cluster_complete</title>
+<polygon fill="#d3d3d3" stroke="#d3d3d3" points="36,-92.8 36,-169.6 106,-169.6 106,-92.8 36,-92.8"/>
+<text text-anchor="middle" x="71" y="-153" font-family="Times,serif" font-size="14.00" fill="#000000">Complete</text>
+</g>
+<g id="clust4" class="cluster">
+<title>cluster_cancelled</title>
+<polygon fill="#d3d3d3" stroke="#d3d3d3" points="121,-8 121,-84.8 192,-84.8 192,-8 121,-8"/>
+<text text-anchor="middle" x="156.5" y="-68.2" font-family="Times,serif" font-size="14.00" fill="#000000">Cancelled</text>
+</g>
+<!-- uncommitted -->
+<g id="node1" class="node">
+<title>uncommitted</title>
+<polygon fill="#ffffff" stroke="#000000" points="140.4888,-328.8 47.5112,-328.8 47.5112,-292.8 140.4888,-292.8 140.4888,-328.8"/>
+<text text-anchor="middle" x="94" y="-306.6" font-family="Times,serif" font-size="14.00" fill="#000000">Uncommitted</text>
+</g>
+<!-- runnable -->
+<g id="node2" class="node">
+<title>runnable</title>
+<polygon fill="#ffffff" stroke="#000000" points="127.5042,-227.0019 48.4958,-227.0019 48.4958,-185.7981 127.5042,-185.7981 127.5042,-227.0019"/>
+<text text-anchor="middle" x="88" y="-210.6" font-family="Times,serif" font-size="14.00" fill="#000000">Committed</text>
+<text text-anchor="middle" x="88" y="-193.8" font-family="Times,serif" font-size="14.00" fill="#000000">priority>0</text>
+</g>
+<!-- uncommitted->runnable -->
+<g id="edge2" class="edge">
+<title>uncommitted->runnable</title>
+<path fill="none" stroke="#006400" d="M92.9549,-292.6149C92.0792,-277.3781 90.8099,-255.2928 89.7753,-237.2901"/>
+<polygon fill="#006400" stroke="#006400" points="93.2661,-237.0274 89.198,-227.2447 86.2776,-237.4291 93.2661,-237.0274"/>
+</g>
+<!-- cancelling -->
+<g id="node5" class="node">
+<title>cancelling</title>
+<polygon fill="none" stroke="#000000" points="195.5042,-139.4019 116.4958,-139.4019 116.4958,-98.1981 195.5042,-98.1981 195.5042,-139.4019"/>
+<text text-anchor="middle" x="156" y="-123" font-family="Times,serif" font-size="14.00" fill="#000000">Committed</text>
+<text text-anchor="middle" x="156" y="-106.2" font-family="Times,serif" font-size="14.00" fill="#000000">priority=0</text>
+</g>
+<!-- uncommitted->cancelling -->
+<g id="edge5" class="edge">
+<title>uncommitted->cancelling</title>
+<path fill="none" stroke="#ff0000" d="M126.836,-292.7271C132.3995,-288.2342 137.4996,-282.9193 141,-276.8 163.53,-237.4134 163.2811,-183.3192 160.2365,-149.7374"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="163.6975,-149.1808 159.1751,-139.5997 156.7355,-149.9098 163.6975,-149.1808"/>
+</g>
+<!-- reqcomplete -->
+<g id="node3" class="node">
+<title>reqcomplete</title>
+<polygon fill="#ffffff" stroke="#000000" points="98,-136.8 44,-136.8 44,-100.8 98,-100.8 98,-136.8"/>
+<text text-anchor="middle" x="71" y="-114.6" font-family="Times,serif" font-size="14.00" fill="#000000">Final</text>
+</g>
+<!-- runnable->reqcomplete -->
+<g id="edge4" class="edge">
+<title>runnable->reqcomplete</title>
+<path fill="none" stroke="#0000ff" d="M83.9712,-185.64C81.7314,-174.0981 78.9124,-159.5722 76.4751,-147.0127"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="79.8796,-146.1839 74.5385,-137.0339 73.0078,-147.5176 79.8796,-146.1839"/>
+</g>
+<!-- runnable->cancelling -->
+<g id="edge1" class="edge">
+<title>runnable->cancelling</title>
+<path fill="none" stroke="#ff0000" d="M104.1151,-185.64C112.9223,-174.2942 123.9679,-160.0648 133.6016,-147.6544"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="136.6335,-149.4565 140.0006,-139.411 131.1039,-145.1641 136.6335,-149.4565"/>
+</g>
+<!-- reqcancelled -->
+<g id="node4" class="node">
+<title>reqcancelled</title>
+<polygon fill="#ffffff" stroke="#000000" points="183,-52 129,-52 129,-16 183,-16 183,-52"/>
+<text text-anchor="middle" x="156" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">Final</text>
+</g>
+<!-- cancelling->reqcancelled -->
+<g id="edge3" class="edge">
+<title>cancelling->reqcancelled</title>
+<path fill="none" stroke="#0000ff" d="M156,-97.8382C156,-87.0986 156,-73.8688 156,-62.2431"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="159.5001,-62.1348 156,-52.1348 152.5001,-62.1349 159.5001,-62.1348"/>
+</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/doc/api/methods/container_requests.html.textile.liquid b/doc/api/methods/container_requests.html.textile.liquid
index d694ec778..9e4bd4eef 100644
--- a/doc/api/methods/container_requests.html.textile.liquid
+++ b/doc/api/methods/container_requests.html.textile.liquid
@@ -64,6 +64,59 @@ table(table table-bordered table-condensed).
 |output_properties|hash|User metadata properties to set on the output collection.  The output collection will also have default properties "type" ("intermediate" or "output") and "container_request" (the uuid of container request that produced the collection).|
 |cumulative_cost|number|Estimated cost of the cloud VMs used to satisfy the request, including retried attempts and completed subrequests, but not including reused containers.|0 if container was reused or VM price information was not available.|
 
+h2(#lifecycle). Container request lifecycle
+
+A container request may be created in the Committed state, or created in the Uncommitted state and then moved into the Committed state.
+
+Once a request is in the Committed state, Arvados locates a suitable existing container or schedules a new one. When the assigned container finishes, the request state changes to Final.
+
+A client may cancel a committed request early (before the assigned container finishes) by setting the request priority to zero.
+
+In the following diagram, the green ("go") and red ("stop") arrows indicate client-initiated transitions, and the blue arrows indicate system-initiated transitions.
+
+!{max-width:40em}{{site.baseurl}}/api/methods/container_request_lifecycle.svg!
+{% comment %}
+# svg generated using https://dreampuf.github.io/
+digraph {
+    subgraph cluster_draft {
+        label = "Draft\n(no container assigned)";
+        style = filled;
+        color = lightgrey;
+        node [color=black] [fillcolor=white] [style=filled] [shape=box];
+        uncommitted [label = "Uncommitted"];
+    }
+    subgraph cluster_active {
+        label = "Active\n(container assigned)";
+        style = filled;
+        color = lightgrey;
+        node [color=black] [fillcolor=white] [style=filled] [shape=box];
+        runnable [label = "Committed\npriority>0"];
+        node [fillcolor=lightgrey];
+        queued -> locked -> running -> complete;
+    }
+    subgraph cluster_complete {
+        label = "Complete";
+        style = filled;
+        color = lightgrey;
+        node [color=black] [fillcolor=white] [style=filled] [shape=box];
+        reqcomplete [label = "Final"];
+    }
+    subgraph cluster_cancelled {
+        label = "Cancelled";
+        style = filled;
+        color = lightgrey;
+        node [color=black] [fillcolor=white] [style=filled] [shape=box];
+        reqcancelled [label = "Final"];
+    }
+    cancelling [label = "Committed\npriority=0"] [shape=box];
+    runnable -> cancelling [color = red];
+    uncommitted -> runnable [color = darkgreen];
+    cancelling -> reqcancelled [color = blue];
+    runnable -> reqcomplete [color = blue];
+    uncommitted -> cancelling [color = red];
+}
+{% endcomment %}
+
 h2(#priority). Priority
 
 The @priority@ field has a range of 0-1000.
@@ -99,7 +152,7 @@ h2(#cancel_container). Canceling a container request
 
 A container request may be canceled by setting its priority to 0, using an update call.
 
-When a container request is canceled, it will still reflect the state of the Container it is associated with via the container_uuid attribute. If that Container is being reused by any other container_requests that are still active, i.e., not yet canceled, that Container may continue to run or be scheduled to run by the system in future. However, if no other container_requests are using that Contianer, then the Container will get canceled as well.
+When a container request is canceled, it will still reflect the state of the Container it is associated with via the container_uuid attribute. If that Container is being reused by any other container_requests that are still active, i.e., not yet canceled, that Container may continue to run or be scheduled to run by the system in future. However, if no other container_requests are using that Container, then the Container will get canceled as well.
 
 h2. Methods
 
diff --git a/doc/architecture/dispatchcloud.html.textile.liquid b/doc/architecture/dispatchcloud.html.textile.liquid
index ae854fc2e..cc3f11d19 100644
--- a/doc/architecture/dispatchcloud.html.textile.liquid
+++ b/doc/architecture/dispatchcloud.html.textile.liquid
@@ -20,7 +20,7 @@ In this diagram, the black edges show interactions involved in starting a VM ins
 !{max-width:40em}{{site.baseurl}}/architecture/dispatchcloud.svg!
 
 {% comment %}
-# svg generated using https://graphviz.it/
+# svg generated using https://dreampuf.github.io/
 digraph {
     subgraph cluster_cloudvm {
         node [color=black] [fillcolor=white] [style=filled];

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list