2016-03-29 09:29:21 -04:00
|
|
|
[[tasks]]
|
|
|
|
== Task Management API
|
|
|
|
|
2017-07-18 08:06:22 -04:00
|
|
|
beta[The Task Management API is new and should still be considered a beta feature. The API may change in ways that are not backwards compatible]
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
[float]
|
|
|
|
=== Current Tasks Information
|
|
|
|
|
|
|
|
The task management API allows to retrieve information about the tasks currently
|
|
|
|
executing on one or more nodes in the cluster.
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-04-29 10:42:03 -04:00
|
|
|
GET _tasks <1>
|
|
|
|
GET _tasks?nodes=nodeId1,nodeId2 <2>
|
|
|
|
GET _tasks?nodes=nodeId1,nodeId2&actions=cluster:* <3>
|
2016-03-29 09:29:21 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
<1> Retrieves all tasks currently running on all nodes in the cluster.
|
|
|
|
<2> Retrieves all tasks running on nodes `nodeId1` and `nodeId2`. See <<cluster-nodes>> for more info about how to select individual nodes.
|
|
|
|
<3> Retrieves all cluster-related tasks running on nodes `nodeId1` and `nodeId2`.
|
|
|
|
|
|
|
|
The result will look similar to the following:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"nodes" : {
|
|
|
|
"oTUltX4IQMOUUVeiohTt8A" : {
|
2016-09-16 08:32:03 -04:00
|
|
|
"name" : "H5dfFeA",
|
2016-03-29 09:29:21 -04:00
|
|
|
"transport_address" : "127.0.0.1:9300",
|
|
|
|
"host" : "127.0.0.1",
|
|
|
|
"ip" : "127.0.0.1:9300",
|
|
|
|
"tasks" : {
|
|
|
|
"oTUltX4IQMOUUVeiohTt8A:124" : {
|
|
|
|
"node" : "oTUltX4IQMOUUVeiohTt8A",
|
|
|
|
"id" : 124,
|
|
|
|
"type" : "direct",
|
|
|
|
"action" : "cluster:monitor/tasks/lists[n]",
|
|
|
|
"start_time_in_millis" : 1458585884904,
|
|
|
|
"running_time_in_nanos" : 47402,
|
2016-03-31 18:41:45 -04:00
|
|
|
"cancellable" : false,
|
2016-03-29 09:29:21 -04:00
|
|
|
"parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
|
|
|
|
},
|
|
|
|
"oTUltX4IQMOUUVeiohTt8A:123" : {
|
|
|
|
"node" : "oTUltX4IQMOUUVeiohTt8A",
|
|
|
|
"id" : 123,
|
|
|
|
"type" : "transport",
|
|
|
|
"action" : "cluster:monitor/tasks/lists",
|
|
|
|
"start_time_in_millis" : 1458585884904,
|
2016-03-31 18:41:45 -04:00
|
|
|
"running_time_in_nanos" : 236042,
|
|
|
|
"cancellable" : false
|
2016-03-29 09:29:21 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2017-08-30 03:30:36 -04:00
|
|
|
// NOTCONSOLE
|
|
|
|
// We can't test tasks output
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2016-05-31 19:44:01 -04:00
|
|
|
It is also possible to retrieve information for a particular task:
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2018-05-08 14:23:32 -04:00
|
|
|
GET _tasks/task_id <1>
|
2016-03-29 09:29:21 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2018-05-08 14:23:32 -04:00
|
|
|
// TEST[s/task_id/node_id:1/]
|
2016-05-31 19:44:01 -04:00
|
|
|
// TEST[catch:missing]
|
|
|
|
|
|
|
|
<1> This will return a 404 if the task isn't found.
|
|
|
|
|
|
|
|
Or to retrieve all children of a particular task:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2018-05-08 14:23:32 -04:00
|
|
|
GET _tasks?parent_task_id=parent_task_id <1>
|
2016-05-31 19:44:01 -04:00
|
|
|
--------------------------------------------------
|
|
|
|
// CONSOLE
|
2018-05-08 14:23:32 -04:00
|
|
|
// TEST[s/=parent_task_id/=node_id:1/]
|
2016-05-31 19:44:01 -04:00
|
|
|
|
|
|
|
<1> This won't return a 404 if the parent isn't found.
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2017-01-06 10:24:52 -05:00
|
|
|
You can also use the `detailed` request parameter to get more information about
|
|
|
|
the running tasks. This is useful for telling one task from another but is more
|
|
|
|
costly to execute. For example, fetching all searches using the `detailed`
|
|
|
|
request parameter:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
GET _tasks?actions=*search&detailed
|
|
|
|
--------------------------------------------------
|
|
|
|
// CONSOLE
|
|
|
|
|
|
|
|
might look like:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"nodes" : {
|
|
|
|
"oTUltX4IQMOUUVeiohTt8A" : {
|
|
|
|
"name" : "H5dfFeA",
|
|
|
|
"transport_address" : "127.0.0.1:9300",
|
|
|
|
"host" : "127.0.0.1",
|
|
|
|
"ip" : "127.0.0.1:9300",
|
|
|
|
"tasks" : {
|
|
|
|
"oTUltX4IQMOUUVeiohTt8A:464" : {
|
|
|
|
"node" : "oTUltX4IQMOUUVeiohTt8A",
|
|
|
|
"id" : 464,
|
|
|
|
"type" : "transport",
|
|
|
|
"action" : "indices:data/read/search",
|
|
|
|
"description" : "indices[test], types[test], search_type[QUERY_THEN_FETCH], source[{\"query\":...}]",
|
|
|
|
"start_time_in_millis" : 1483478610008,
|
|
|
|
"running_time_in_nanos" : 13991383,
|
|
|
|
"cancellable" : true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2017-08-30 03:30:36 -04:00
|
|
|
// NOTCONSOLE
|
|
|
|
// We can't test tasks output
|
2017-01-06 10:24:52 -05:00
|
|
|
|
|
|
|
The new `description` field contains human readable text that identifies the
|
|
|
|
particular request that the task is performing such as identifying the search
|
|
|
|
request being performed by a search task like the example above. Other kinds of
|
|
|
|
task have have different descriptions, like <<docs-reindex,`_reindex`>> which
|
|
|
|
has the search and the destination, or <<docs-bulk,`_bulk`>> which just has the
|
|
|
|
number of requests and the destination indices. Many requests will only have an
|
|
|
|
empty description because more detailed information about the request is not
|
|
|
|
easily available or particularly helpful in identifying the request.
|
|
|
|
|
|
|
|
The task API can also be used to wait for completion of a particular task. The
|
|
|
|
following call will block for 10 seconds or until the task with id
|
|
|
|
`oTUltX4IQMOUUVeiohTt8A:12345` is completed.
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-04-29 10:42:03 -04:00
|
|
|
GET _tasks/oTUltX4IQMOUUVeiohTt8A:12345?wait_for_completion=true&timeout=10s
|
2016-03-29 09:29:21 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2016-05-31 19:44:01 -04:00
|
|
|
// TEST[catch:missing]
|
|
|
|
|
|
|
|
You can also wait for all tasks for certain action types to finish. This
|
|
|
|
command will wait for all `reindex` tasks to finish:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
GET _tasks?actions=*reindex&wait_for_completion=true&timeout=10s
|
|
|
|
--------------------------------------------------
|
|
|
|
// CONSOLE
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2017-01-06 10:24:52 -05:00
|
|
|
Tasks can be also listed using _cat version of the list tasks command, which
|
|
|
|
accepts the same arguments as the standard list tasks command.
|
2016-04-01 17:23:12 -04:00
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-04-29 10:42:03 -04:00
|
|
|
GET _cat/tasks
|
2017-01-06 10:24:52 -05:00
|
|
|
GET _cat/tasks?detailed
|
2016-04-01 17:23:12 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
[float]
|
2016-10-25 18:27:33 -04:00
|
|
|
[[task-cancellation]]
|
2016-03-29 09:29:21 -04:00
|
|
|
=== Task Cancellation
|
|
|
|
|
|
|
|
If a long-running task supports cancellation, it can be cancelled by the following command:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2017-03-30 14:21:21 -04:00
|
|
|
POST _tasks/node_id:task_id/_cancel
|
2016-03-29 09:29:21 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2017-03-30 14:21:21 -04:00
|
|
|
// TEST[s/task_id/1/]
|
2016-03-29 09:29:21 -04:00
|
|
|
|
|
|
|
The task cancellation command supports the same task selection parameters as the list tasks command, so multiple tasks
|
|
|
|
can be cancelled at the same time. For example, the following command will cancel all reindex tasks running on the
|
|
|
|
nodes `nodeId1` and `nodeId2`.
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-10-04 12:45:29 -04:00
|
|
|
POST _tasks/_cancel?nodes=nodeId1,nodeId2&actions=*reindex
|
2016-03-29 09:29:21 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2016-03-24 22:59:52 -04:00
|
|
|
[float]
|
|
|
|
=== Task Grouping
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2016-03-24 22:59:52 -04:00
|
|
|
The task lists returned by task API commands can be grouped either by nodes (default) or by parent tasks using the `group_by` parameter.
|
|
|
|
The following command will change the grouping to parent tasks:
|
2016-03-29 09:29:21 -04:00
|
|
|
|
2016-03-24 22:59:52 -04:00
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-04-29 10:42:03 -04:00
|
|
|
GET _tasks?group_by=parents
|
2016-03-24 22:59:52 -04:00
|
|
|
--------------------------------------------------
|
2016-05-09 09:42:23 -04:00
|
|
|
// CONSOLE
|
Add ability to associate an ID with tasks (#27764)
Adds support for capturing the X-Opaque-Id header from a REST request and storing it's value in the tasks that this request started. It works for all user-initiated tasks (not only search).
Closes #23250
Usage:
```
$ curl -H "X-Opaque-Id: imotov" -H "foo:bar" "localhost:9200/_tasks?pretty&group_by=parents"
{
"tasks" : {
"7qrTVbiDQKiZfubUP7DPkg:6998" : {
"node" : "7qrTVbiDQKiZfubUP7DPkg",
"id" : 6998,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1513029940042,
"running_time_in_nanos" : 266794,
"cancellable" : false,
"headers" : {
"X-Opaque-Id" : "imotov"
},
"children" : [
{
"node" : "V-PuCjPhRp2ryuEsNw6V1g",
"id" : 6088,
"type" : "netty",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1513029940043,
"running_time_in_nanos" : 67785,
"cancellable" : false,
"parent_task_id" : "7qrTVbiDQKiZfubUP7DPkg:6998",
"headers" : {
"X-Opaque-Id" : "imotov"
}
},
{
"node" : "7qrTVbiDQKiZfubUP7DPkg",
"id" : 6999,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1513029940043,
"running_time_in_nanos" : 98754,
"cancellable" : false,
"parent_task_id" : "7qrTVbiDQKiZfubUP7DPkg:6998",
"headers" : {
"X-Opaque-Id" : "imotov"
}
}
]
}
}
}
```
2018-01-12 15:34:17 -05:00
|
|
|
|
|
|
|
The grouping can be disabled by specifying `none` as a `group_by` parameter:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
GET _tasks?group_by=none
|
|
|
|
--------------------------------------------------
|
|
|
|
// CONSOLE
|
|
|
|
|
|
|
|
[float]
|
|
|
|
=== Identifying running tasks
|
|
|
|
|
|
|
|
The `X-Opaque-Id` header, when provided on the HTTP request header, is going to be returned as a header in the response as well as
|
|
|
|
in the `headers` field for in the task information. This allows to track certain calls, or associate certain tasks with
|
|
|
|
a the client that started them:
|
|
|
|
|
|
|
|
[source,sh]
|
|
|
|
--------------------------------------------------
|
|
|
|
curl -i -H "X-Opaque-Id: 123456" "http://localhost:9200/_tasks?group_by=parents"
|
|
|
|
--------------------------------------------------
|
|
|
|
// NOTCONSOLE
|
|
|
|
|
|
|
|
The result will look similar to the following:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
HTTP/1.1 200 OK
|
|
|
|
X-Opaque-Id: 123456 <1>
|
|
|
|
content-type: application/json; charset=UTF-8
|
|
|
|
content-length: 831
|
|
|
|
|
|
|
|
{
|
|
|
|
"tasks" : {
|
|
|
|
"u5lcZHqcQhu-rUoFaqDphA:45" : {
|
|
|
|
"node" : "u5lcZHqcQhu-rUoFaqDphA",
|
|
|
|
"id" : 45,
|
|
|
|
"type" : "transport",
|
|
|
|
"action" : "cluster:monitor/tasks/lists",
|
|
|
|
"start_time_in_millis" : 1513823752749,
|
|
|
|
"running_time_in_nanos" : 293139,
|
|
|
|
"cancellable" : false,
|
|
|
|
"headers" : {
|
|
|
|
"X-Opaque-Id" : "123456" <2>
|
|
|
|
},
|
|
|
|
"children" : [
|
|
|
|
{
|
|
|
|
"node" : "u5lcZHqcQhu-rUoFaqDphA",
|
|
|
|
"id" : 46,
|
|
|
|
"type" : "direct",
|
|
|
|
"action" : "cluster:monitor/tasks/lists[n]",
|
|
|
|
"start_time_in_millis" : 1513823752750,
|
|
|
|
"running_time_in_nanos" : 92133,
|
|
|
|
"cancellable" : false,
|
|
|
|
"parent_task_id" : "u5lcZHqcQhu-rUoFaqDphA:45",
|
|
|
|
"headers" : {
|
|
|
|
"X-Opaque-Id" : "123456" <3>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
|
|
|
// NOTCONSOLE
|
|
|
|
|
|
|
|
<1> id as a part of the response header
|
|
|
|
<2> id for the tasks that was initiated by the REST request
|
|
|
|
<3> the child task of the task initiated by the REST request
|