diff --git a/core/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesIndexRequest.java b/core/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesIndexRequest.java index 460a21ae866aa..fb7e32ed9abee 100644 --- a/core/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesIndexRequest.java +++ b/core/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesIndexRequest.java @@ -19,7 +19,10 @@ package org.elasticsearch.action.fieldcaps; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.action.OriginalIndices; +import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.action.support.single.shard.SingleShardRequest; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -30,32 +33,54 @@ public class FieldCapabilitiesIndexRequest extends SingleShardRequest { private String[] fields; + private OriginalIndices originalIndices; // For serialization FieldCapabilitiesIndexRequest() {} - FieldCapabilitiesIndexRequest(String[] fields, String index) { + FieldCapabilitiesIndexRequest(String[] fields, String index, OriginalIndices originalIndices) { super(index); if (fields == null || fields.length == 0) { throw new IllegalArgumentException("specified fields can't be null or empty"); } this.fields = fields; + assert index != null; + this.index(index); + this.originalIndices = originalIndices; } public String[] fields() { return fields; } + @Override + public String[] indices() { + return originalIndices.indices(); + } + + @Override + public IndicesOptions indicesOptions() { + return originalIndices.indicesOptions(); + } + @Override public void readFrom(StreamInput in) throws IOException { super.readFrom(in); fields = in.readStringArray(); + if (in.getVersion().onOrAfter(Version.V_6_2_0)) { + originalIndices = OriginalIndices.readOriginalIndices(in); + } else { + originalIndices = OriginalIndices.NONE; + } } @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeStringArray(fields); + if (out.getVersion().onOrAfter(Version.V_6_2_0)) { + OriginalIndices.writeOriginalIndices(originalIndices, out); + } } @Override diff --git a/core/src/main/java/org/elasticsearch/action/fieldcaps/TransportFieldCapabilitiesAction.java b/core/src/main/java/org/elasticsearch/action/fieldcaps/TransportFieldCapabilitiesAction.java index 3f0fb77781bdd..2313d9f5fc690 100644 --- a/core/src/main/java/org/elasticsearch/action/fieldcaps/TransportFieldCapabilitiesAction.java +++ b/core/src/main/java/org/elasticsearch/action/fieldcaps/TransportFieldCapabilitiesAction.java @@ -110,7 +110,7 @@ public void onFailure(Exception e) { } }; for (String index : concreteIndices) { - shardAction.execute(new FieldCapabilitiesIndexRequest(request.fields(), index), innerListener); + shardAction.execute(new FieldCapabilitiesIndexRequest(request.fields(), index, localIndices), innerListener); } // this is the cross cluster part of this API - we force the other cluster to not merge the results but instead diff --git a/core/src/test/java/org/elasticsearch/action/IndicesRequestIT.java b/core/src/test/java/org/elasticsearch/action/IndicesRequestIT.java index 4b05bfb341314..8fac0b91cd6d6 100644 --- a/core/src/test/java/org/elasticsearch/action/IndicesRequestIT.java +++ b/core/src/test/java/org/elasticsearch/action/IndicesRequestIT.java @@ -59,6 +59,8 @@ import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.explain.ExplainAction; import org.elasticsearch.action.explain.ExplainRequest; +import org.elasticsearch.action.fieldcaps.FieldCapabilitiesAction; +import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest; import org.elasticsearch.action.get.GetAction; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.MultiGetAction; @@ -188,6 +190,19 @@ public void testGetFieldMappings() { assertSameIndices(getFieldMappingsRequest, getFieldMappingsShardAction); } + public void testFieldCapabilities() { + String fieldCapabilitiesShardAction = FieldCapabilitiesAction.NAME + "[index][s]"; + interceptTransportActions(fieldCapabilitiesShardAction); + + FieldCapabilitiesRequest fieldCapabilitiesRequest = new FieldCapabilitiesRequest(); + fieldCapabilitiesRequest.indices(randomIndicesOrAliases()); + fieldCapabilitiesRequest.fields(randomAlphaOfLength(8)); + internalCluster().coordOnlyNodeClient().fieldCaps(fieldCapabilitiesRequest).actionGet(); + + clearInterceptedActions(); + assertSameIndices(fieldCapabilitiesRequest, fieldCapabilitiesShardAction); + } + public void testAnalyze() { String analyzeShardAction = AnalyzeAction.NAME + "[s]"; interceptTransportActions(analyzeShardAction);