diff options
author | Luca Cavanna <javanna@users.noreply.github.com> | 2016-11-29 20:52:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-29 20:52:43 +0100 |
commit | 6eaff9432ddc05adad528761f4ce65545cce9cf8 (patch) | |
tree | 448a4b8d0b2c652667a2d4d037fd0861f40ef6ae | |
parent | be4074e13d188d71e1bf2c4b1a4da97118713c03 (diff) |
SearchTemplateRequest to implement CompositeIndicesRequest (#21865)
SearchTemplateRequest to implement CompositeIndicesRequest
Given that SearchTemplateRequest effectively delegates to search when a search is being executed, it should implement the CompositeIndicesRequest interface. The subrequests method should return a single search request. When a search is not going to be executed, because we are in simulate mode, there are no inner requests, and there are no corresponding indices to that request either.
Closes #21747
4 files changed, 23 insertions, 17 deletions
diff --git a/core/src/main/java/org/elasticsearch/action/CompositeIndicesRequest.java b/core/src/main/java/org/elasticsearch/action/CompositeIndicesRequest.java index 5c88c57b83..8d18df0c27 100644 --- a/core/src/main/java/org/elasticsearch/action/CompositeIndicesRequest.java +++ b/core/src/main/java/org/elasticsearch/action/CompositeIndicesRequest.java @@ -25,7 +25,7 @@ import java.util.List; * Needs to be implemented by all {@link org.elasticsearch.action.ActionRequest} subclasses that are composed of multiple subrequests * which relate to one or more indices. Allows to retrieve those subrequests and reason about them separately. A composite request is * executed by its own transport action class (e.g. {@link org.elasticsearch.action.search.TransportMultiSearchAction}), which goes - * through all the subrequests and delegates their exection to the appropriate transport action (e.g. + * through all the subrequests and delegates their execution to the appropriate transport action (e.g. * {@link org.elasticsearch.action.search.TransportSearchAction}) for each single item. */ public interface CompositeIndicesRequest { diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequest.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequest.java index 93549d1d79..8d8037fa10 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequest.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequest.java @@ -63,7 +63,11 @@ public class MultiSearchTemplateRequest extends ActionRequest implements Composi @Override public List<? extends IndicesRequest> subRequests() { - return requests; + List<IndicesRequest> indicesRequests = new ArrayList<>(); + for (SearchTemplateRequest request : requests) { + indicesRequests.addAll(request.subRequests()); + } + return indicesRequests; } @Override diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/SearchTemplateRequest.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/SearchTemplateRequest.java index b405d0950e..6b3c980be3 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/SearchTemplateRequest.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/SearchTemplateRequest.java @@ -21,15 +21,16 @@ package org.elasticsearch.script.mustache; import org.elasticsearch.action.ActionRequest; import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.action.CompositeIndicesRequest; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.script.ScriptType; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.Map; import static org.elasticsearch.action.ValidateActions.addValidationError; @@ -37,7 +38,7 @@ import static org.elasticsearch.action.ValidateActions.addValidationError; /** * A request to execute a search based on a search template. */ -public class SearchTemplateRequest extends ActionRequest implements IndicesRequest { +public class SearchTemplateRequest extends ActionRequest implements CompositeIndicesRequest { private SearchRequest request; private boolean simulate = false; @@ -167,12 +168,13 @@ public class SearchTemplateRequest extends ActionRequest implements IndicesReque } @Override - public String[] indices() { - return request != null ? request.indices() : Strings.EMPTY_ARRAY; - } - - @Override - public IndicesOptions indicesOptions() { - return request != null ? request.indicesOptions() : SearchRequest.DEFAULT_INDICES_OPTIONS; + public List<? extends IndicesRequest> subRequests() { + //if we are simulating no index is involved in the request + if (simulate) { + assert request == null; + return Collections.emptyList(); + } + //composite request as it delegates to search, but it holds one single action (search itself) + return Collections.singletonList(request); } } diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequestTests.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequestTests.java index e3b633006c..bec7e24d3a 100644 --- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequestTests.java +++ b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequestTests.java @@ -41,16 +41,16 @@ public class MultiSearchTemplateRequestTests extends ESTestCase { assertThat(request.requests().size(), equalTo(3)); assertThat(request.requests().get(0).getRequest().indices()[0], equalTo("test0")); assertThat(request.requests().get(0).getRequest().indices()[1], equalTo("test1")); - assertThat(request.requests().get(0).indices(), arrayContaining("test0", "test1")); + assertThat(request.requests().get(0).getRequest().indices(), arrayContaining("test0", "test1")); assertThat(request.requests().get(0).getRequest().requestCache(), equalTo(true)); assertThat(request.requests().get(0).getRequest().preference(), nullValue()); - assertThat(request.requests().get(1).indices()[0], equalTo("test2")); - assertThat(request.requests().get(1).indices()[1], equalTo("test3")); + assertThat(request.requests().get(1).getRequest().indices()[0], equalTo("test2")); + assertThat(request.requests().get(1).getRequest().indices()[1], equalTo("test3")); assertThat(request.requests().get(1).getRequest().types()[0], equalTo("type1")); assertThat(request.requests().get(1).getRequest().requestCache(), nullValue()); assertThat(request.requests().get(1).getRequest().preference(), equalTo("_local")); - assertThat(request.requests().get(2).indices()[0], equalTo("test4")); - assertThat(request.requests().get(2).indices()[1], equalTo("test1")); + assertThat(request.requests().get(2).getRequest().indices()[0], equalTo("test4")); + assertThat(request.requests().get(2).getRequest().indices()[1], equalTo("test1")); assertThat(request.requests().get(2).getRequest().types()[0], equalTo("type2")); assertThat(request.requests().get(2).getRequest().types()[1], equalTo("type1")); assertThat(request.requests().get(2).getRequest().routing(), equalTo("123")); |