1
0
Эх сурвалжийг харах

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
Luca Cavanna 9 жил өмнө
parent
commit
6eaff9432d

+ 1 - 1
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 {

+ 5 - 1
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

+ 12 - 10
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);
     }
 }

+ 5 - 5
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"));