Skip to content

Commit 7aa8107

Browse files
committed
Merge branch 'master' into hl-rest-get-template
2 parents a2dbe0a + d6a4c14 commit 7aa8107

File tree

129 files changed

+5610
-2301
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+5610
-2301
lines changed

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,9 @@ subprojects {
205205
"org.elasticsearch.gradle:build-tools:${version}": ':build-tools',
206206
"org.elasticsearch:rest-api-spec:${version}": ':rest-api-spec',
207207
"org.elasticsearch:elasticsearch:${version}": ':server',
208-
"org.elasticsearch:elasticsearch-cli:${version}": ':server:cli',
209-
"org.elasticsearch:elasticsearch-core:${version}": ':libs:elasticsearch-core',
210-
"org.elasticsearch:elasticsearch-nio:${version}": ':libs:elasticsearch-nio',
208+
"org.elasticsearch:elasticsearch-cli:${version}": ':libs:cli',
209+
"org.elasticsearch:elasticsearch-core:${version}": ':libs:core',
210+
"org.elasticsearch:elasticsearch-nio:${version}": ':libs:nio',
211211
"org.elasticsearch:elasticsearch-x-content:${version}": ':libs:x-content',
212212
"org.elasticsearch:elasticsearch-secure-sm:${version}": ':libs:secure-sm',
213213
"org.elasticsearch.client:elasticsearch-rest-client:${version}": ':client:rest',

client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.http.entity.ContentType;
3030
import org.apache.lucene.util.BytesRef;
3131
import org.elasticsearch.action.DocWriteRequest;
32+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
3233
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
3334
import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequest;
3435
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
@@ -109,6 +110,17 @@ private RequestConverters() {
109110
// Contains only status utility methods
110111
}
111112

113+
static Request cancelTasks(CancelTasksRequest cancelTasksRequest) {
114+
Request request = new Request(HttpPost.METHOD_NAME, "/_tasks/_cancel");
115+
Params params = new Params(request);
116+
params.withTimeout(cancelTasksRequest.getTimeout())
117+
.withTaskId(cancelTasksRequest.getTaskId())
118+
.withNodes(cancelTasksRequest.getNodes())
119+
.withParentTaskId(cancelTasksRequest.getParentTaskId())
120+
.withActions(cancelTasksRequest.getActions());
121+
return request;
122+
}
123+
112124
static Request delete(DeleteRequest deleteRequest) {
113125
String endpoint = endpoint(deleteRequest.index(), deleteRequest.type(), deleteRequest.id());
114126
Request request = new Request(HttpDelete.METHOD_NAME, endpoint);
@@ -1081,6 +1093,13 @@ Params withActions(String[] actions) {
10811093
return this;
10821094
}
10831095

1096+
Params withTaskId(TaskId taskId) {
1097+
if (taskId != null && taskId.isSet()) {
1098+
return putParam("task_id", taskId.toString());
1099+
}
1100+
return this;
1101+
}
1102+
10841103
Params withParentTaskId(TaskId parentTaskId) {
10851104
if (parentTaskId != null && parentTaskId.isSet()) {
10861105
return putParam("parent_task_id", parentTaskId.toString());

client/rest-high-level/src/main/java/org/elasticsearch/client/TasksClient.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
package org.elasticsearch.client;
2121

2222
import org.elasticsearch.action.ActionListener;
23+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
24+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksResponse;
2325
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
2426
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
2527

@@ -65,4 +67,45 @@ public void listAsync(ListTasksRequest request, RequestOptions options, ActionLi
6567
restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::listTasks, options,
6668
ListTasksResponse::fromXContent, listener, emptySet());
6769
}
70+
71+
/**
72+
* Cancel one or more cluster tasks using the Task Management API.
73+
*
74+
* See
75+
* <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tasks.html"> Task Management API on elastic.co</a>
76+
* @param cancelTasksRequest the request
77+
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
78+
* @return the response
79+
* @throws IOException in case there is a problem sending the request or parsing back the response
80+
*
81+
*/
82+
public CancelTasksResponse cancel(CancelTasksRequest cancelTasksRequest, RequestOptions options ) throws IOException {
83+
return restHighLevelClient.performRequestAndParseEntity(
84+
cancelTasksRequest,
85+
RequestConverters::cancelTasks,
86+
options,
87+
parser -> CancelTasksResponse.fromXContent(parser),
88+
emptySet()
89+
);
90+
}
91+
92+
/**
93+
* Asynchronously cancel one or more cluster tasks using the Task Management API.
94+
*
95+
* See
96+
* <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tasks.html"> Task Management API on elastic.co</a>
97+
* @param cancelTasksRequest the request
98+
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
99+
* @param listener the listener to be notified upon request completion
100+
*/
101+
public void cancelAsync(CancelTasksRequest cancelTasksRequest, RequestOptions options, ActionListener<CancelTasksResponse> listener) {
102+
restHighLevelClient.performRequestAsyncAndParseEntity(
103+
cancelTasksRequest,
104+
RequestConverters::cancelTasks,
105+
options,
106+
parser -> CancelTasksResponse.fromXContent(parser),
107+
listener,
108+
emptySet()
109+
);
110+
}
68111
}

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.apache.http.util.EntityUtils;
3030
import org.elasticsearch.action.ActionRequestValidationException;
3131
import org.elasticsearch.action.DocWriteRequest;
32+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
33+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksResponse;
3234
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
3335
import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequest;
3436
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
@@ -1589,6 +1591,23 @@ public void testIndexPutSettings() throws IOException {
15891591
assertEquals(expectedParams, request.getParameters());
15901592
}
15911593

1594+
public void testCancelTasks() {
1595+
CancelTasksRequest request = new CancelTasksRequest();
1596+
Map<String, String> expectedParams = new HashMap<>();
1597+
TaskId taskId = new TaskId(randomAlphaOfLength(5), randomNonNegativeLong());
1598+
TaskId parentTaskId = new TaskId(randomAlphaOfLength(5), randomNonNegativeLong());
1599+
request.setTaskId(taskId);
1600+
request.setParentTaskId(parentTaskId);
1601+
expectedParams.put("task_id", taskId.toString());
1602+
expectedParams.put("parent_task_id", parentTaskId.toString());
1603+
Request httpRequest = RequestConverters.cancelTasks(request);
1604+
assertThat(httpRequest, notNullValue());
1605+
assertThat(httpRequest.getMethod(), equalTo(HttpPost.METHOD_NAME));
1606+
assertThat(httpRequest.getEntity(), nullValue());
1607+
assertThat(httpRequest.getEndpoint(), equalTo("/_tasks/_cancel"));
1608+
assertThat(httpRequest.getParameters(), equalTo(expectedParams));
1609+
}
1610+
15921611
public void testListTasks() {
15931612
{
15941613
ListTasksRequest request = new ListTasksRequest();

client/rest-high-level/src/test/java/org/elasticsearch/client/TasksIT.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919

2020
package org.elasticsearch.client;
2121

22+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
23+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksResponse;
2224
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
2325
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
2426
import org.elasticsearch.action.admin.cluster.node.tasks.list.TaskGroup;
27+
import org.elasticsearch.tasks.TaskId;
2528
import org.elasticsearch.tasks.TaskInfo;
2629

2730
import java.io.IOException;
@@ -58,4 +61,26 @@ public void testListTasks() throws IOException {
5861
assertTrue("List tasks were not found", listTasksFound);
5962
}
6063

64+
public void testCancelTasks() throws IOException {
65+
ListTasksRequest listRequest = new ListTasksRequest();
66+
ListTasksResponse listResponse = execute(
67+
listRequest,
68+
highLevelClient().tasks()::list,
69+
highLevelClient().tasks()::listAsync
70+
);
71+
// in this case, probably no task will actually be cancelled.
72+
// this is ok, that case is covered in TasksIT.testTasksCancellation
73+
TaskInfo firstTask = listResponse.getTasks().get(0);
74+
String node = listResponse.getPerNodeTasks().keySet().iterator().next();
75+
76+
CancelTasksRequest cancelTasksRequest = new CancelTasksRequest();
77+
cancelTasksRequest.setTaskId(new TaskId(node, firstTask.getId()));
78+
cancelTasksRequest.setReason("testreason");
79+
CancelTasksResponse response = execute(cancelTasksRequest,
80+
highLevelClient().tasks()::cancel,
81+
highLevelClient().tasks()::cancelAsync);
82+
// Since the task may or may not have been cancelled, assert that we received a response only
83+
// The actual testing of task cancellation is covered by TasksIT.testTasksCancellation
84+
assertThat(response, notNullValue());
85+
}
6186
}

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/ClusterClientDocumentationIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,5 @@ public void onFailure(Exception e) {
178178
assertTrue(latch.await(30L, TimeUnit.SECONDS));
179179
}
180180
}
181+
181182
}

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/TasksClientDocumentationIT.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.elasticsearch.action.ActionListener;
2424
import org.elasticsearch.action.LatchedActionListener;
2525
import org.elasticsearch.action.TaskOperationFailure;
26+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
27+
import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksResponse;
2628
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
2729
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
2830
import org.elasticsearch.action.admin.cluster.node.tasks.list.TaskGroup;
@@ -146,4 +148,74 @@ public void onFailure(Exception e) {
146148
assertTrue(latch.await(30L, TimeUnit.SECONDS));
147149
}
148150
}
151+
152+
public void testCancelTasks() throws IOException {
153+
RestHighLevelClient client = highLevelClient();
154+
{
155+
// tag::cancel-tasks-request
156+
CancelTasksRequest request = new CancelTasksRequest();
157+
// end::cancel-tasks-request
158+
159+
// tag::cancel-tasks-request-filter
160+
request.setTaskId(new TaskId("nodeId1", 42)); //<1>
161+
request.setActions("cluster:*"); // <2>
162+
request.setNodes("nodeId1", "nodeId2"); // <3>
163+
// end::cancel-tasks-request-filter
164+
165+
}
166+
167+
CancelTasksRequest request = new CancelTasksRequest();
168+
request.setTaskId(TaskId.EMPTY_TASK_ID);
169+
170+
// tag::cancel-tasks-execute
171+
CancelTasksResponse response = client.tasks().cancel(request, RequestOptions.DEFAULT);
172+
// end::cancel-tasks-execute
173+
174+
assertThat(response, notNullValue());
175+
176+
// tag::cancel-tasks-response-tasks
177+
List<TaskInfo> tasks = response.getTasks(); // <1>
178+
// end::cancel-tasks-response-tasks
179+
180+
181+
// tag::cancel-tasks-response-failures
182+
List<ElasticsearchException> nodeFailures = response.getNodeFailures(); // <1>
183+
List<TaskOperationFailure> taskFailures = response.getTaskFailures(); // <2>
184+
// end::-tasks-response-failures
185+
186+
assertThat(response.getNodeFailures(), equalTo(emptyList()));
187+
assertThat(response.getTaskFailures(), equalTo(emptyList()));
188+
}
189+
190+
public void testAsyncCancelTasks() throws InterruptedException {
191+
192+
RestHighLevelClient client = highLevelClient();
193+
{
194+
CancelTasksRequest request = new CancelTasksRequest();
195+
196+
// tag::cancel-tasks-execute-listener
197+
ActionListener<CancelTasksResponse> listener =
198+
new ActionListener<CancelTasksResponse>() {
199+
@Override
200+
public void onResponse(CancelTasksResponse response) {
201+
// <1>
202+
}
203+
@Override
204+
public void onFailure(Exception e) {
205+
// <2>
206+
}
207+
};
208+
// end::cancel-tasks-execute-listener
209+
210+
// Replace the empty listener by a blocking listener in test
211+
final CountDownLatch latch = new CountDownLatch(1);
212+
listener = new LatchedActionListener<>(listener, latch);
213+
214+
// tag::cancel-tasks-execute-async
215+
client.tasks().cancelAsync(request, RequestOptions.DEFAULT, listener); // <1>
216+
// end::cancel-tasks-execute-async
217+
218+
assertTrue(latch.await(30L, TimeUnit.SECONDS));
219+
}
220+
}
149221
}

client/rest/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ forbiddenApisTest {
6969
}
7070

7171
// JarHell is part of es server, which we don't want to pull in
72-
// TODO: Not anymore. Now in elasticsearch-core
72+
// TODO: Not anymore. Now in :libs:core
7373
jarHell.enabled=false
7474

7575
namingConventions {

client/sniffer/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ dependencyLicenses {
7272
}
7373

7474
// JarHell is part of es server, which we don't want to pull in
75-
// TODO: Not anymore. Now in elasticsearch-core
75+
// TODO: Not anymore. Now in :libs:core
7676
jarHell.enabled=false
7777

7878
namingConventions {

client/sniffer/src/test/java/org/elasticsearch/client/sniff/ElasticsearchHostsSnifferTests.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.apache.http.Consts;
3131
import org.apache.http.HttpHost;
3232
import org.apache.http.client.methods.HttpGet;
33-
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
3433
import org.elasticsearch.client.Response;
3534
import org.elasticsearch.client.ResponseException;
3635
import org.elasticsearch.client.RestClient;
@@ -148,8 +147,6 @@ private static HttpServer createHttpServer(final SniffResponse sniffResponse, fi
148147
return httpServer;
149148
}
150149

151-
//animal-sniffer doesn't like our usage of com.sun.net.httpserver.* classes
152-
@IgnoreJRERequirement
153150
private static class ResponseHandler implements HttpHandler {
154151
private final int sniffTimeoutMillis;
155152
private final SniffResponse sniffResponse;

client/test/build.gradle

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import org.elasticsearch.gradle.precommit.PrecommitTasks
2121
import org.gradle.api.JavaVersion
2222

2323
apply plugin: 'elasticsearch.build'
24-
apply plugin: 'ru.vyarus.animalsniffer'
2524

2625
targetCompatibility = JavaVersion.VERSION_1_7
2726
sourceCompatibility = JavaVersion.VERSION_1_7
@@ -31,8 +30,6 @@ dependencies {
3130
compile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
3231
compile "junit:junit:${versions.junit}"
3332
compile "org.hamcrest:hamcrest-all:${versions.hamcrest}"
34-
compile "org.codehaus.mojo:animal-sniffer-annotations:1.15"
35-
signature "org.codehaus.mojo.signature:java17:1.0@signature"
3633
}
3734

3835
forbiddenApisMain {
@@ -49,7 +46,7 @@ forbiddenApisTest {
4946
}
5047

5148
// JarHell is part of es server, which we don't want to pull in
52-
// TODO: Not anymore. Now in elasticsearch-core
49+
// TODO: Not anymore. Now in :libs:core
5350
jarHell.enabled=false
5451

5552
// TODO: should we have licenses for our test deps?

distribution/tools/launchers/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@ import org.elasticsearch.gradle.precommit.PrecommitTasks
2121
import org.gradle.api.JavaVersion
2222

2323
apply plugin: 'elasticsearch.build'
24-
apply plugin: 'ru.vyarus.animalsniffer'
2524

2625
sourceCompatibility = JavaVersion.VERSION_1_7
2726
targetCompatibility = JavaVersion.VERSION_1_7
2827

2928
dependencies {
30-
signature "org.codehaus.mojo.signature:java17:1.0@signature"
31-
3229
testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
3330
testCompile "junit:junit:${versions.junit}"
3431
testCompile "org.hamcrest:hamcrest-all:${versions.hamcrest}"

docs/java-rest/high-level/supported-apis.asciidoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,7 @@ include::snapshot/verify_repository.asciidoc[]
141141
The Java High Level REST Client supports the following Tasks APIs:
142142

143143
* <<java-rest-high-tasks-list>>
144+
* <<java-rest-high-cluster-cancel-tasks>>
144145

145146
include::tasks/list_tasks.asciidoc[]
147+
include::tasks/cancel_tasks.asciidoc[]

0 commit comments

Comments
 (0)