Skip to content

Commit 168a56c

Browse files
committed
Merge remote-tracking branch 'elastic/master' into default-copy-settings-to-true
* elastic/master: (34 commits) Test: increase search logging for LicensingTests Adjust serialization version in IndicesOptions [TEST] Fix compilation Remove version argument in RangeFieldType (elastic#30411) Remove unused DirectoryUtils class. (elastic#30582) Mitigate date histogram slowdowns with non-fixed timezones. (elastic#30534) Add a MovingFunction pipeline aggregation, deprecate MovingAvg agg (elastic#29594) Removes AwaitsFix on IndicesOptionsTests Template upgrades should happen in a system context (elastic#30621) Fix bug in BucketMetrics path traversal (elastic#30632) Fixes IndiceOptionsTests to serialise correctly (elastic#30644) S3 repo plugin populate SettingsFilter (elastic#30652) mute IndicesOptionsTests.testSerialization Rest High Level client: Add List Tasks (elastic#29546) Refactors ClientHelper to combine header logic (elastic#30620) [ML] Wait for ML indices in rolling upgrade tests (elastic#30615) Watcher: Ensure secrets integration tests also run triggered watch (elastic#30478) Move allocation awareness attributes to list setting (elastic#30626) [Docs] Update code snippet in has-child-query.asciidoc (elastic#30510) Replace custom reloadable Key/TrustManager (elastic#30509) ...
2 parents 9916d9c + d912fa4 commit 168a56c

File tree

249 files changed

+11620
-3715
lines changed

Some content is hidden

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

249 files changed

+11620
-3715
lines changed

client/rest-high-level/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies {
4040
compile "org.elasticsearch.plugin:parent-join-client:${version}"
4141
compile "org.elasticsearch.plugin:aggs-matrix-stats-client:${version}"
4242
compile "org.elasticsearch.plugin:rank-eval-client:${version}"
43+
compile "org.elasticsearch.plugin:lang-mustache-client:${version}"
4344

4445
testCompile "org.elasticsearch.client:test:${version}"
4546
testCompile "org.elasticsearch.test:framework:${version}"

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

+24
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import org.apache.http.Header;
2323
import org.elasticsearch.action.ActionListener;
24+
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
25+
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
2426
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2527
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
2628

@@ -63,4 +65,26 @@ public void putSettingsAsync(ClusterUpdateSettingsRequest clusterUpdateSettingsR
6365
restHighLevelClient.performRequestAsyncAndParseEntity(clusterUpdateSettingsRequest, RequestConverters::clusterPutSettings,
6466
ClusterUpdateSettingsResponse::fromXContent, listener, emptySet(), headers);
6567
}
68+
69+
/**
70+
* Get current tasks using the Task Management API
71+
* <p>
72+
* See
73+
* <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tasks.html"> Task Management API on elastic.co</a>
74+
*/
75+
public ListTasksResponse listTasks(ListTasksRequest request, Header... headers) throws IOException {
76+
return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::listTasks, ListTasksResponse::fromXContent,
77+
emptySet(), headers);
78+
}
79+
80+
/**
81+
* Asynchronously get current tasks using the Task Management API
82+
* <p>
83+
* See
84+
* <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tasks.html"> Task Management API on elastic.co</a>
85+
*/
86+
public void listTasksAsync(ListTasksRequest request, ActionListener<ListTasksResponse> listener, Header... headers) {
87+
restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::listTasks, ListTasksResponse::fromXContent,
88+
listener, emptySet(), headers);
89+
}
6690
}

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

+103-6
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
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.list.ListTasksRequest;
3233
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
34+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
3335
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
3436
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
3537
import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
@@ -44,8 +46,8 @@
4446
import org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
4547
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
4648
import org.elasticsearch.action.admin.indices.rollover.RolloverRequest;
47-
import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequest;
4849
import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
50+
import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequest;
4951
import org.elasticsearch.action.admin.indices.shrink.ResizeRequest;
5052
import org.elasticsearch.action.admin.indices.shrink.ResizeType;
5153
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
@@ -80,7 +82,9 @@
8082
import org.elasticsearch.index.VersionType;
8183
import org.elasticsearch.index.rankeval.RankEvalRequest;
8284
import org.elasticsearch.rest.action.search.RestSearchAction;
85+
import org.elasticsearch.script.mustache.SearchTemplateRequest;
8386
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
87+
import org.elasticsearch.tasks.TaskId;
8488

8589
import java.io.ByteArrayOutputStream;
8690
import java.io.IOException;
@@ -458,6 +462,15 @@ static Request search(SearchRequest searchRequest) throws IOException {
458462
Request request = new Request(HttpPost.METHOD_NAME, endpoint(searchRequest.indices(), searchRequest.types(), "_search"));
459463

460464
Params params = new Params(request);
465+
addSearchRequestParams(params, searchRequest);
466+
467+
if (searchRequest.source() != null) {
468+
request.setEntity(createEntity(searchRequest.source(), REQUEST_BODY_CONTENT_TYPE));
469+
}
470+
return request;
471+
}
472+
473+
private static void addSearchRequestParams(Params params, SearchRequest searchRequest) {
461474
params.putParam(RestSearchAction.TYPED_KEYS_PARAM, "true");
462475
params.withRouting(searchRequest.routing());
463476
params.withPreference(searchRequest.preference());
@@ -473,11 +486,6 @@ static Request search(SearchRequest searchRequest) throws IOException {
473486
if (searchRequest.scroll() != null) {
474487
params.putParam("scroll", searchRequest.scroll().keepAlive());
475488
}
476-
477-
if (searchRequest.source() != null) {
478-
request.setEntity(createEntity(searchRequest.source(), REQUEST_BODY_CONTENT_TYPE));
479-
}
480-
return request;
481489
}
482490

483491
static Request searchScroll(SearchScrollRequest searchScrollRequest) throws IOException {
@@ -507,6 +515,24 @@ static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOExcep
507515
return request;
508516
}
509517

518+
static Request searchTemplate(SearchTemplateRequest searchTemplateRequest) throws IOException {
519+
Request request;
520+
521+
if (searchTemplateRequest.isSimulate()) {
522+
request = new Request(HttpGet.METHOD_NAME, "_render/template");
523+
} else {
524+
SearchRequest searchRequest = searchTemplateRequest.getRequest();
525+
String endpoint = endpoint(searchRequest.indices(), searchRequest.types(), "_search/template");
526+
request = new Request(HttpGet.METHOD_NAME, endpoint);
527+
528+
Params params = new Params(request);
529+
addSearchRequestParams(params, searchRequest);
530+
}
531+
532+
request.setEntity(createEntity(searchTemplateRequest, REQUEST_BODY_CONTENT_TYPE));
533+
return request;
534+
}
535+
510536
static Request existsAlias(GetAliasesRequest getAliasesRequest) {
511537
if ((getAliasesRequest.indices() == null || getAliasesRequest.indices().length == 0) &&
512538
(getAliasesRequest.aliases() == null || getAliasesRequest.aliases().length == 0)) {
@@ -582,6 +608,22 @@ static Request clusterPutSettings(ClusterUpdateSettingsRequest clusterUpdateSett
582608
return request;
583609
}
584610

611+
static Request listTasks(ListTasksRequest listTaskRequest) {
612+
if (listTaskRequest.getTaskId() != null && listTaskRequest.getTaskId().isSet()) {
613+
throw new IllegalArgumentException("TaskId cannot be used for list tasks request");
614+
}
615+
Request request = new Request(HttpGet.METHOD_NAME, "/_tasks");
616+
Params params = new Params(request);
617+
params.withTimeout(listTaskRequest.getTimeout())
618+
.withDetailed(listTaskRequest.getDetailed())
619+
.withWaitForCompletion(listTaskRequest.getWaitForCompletion())
620+
.withParentTaskId(listTaskRequest.getParentTaskId())
621+
.withNodes(listTaskRequest.getNodes())
622+
.withActions(listTaskRequest.getActions())
623+
.putParam("group_by", "none");
624+
return request;
625+
}
626+
585627
static Request rollover(RolloverRequest rolloverRequest) throws IOException {
586628
String endpoint = new EndpointBuilder().addPathPart(rolloverRequest.getAlias()).addPathPartAsIs("_rollover")
587629
.addPathPart(rolloverRequest.getNewIndexName()).build();
@@ -656,6 +698,19 @@ static Request getRepositories(GetRepositoriesRequest getRepositoriesRequest) {
656698
return request;
657699
}
658700

701+
static Request createRepository(PutRepositoryRequest putRepositoryRequest) throws IOException {
702+
String endpoint = new EndpointBuilder().addPathPart("_snapshot").addPathPart(putRepositoryRequest.name()).build();
703+
Request request = new Request(HttpPut.METHOD_NAME, endpoint);
704+
705+
Params parameters = new Params(request);
706+
parameters.withMasterTimeout(putRepositoryRequest.masterNodeTimeout());
707+
parameters.withTimeout(putRepositoryRequest.timeout());
708+
parameters.withVerify(putRepositoryRequest.verify());
709+
710+
request.setEntity(createEntity(putRepositoryRequest, REQUEST_BODY_CONTENT_TYPE));
711+
return request;
712+
}
713+
659714
static Request putTemplate(PutIndexTemplateRequest putIndexTemplateRequest) throws IOException {
660715
String endpoint = new EndpointBuilder().addPathPartAsIs("_template").addPathPart(putIndexTemplateRequest.name()).build();
661716
Request request = new Request(HttpPut.METHOD_NAME, endpoint);
@@ -894,6 +949,48 @@ Params withPreserveExisting(boolean preserveExisting) {
894949
}
895950
return this;
896951
}
952+
953+
Params withDetailed(boolean detailed) {
954+
if (detailed) {
955+
return putParam("detailed", Boolean.TRUE.toString());
956+
}
957+
return this;
958+
}
959+
960+
Params withWaitForCompletion(boolean waitForCompletion) {
961+
if (waitForCompletion) {
962+
return putParam("wait_for_completion", Boolean.TRUE.toString());
963+
}
964+
return this;
965+
}
966+
967+
Params withNodes(String[] nodes) {
968+
if (nodes != null && nodes.length > 0) {
969+
return putParam("nodes", String.join(",", nodes));
970+
}
971+
return this;
972+
}
973+
974+
Params withActions(String[] actions) {
975+
if (actions != null && actions.length > 0) {
976+
return putParam("actions", String.join(",", actions));
977+
}
978+
return this;
979+
}
980+
981+
Params withParentTaskId(TaskId parentTaskId) {
982+
if (parentTaskId != null && parentTaskId.isSet()) {
983+
return putParam("parent_task_id", parentTaskId.toString());
984+
}
985+
return this;
986+
}
987+
988+
Params withVerify(boolean verify) {
989+
if (verify) {
990+
return putParam("verify", Boolean.TRUE.toString());
991+
}
992+
return this;
993+
}
897994
}
898995

899996
/**

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

+28
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464
import org.elasticsearch.plugins.spi.NamedXContentProvider;
6565
import org.elasticsearch.rest.BytesRestResponse;
6666
import org.elasticsearch.rest.RestStatus;
67+
import org.elasticsearch.script.mustache.SearchTemplateRequest;
68+
import org.elasticsearch.script.mustache.SearchTemplateResponse;
6769
import org.elasticsearch.search.aggregations.Aggregation;
6870
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
6971
import org.elasticsearch.search.aggregations.bucket.adjacency.ParsedAdjacencyMatrix;
@@ -501,6 +503,32 @@ public final void clearScrollAsync(ClearScrollRequest clearScrollRequest,
501503
listener, emptySet(), headers);
502504
}
503505

506+
/**
507+
* Executes a request using the Search Template API.
508+
*
509+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html">Search Template API
510+
* on elastic.co</a>.
511+
*/
512+
public final SearchTemplateResponse searchTemplate(SearchTemplateRequest searchTemplateRequest,
513+
Header... headers) throws IOException {
514+
return performRequestAndParseEntity(searchTemplateRequest, RequestConverters::searchTemplate,
515+
SearchTemplateResponse::fromXContent, emptySet(), headers);
516+
}
517+
518+
/**
519+
* Asynchronously executes a request using the Search Template API
520+
*
521+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html">Search Template API
522+
* on elastic.co</a>.
523+
*/
524+
public final void searchTemplateAsync(SearchTemplateRequest searchTemplateRequest,
525+
ActionListener<SearchTemplateResponse> listener,
526+
Header... headers) {
527+
performRequestAsyncAndParseEntity(searchTemplateRequest, RequestConverters::searchTemplate,
528+
SearchTemplateResponse::fromXContent, listener, emptySet(), headers);
529+
}
530+
531+
504532
/**
505533
* Executes a request using the Ranking Evaluation API.
506534
*

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

+25-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.elasticsearch.action.ActionListener;
2424
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
2525
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
26-
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
27-
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
26+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
27+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryResponse;
2828

2929
import java.io.IOException;
3030

@@ -67,4 +67,27 @@ public void getRepositoriesAsync(GetRepositoriesRequest getRepositoriesRequest,
6767
restHighLevelClient.performRequestAsyncAndParseEntity(getRepositoriesRequest, RequestConverters::getRepositories,
6868
GetRepositoriesResponse::fromXContent, listener, emptySet(), headers);
6969
}
70+
71+
/**
72+
* Creates a snapshot repository.
73+
* <p>
74+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html"> Snapshot and Restore
75+
* API on elastic.co</a>
76+
*/
77+
public PutRepositoryResponse createRepository(PutRepositoryRequest putRepositoryRequest, Header... headers) throws IOException {
78+
return restHighLevelClient.performRequestAndParseEntity(putRepositoryRequest, RequestConverters::createRepository,
79+
PutRepositoryResponse::fromXContent, emptySet(), headers);
80+
}
81+
82+
/**
83+
* Asynchronously creates a snapshot repository.
84+
* <p>
85+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html"> Snapshot and Restore
86+
* API on elastic.co</a>
87+
*/
88+
public void createRepositoryAsync(PutRepositoryRequest putRepositoryRequest,
89+
ActionListener<PutRepositoryResponse> listener, Header... headers) {
90+
restHighLevelClient.performRequestAsyncAndParseEntity(putRepositoryRequest, RequestConverters::createRepository,
91+
PutRepositoryResponse::fromXContent, listener, emptySet(), headers);
92+
}
7093
}

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

+31
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
package org.elasticsearch.client;
2121

2222
import org.elasticsearch.ElasticsearchException;
23+
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
24+
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
25+
import org.elasticsearch.action.admin.cluster.node.tasks.list.TaskGroup;
2326
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2427
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
2528
import org.elasticsearch.cluster.routing.allocation.decider.EnableAllocationDecider;
@@ -29,13 +32,16 @@
2932
import org.elasticsearch.common.xcontent.support.XContentMapValues;
3033
import org.elasticsearch.indices.recovery.RecoverySettings;
3134
import org.elasticsearch.rest.RestStatus;
35+
import org.elasticsearch.tasks.TaskInfo;
3236

3337
import java.io.IOException;
3438
import java.util.HashMap;
3539
import java.util.Map;
3640

41+
import static java.util.Collections.emptyList;
3742
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
3843
import static org.hamcrest.Matchers.equalTo;
44+
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
3945
import static org.hamcrest.Matchers.notNullValue;
4046
import static org.hamcrest.Matchers.nullValue;
4147

@@ -105,4 +111,29 @@ public void testClusterUpdateSettingNonExistent() {
105111
assertThat(exception.getMessage(), equalTo(
106112
"Elasticsearch exception [type=illegal_argument_exception, reason=transient setting [" + setting + "], not recognized]"));
107113
}
114+
115+
public void testListTasks() throws IOException {
116+
ListTasksRequest request = new ListTasksRequest();
117+
ListTasksResponse response = execute(request, highLevelClient().cluster()::listTasks, highLevelClient().cluster()::listTasksAsync);
118+
119+
assertThat(response, notNullValue());
120+
assertThat(response.getNodeFailures(), equalTo(emptyList()));
121+
assertThat(response.getTaskFailures(), equalTo(emptyList()));
122+
// It's possible that there are other tasks except 'cluster:monitor/tasks/lists[n]' and 'action":"cluster:monitor/tasks/lists'
123+
assertThat(response.getTasks().size(), greaterThanOrEqualTo(2));
124+
boolean listTasksFound = false;
125+
for (TaskGroup taskGroup : response.getTaskGroups()) {
126+
TaskInfo parent = taskGroup.getTaskInfo();
127+
if ("cluster:monitor/tasks/lists".equals(parent.getAction())) {
128+
assertThat(taskGroup.getChildTasks().size(), equalTo(1));
129+
TaskGroup childGroup = taskGroup.getChildTasks().iterator().next();
130+
assertThat(childGroup.getChildTasks().isEmpty(), equalTo(true));
131+
TaskInfo child = childGroup.getTaskInfo();
132+
assertThat(child.getAction(), equalTo("cluster:monitor/tasks/lists[n]"));
133+
assertThat(child.getParentTaskId(), equalTo(parent.getTaskId()));
134+
listTasksFound = true;
135+
}
136+
}
137+
assertTrue("List tasks were not found", listTasksFound);
138+
}
108139
}

0 commit comments

Comments
 (0)