16347: Add upgrade note.
[arvados.git] / doc / api / methods / jobs.html.textile.liquid
1 ---
2 layout: default
3 navsection: api
4 navmenu: API Methods
5 title: "jobs"
6
7 ...
8 {% comment %}
9 Copyright (C) The Arvados Authors. All rights reserved.
10
11 SPDX-License-Identifier: CC-BY-SA-3.0
12 {% endcomment %}
13
14 p=. *Legacy.  This endpoint is read-only and disabled by default in new installations.*
15
16 API endpoint base: @https://{{ site.arvados_api_host }}/arvados/v1/jobs@
17
18 Object type: @8i9sb@
19
20 Example UUID: @zzzzz-8i9sb-0123456789abcde@
21
22 h2. Resource
23
24 A job describes a work order to be executed by the Arvados cluster.
25
26 Each job has, in addition to the "Common resource fields":{{site.baseurl}}/api/resources.html:
27
28 table(table table-bordered table-condensed).
29 |_. Attribute|_. Type|_. Description|_. Notes|
30 |script|string|The filename of the job script.|This program will be invoked by Crunch for each job task. It is given as a path to an executable file, relative to the @/crunch_scripts@ directory in the Git tree specified by the _repository_ and _script_version_ attributes.|
31 |script_parameters|hash|The input parameters for the job.|Conventionally, one of the parameters is called @"input"@. Typically, some parameter values are collection UUIDs. Ultimately, though, the significance of parameters is left entirely up to the script itself.|
32 |repository|string|Git repository name or URL.|Source of the repository where the given script_version is to be found. This can be given as the name of a locally hosted repository, or as a publicly accessible URL starting with @git://@, @http://@, or @https://@.
33 Examples:
34 @yourusername/yourrepo@
35 @https://github.com/arvados/arvados.git@|
36 |script_version|string|Git commit|During a **create** transaction, this is the Git branch, tag, or hash supplied by the client. Before the job starts, Arvados updates it to the full 40-character SHA-1 hash of the commit used by the job.
37 See "Specifying Git versions":#script_version below for more detail about acceptable ways to specify a commit.|
38 |cancelled_by_client_uuid|string|API client ID|Is null if job has not been cancelled|
39 |cancelled_by_user_uuid|string|Authenticated user ID|Is null if job has not been cancelled|
40 |cancelled_at|datetime|When job was cancelled|Is null if job has not been cancelled|
41 |started_at|datetime|When job started running|Is null if job has not [yet] started|
42 |finished_at|datetime|When job finished running|Is null if job has not [yet] finished|
43 |running|boolean|Whether the job is running||
44 |success|boolean|Whether the job indicated successful completion|Is null if job has not finished|
45 |is_locked_by_uuid|string|UUID of the user who has locked this job|Is null if job is not locked. The system user locks the job when starting the job, in order to prevent job attributes from being altered.|
46 |node_uuids|array|List of UUID strings for node objects that have been assigned to this job||
47 |log|string|Collection UUID|Is null if the job has not finished. After the job runs, the given collection contains a text file with log messages provided by the @arv-crunch-job@ task scheduler as well as the standard error streams provided by the task processes.|
48 |tasks_summary|hash|Summary of task completion states.|Example: @{"done":0,"running":4,"todo":2,"failed":0}@|
49 |output|string|Collection UUID|Is null if the job has not finished.|
50 |nondeterministic|boolean|The job is expected to produce different results if run more than once.|If true, this job will not be considered as a candidate for automatic re-use when submitting subsequent identical jobs.|
51 |submit_id|string|Unique ID provided by client when job was submitted|Optional. This can be used by a client to make the "jobs.create":{{site.baseurl}}/api/methods/jobs.html#create method idempotent.|
52 |priority|string|||
53 |arvados_sdk_version|string|Git commit hash that specifies the SDK version to use from the Arvados repository|This is set by searching the Arvados repository for a match for the arvados_sdk_version runtime constraint.|
54 |docker_image_locator|string|Portable data hash of the collection that contains the Docker image to use|This is set by searching readable collections for a match for the docker_image runtime constraint.|
55 |runtime_constraints|hash|Constraints that must be satisfied by the job/task scheduler in order to run the job.|See below.|
56 |components|hash|Name and uuid pairs representing the child work units of this job. The uuids can be of different object types.|Example components hash: @{"name1": "zzzzz-8i9sb-xyz...", "name2": "zzzzz-d1hrv-xyz...",}@|
57
58 h3(#script_version). Specifying Git versions
59
60 The script_version attribute and arvados_sdk_version runtime constraint are typically given as a branch, tag, or commit hash, but there are many more ways to specify a Git commit. The "specifying revisions" section of the "gitrevisions manual page":http://git-scm.com/docs/gitrevisions.html has a definitive list. Arvados accepts Git versions in any format listed there that names a single commit (not a tree, a blob, or a range of commits). However, some kinds of names can be expected to resolve differently in Arvados than they do in your local repository. For example, <code>HEAD@{1}</code> refers to the local reflog, and @origin/main@ typically refers to a remote branch: neither is likely to work as desired if given as a Git version.
61
62 h3. Runtime constraints
63
64 table(table table-bordered table-condensed).
65 |_. Key|_. Type|_. Description|_. Implemented|
66 |arvados_sdk_version|string|The Git version of the SDKs to use from the Arvados git repository.  See "Specifying Git versions":#script_version for more detail about acceptable ways to specify a commit.  If you use this, you must also specify a @docker_image@ constraint (see below).  In order to install the Python SDK successfully, Crunch must be able to find and run virtualenv inside the container.|&#10003;|
67 |docker_image|string|The Docker image that this Job needs to run.  If specified, Crunch will create a Docker container from this image, and run the Job's script inside that.  The Keep mount and work directories will be available as volumes inside this container.  The image must be uploaded to Arvados using @arv keep docker@.  You may specify the image in any format that Docker accepts, such as @arvados/jobs@, @debian:latest@, or the Docker image id.  Alternatively, you may specify the portable data hash of the image Collection.|&#10003;|
68 |min_nodes|integer||&#10003;|
69 |max_nodes|integer|||
70 |min_cores_per_node|integer|Require that each node assigned to this Job have the specified number of CPU cores|&#10003;|
71 |min_ram_mb_per_node|integer|Require that each node assigned to this Job have the specified amount of real memory (in MiB)|&#10003;|
72 |min_scratch_mb_per_node|integer|Require that each node assigned to this Job have the specified amount of scratch storage available (in MiB)|&#10003;|
73 |max_tasks_per_node|integer|Maximum simultaneous tasks on a single node|&#10003;|
74 |keep_cache_mb_per_task|integer|Size of file data buffer for per-task Keep directory ($TASK_KEEPMOUNT), in MiB.  Default is 256 MiB.  Increase this to reduce cache thrashing in situtations such as accessing multiple large (64+ MiB) files at the same time, or accessing different parts of a large file at the same time.|&#10003;|
75 |min_ram_per_task|integer|Minimum real memory (KiB) per task||
76
77 h2. Methods
78
79 See "Common resource methods":{{site.baseurl}}/api/methods.html for more information about @create@, @delete@, @get@, @list@, and @update@.
80
81 Required arguments are displayed in %{background:#ccffcc}green%.
82
83 h3. cancel
84
85 Cancel a job that is queued or running.
86
87 Arguments:
88
89 table(table table-bordered table-condensed).
90 |_. Argument |_. Type |_. Description |_. Location |_. Example |
91 {background:#ccffcc}.|uuid|string||path||
92
93 h3(#create). create
94
95 Create a new Job.
96
97 Arguments:
98
99 table(table table-bordered table-condensed).
100 |_. Argument |_. Type |_. Description |_. Location |_. Example |
101 {background:#ccffcc}.|job|object|Job resource|request body||
102 |minimum_script_version |string     |Git branch, tag, or commit hash specifying the minimum acceptable script version (earliest ancestor) to consider when deciding whether to re-use a past job.[1]|query|@"c3e86c9"@|
103 |exclude_script_versions|array of strings|Git commit branches, tags, or hashes to exclude when deciding whether to re-use a past job.|query|@["8f03c71","8f03c71"]@
104 @["badtag1","badtag2"]@|
105 |filters|array of arrays|Conditions to find Jobs to reuse.|query||
106 |find_or_create         |boolean    |Before creating, look for an existing job that has identical script, script_version, and script_parameters to those in the present job, has nondeterministic=false, and did not fail (it could be queued, running, or completed). If such a job exists, respond with the existing job instead of submitting a new one.|query|@false@|
107
108 When a job is submitted to the queue using the **create** method, the @script_version@ attribute is updated to a full 40-character Git commit hash based on the current content of the specified repository. If @script_version@ cannot be resolved, the job submission is rejected.
109
110 fn1. See the "note about specifying Git commits":#script_version for more detail.
111
112 h4. Specialized filters
113
114 Special filter operations are available for specific Job columns.
115
116 * @script_version@ @in git@ @REFSPEC@, @arvados_sdk_version@ @in git@ @REFSPEC@<br>Resolve @REFSPEC@ to a list of Git commits, and match jobs with a @script_version@ or @arvados_sdk_version@ in that list.  When creating a job and filtering @script_version@, the search will find commits between @REFSPEC@ and the submitted job's @script_version@; all other searches will find commits between @REFSPEC@ and HEAD.  This list may include parallel branches if there is more than one path between @REFSPEC@ and the end commit in the graph.  Use @not in@ or @not in git@ filters (below) to blacklist specific commits.
117
118 * @script_version@ @not in git@ @REFSPEC@, @arvados_sdk_version@ @not in git@ @REFSPEC@<br>Resolve @REFSPEC@ to a list of Git commits, and match jobs with a @script_version@ or @arvados_sdk_version@ not in that list.
119
120 * @docker_image_locator@ @in docker@ @SEARCH@<br>@SEARCH@ can be a Docker image hash, a repository name, or a repository name and tag separated by a colon (@:@).  The server will find collections that contain a Docker image that match that search criteria, then match jobs with a @docker_image_locator@ in that list.
121
122 * @docker_image_locator@ @not in docker@ @SEARCH@<br>Negate the @in docker@ filter.
123
124 h4. Reusing jobs
125
126 Because Arvados records the exact version of the script, input parameters, and runtime environment that was used to run the job, if the script is deterministic (meaning that the same code version is guaranteed to produce the same outputs from the same inputs) then it is possible to re-use the results of past jobs, and avoid re-running the computation to save time.  Arvados uses the following algorithm to determine if a past job can be re-used:
127
128 notextile. <div class="spaced-out">
129
130 # If @find_or_create@ is false or omitted, create a new job and skip the rest of these steps.
131 # If @filters@ are specified, find jobs that match those filters. If any filters are given, there must be at least one filter on the @repository@ attribute and one on the @script@ attribute: otherwise an error is returned.
132 # If @filters@ are not specified, find jobs with the same @repository@ and @script@, with a @script_version@ between @minimum_script_version@ and @script_version@ inclusively (excluding @excluded_script_versions@), and a @docker_image_locator@ with the latest Collection that matches the submitted job's @docker_image@ constraint.  If the submitted job includes an @arvados_sdk_version@ constraint, jobs must have an @arvados_sdk_version@ between that refspec and HEAD to be found. *This form is deprecated: use filters instead.*
133 # If the found jobs include a completed job, and all found completed jobs have consistent output, return one of them.  Which specific job is returned is undefined.
134 # If the found jobs only include incomplete jobs, return one of them.  Which specific job is returned is undefined.
135 # If no job has been returned so far, create and return a new job.
136
137 </div>
138
139 h4. Examples
140
141 Run the script "crunch_scripts/hash.py" in the repository "you" using the "main" commit.  Arvados should re-use a previous job if the script_version of the previous job is the same as the current "main" commit. This works irrespective of whether the previous job was submitted using the name "main", a different branch name or tag indicating the same commit, a SHA-1 commit hash, etc.
142
143 <notextile><pre>
144 {
145   "job": {
146     "script": "hash.py",
147     "repository": "<b>you</b>/<b>you</b>",
148     "script_version": "main",
149     "script_parameters": {
150       "input": "c1bad4b39ca5a924e481008009d94e32+210"
151     }
152   },
153   "find_or_create": true
154 }
155 </pre></notextile>
156
157 Run using exactly the version "d00220fb38d4b85ca8fc28a8151702a2b9d1dec5". Arvados should re-use a previous job if the "script_version" of that job is also "d00220fb38d4b85ca8fc28a8151702a2b9d1dec5".
158
159 <notextile><pre>
160 {
161   "job": {
162     "script": "hash.py",
163     "repository": "<b>you</b>/<b>you</b>",
164     "script_version": "d00220fb38d4b85ca8fc28a8151702a2b9d1dec5",
165     "script_parameters": {
166       "input": "c1bad4b39ca5a924e481008009d94e32+210"
167     }
168   },
169   "find_or_create": true
170 }
171 </pre></notextile>
172
173 Arvados should re-use a previous job if the "script_version" of the previous job is between "earlier_version_tag" and the "main" commit (inclusive), but not the commit indicated by "blacklisted_version_tag". If there are no previous jobs matching these criteria, run the job using the "main" commit.
174
175 <notextile><pre>
176 {
177   "job": {
178     "script": "hash.py",
179     "repository": "<b>you</b>/<b>you</b>",
180     "script_version": "main",
181     "script_parameters": {
182       "input": "c1bad4b39ca5a924e481008009d94e32+210"
183     }
184   },
185   "minimum_script_version": "earlier_version_tag",
186   "exclude_script_versions": ["blacklisted_version_tag"],
187   "find_or_create": true
188 }
189 </pre></notextile>
190
191 The same behavior, using filters:
192
193 <notextile><pre>
194 {
195   "job": {
196     "script": "hash.py",
197     "repository": "<b>you</b>/<b>you</b>",
198     "script_version": "main",
199     "script_parameters": {
200       "input": "c1bad4b39ca5a924e481008009d94e32+210"
201     }
202   },
203   "filters": [["script", "=", "hash.py"],
204               ["repository", "=", "<b>you</b>/<b>you</b>"],
205               ["script_version", "in git", "earlier_version_tag"],
206               ["script_version", "not in git", "blacklisted_version_tag"]],
207   "find_or_create": true
208 }
209 </pre></notextile>
210
211 Run the script "crunch_scripts/monte-carlo.py" in the repository "you/you" using the current "main" commit. Because it is marked as "nondeterministic", this job will not be considered as a suitable candidate for future job submissions that use the "find_or_create" feature.
212
213 <notextile><pre>
214 {
215   "job": {
216     "script": "monte-carlo.py",
217     "repository": "<b>you</b>/<b>you</b>",
218     "script_version": "main",
219     "nondeterministic": true,
220     "script_parameters": {
221       "input": "c1bad4b39ca5a924e481008009d94e32+210"
222     }
223   }
224 }
225 </pre></notextile>
226
227 h3. delete
228
229 Delete an existing Job.
230
231 Arguments:
232
233 table(table table-bordered table-condensed).
234 |_. Argument |_. Type |_. Description |_. Location |_. Example |
235 {background:#ccffcc}.|uuid|string|The UUID of the Job in question.|path||
236
237 h3. get
238
239 Gets a Job's metadata by UUID.
240
241 Arguments:
242
243 table(table table-bordered table-condensed).
244 |_. Argument |_. Type |_. Description |_. Location |_. Example |
245 {background:#ccffcc}.|uuid|string|The UUID of the Job in question.|path||
246
247 h3. list
248
249 List jobs.
250
251 See "common resource list method.":{{site.baseurl}}/api/methods.html#index
252
253 See the create method documentation for more information about Job-specific filters.
254
255 h3. log_tail_follow
256
257 log_tail_follow jobs
258
259 Arguments:
260
261 table(table table-bordered table-condensed).
262 |_. Argument |_. Type |_. Description |_. Location |_. Example |
263 {background:#ccffcc}.|uuid|string||path||
264 |buffer_size|integer (default 8192)||query||
265
266 h3. queue
267
268 Get the current job queue.
269
270 Arguments:
271
272 table(table table-bordered table-condensed).
273 |_. Argument |_. Type |_. Description |_. Location |_. Example |
274 |order|string||query||
275 |filters|array||query||
276
277 This method is equivalent to the "list method":#list, except that the results are restricted to queued jobs (i.e., jobs that have not yet been started or cancelled) and order defaults to queue priority.
278
279 h3. update
280
281 Update attributes of an existing Job.
282
283 Arguments:
284
285 table(table table-bordered table-condensed).
286 |_. Argument |_. Type |_. Description |_. Location |_. Example |
287 {background:#ccffcc}.|uuid|string|The UUID of the Job in question.|path||
288 |job|object||query||