From 5a430de2ad412a6ebf61767fe4164eed86624ecd Mon Sep 17 00:00:00 2001 From: pgomulka Date: Mon, 7 Jun 2021 14:50:30 +0200 Subject: [PATCH 1/4] multiget draft --- rest-api-spec/build.gradle | 37 ++++----- .../action/get/MultiGetRequest.java | 8 ++ .../action/get/MultiGetResponse.java | 6 ++ .../elasticsearch/index/get/GetResult.java | 5 ++ .../org/elasticsearch/rest/RestRequest.java | 3 +- .../action/document/RestMultiGetAction.java | 15 +++- .../document/RestMultiGetActionTests.java | 75 +++++++++++++++++++ .../rest/yaml/section/MatchAssertion.java | 2 +- 8 files changed, 123 insertions(+), 28 deletions(-) create mode 100644 server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index 69ef1ed2178e5..a10473610df9b 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -138,14 +138,14 @@ tasks.named("yamlRestCompatTest").configure { 'count/11_basic_with_types/count body without query element', 'count/11_basic_with_types/count with body', 'count/11_basic_with_types/count with empty body', - 'explain/10_basic/Basic explain', - 'explain/10_basic/Basic explain with alias', - 'explain/11_basic_with_types/Basic explain', - 'explain/11_basic_with_types/Basic explain with alias', - 'explain/20_source_filtering/Source filtering', - 'explain/21_source_filtering_with_types/Source filtering', - 'explain/31_query_string_with_types/explain with query_string parameters', - 'explain/40_mix_typeless_typeful/Explain with typeless API on an index that has types', +// 'explain/10_basic/Basic explain', +// 'explain/10_basic/Basic explain with alias', +// 'explain/11_basic_with_types/Basic explain', +// 'explain/11_basic_with_types/Basic explain with alias', +// 'explain/20_source_filtering/Source filtering', +// 'explain/21_source_filtering_with_types/Source filtering', +// 'explain/31_query_string_with_types/explain with query_string parameters', + //'explain/40_mix_typeless_typeful/Explain with typeless API on an index that has types', 'field_caps/30_filter/Field caps with index filter', 'get_source/11_basic_with_types/Basic with types', 'get_source/16_default_values_with_types/Default values', @@ -180,22 +180,6 @@ tasks.named("yamlRestCompatTest").configure { 'indices.upgrade/10_basic/Upgrade indices disallow no indices', 'indices.upgrade/10_basic/Upgrade indices disallow unavailable', 'indices.upgrade/10_basic/Upgrade indices ignore unavailable', - 'mget/10_basic/Basic multi-get', - 'mget/11_default_index_type/Default index/type', - 'mget/14_alias_to_multiple_indices/Multi Get with alias that resolves to multiple indices', - 'mget/16_basic_with_types/Basic multi-get', - 'mget/17_default_index/Default index/type', - 'mget/18_non_existent_index_with_types/Non-existent index', - 'mget/19_missing_metadata_with_types/Missing metadata', - 'mget/21_alias_to_multiple_indices_with_types/Multi Get with alias that resolves to multiple indices', - 'mget/22_ids_with_types/IDs', - 'mget/23_stored_fields_with_types/Stored fields', - 'mget/41_routing_with_types/Routing', - 'mget/61_realtime_refresh_with_types/Realtime Refresh', - 'mget/71_source_filtering_with_types/Source filtering - exclude field', - 'mget/71_source_filtering_with_types/Source filtering - include field', - 'mget/71_source_filtering_with_types/Source filtering - include nested field', - 'mget/71_source_filtering_with_types/Source filtering - true/false', 'mlt/20_docs/Basic mlt query with docs', 'mlt/30_unlike/Basic mlt query with unlike', 'search.aggregation/10_histogram/Deprecated _time order', @@ -319,6 +303,11 @@ tasks.named("transformV7RestTests").configure({ task -> // overrides for indices.get_mapping task.replaceIsTrue("test_1.mappings.doc", "test_1.mappings._doc") task.replaceIsTrue("test_2.mappings.doc", "test_2.mappings._doc") + // overrides for mget + task.replaceValueInMatch("docs.0._type", "_doc") + task.replaceValueInMatch("docs.1._type", "_doc") + task.replaceValueInMatch("docs.2._type", "_doc") + }) tasks.register('enforceYamlTestConvention').configure { diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java index 7a82579a48624..c78223991e4c1 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java @@ -20,10 +20,12 @@ import org.elasticsearch.common.Nullable; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.ParsingException; +import org.elasticsearch.common.RestApiVersion; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.lucene.uid.Versions; import org.elasticsearch.common.xcontent.ToXContentObject; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -31,6 +33,7 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.index.VersionType; import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.rest.action.document.RestMultiGetAction; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import java.io.IOException; @@ -43,9 +46,11 @@ public class MultiGetRequest extends ActionRequest implements Iterable, CompositeIndicesRequest, RealtimeRequest, ToXContentObject { + private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(MultiGetRequest.class); private static final ParseField DOCS = new ParseField("docs"); private static final ParseField INDEX = new ParseField("_index"); + private static final ParseField TYPE = new ParseField("_type"); private static final ParseField ID = new ParseField("_id"); private static final ParseField ROUTING = new ParseField("routing"); private static final ParseField VERSION = new ParseField("version"); @@ -383,6 +388,9 @@ private static void parseDocuments(XContentParser parser, List items, @Nul index = parser.text(); } else if (ID.match(currentFieldName, parser.getDeprecationHandler())) { id = parser.text(); + } else if(parser.getRestApiVersion() == RestApiVersion.V_7 && + TYPE.match(currentFieldName,parser.getDeprecationHandler())) { + deprecationLogger.compatibleApiWarning("mget_with_types", RestMultiGetAction.TYPES_DEPRECATION_MESSAGE); } else if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { routing = parser.text(); } else if (FIELDS.match(currentFieldName, parser.getDeprecationHandler())) { diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java index 4168f0f050b9d..57b6f19e455b2 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java @@ -15,12 +15,14 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.xcontent.ToXContentObject; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.index.get.GetResult; import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.rest.action.document.RestMultiGetAction; import java.io.IOException; import java.util.ArrayList; @@ -29,8 +31,10 @@ import java.util.List; public class MultiGetResponse extends ActionResponse implements Iterable, ToXContentObject { + private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(MultiGetResponse.class); private static final ParseField INDEX = new ParseField("_index"); + private static final ParseField TYPE = new ParseField("_type"); private static final ParseField ID = new ParseField("_id"); private static final ParseField ERROR = new ParseField("error"); private static final ParseField DOCS = new ParseField("docs"); @@ -188,6 +192,8 @@ private static MultiGetItemResponse parseItem(XContentParser parser) throws IOEx case VALUE_STRING: if (INDEX.match(currentFieldName, parser.getDeprecationHandler())) { index = parser.text(); + } else if (TYPE.match(currentFieldName, parser.getDeprecationHandler())) { + deprecationLogger.compatibleApiWarning("mget_with_types", RestMultiGetAction.TYPES_DEPRECATION_MESSAGE); } else if (ID.match(currentFieldName, parser.getDeprecationHandler())) { id = parser.text(); } diff --git a/server/src/main/java/org/elasticsearch/index/get/GetResult.java b/server/src/main/java/org/elasticsearch/index/get/GetResult.java index 9d3da1c5239f9..03c21f2d7dad5 100644 --- a/server/src/main/java/org/elasticsearch/index/get/GetResult.java +++ b/server/src/main/java/org/elasticsearch/index/get/GetResult.java @@ -18,6 +18,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.xcontent.ToXContentObject; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentHelper; @@ -25,6 +26,7 @@ import org.elasticsearch.index.mapper.IgnoredFieldMapper; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.SourceFieldMapper; +import org.elasticsearch.rest.action.document.RestMultiGetAction; import org.elasticsearch.search.lookup.SourceLookup; import java.io.IOException; @@ -40,6 +42,7 @@ import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO; public class GetResult implements Writeable, Iterable, ToXContentObject { + private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(GetResult.class); public static final String _INDEX = "_index"; public static final String _ID = "_id"; @@ -323,6 +326,8 @@ public static GetResult fromXContentEmbedded(XContentParser parser, String index } else if (token.isValue()) { if (_INDEX.equals(currentFieldName)) { index = parser.text(); + } else if (parser.getRestApiVersion() == RestApiVersion.V_7 && MapperService.TYPE_FIELD_NAME.equals(currentFieldName)) { + deprecationLogger.compatibleApiWarning("mget_with_types", RestMultiGetAction.TYPES_DEPRECATION_MESSAGE); } else if (_ID.equals(currentFieldName)) { id = parser.text(); } else if (_VERSION.equals(currentFieldName)) { diff --git a/server/src/main/java/org/elasticsearch/rest/RestRequest.java b/server/src/main/java/org/elasticsearch/rest/RestRequest.java index 7dbe0f70610b7..ff9aed6fbaf2f 100644 --- a/server/src/main/java/org/elasticsearch/rest/RestRequest.java +++ b/server/src/main/java/org/elasticsearch/rest/RestRequest.java @@ -482,7 +482,8 @@ public final boolean hasContentOrSourceParam() { */ public final XContentParser contentOrSourceParamParser() throws IOException { Tuple tuple = contentOrSourceParam(); - return tuple.v1().xContent().createParser(xContentRegistry, LoggingDeprecationHandler.INSTANCE, tuple.v2().streamInput()); + return tuple.v1().xContent().createParserForCompatibility(xContentRegistry, LoggingDeprecationHandler.INSTANCE, + tuple.v2().streamInput(), restApiVersion); } /** diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java index 30b023811b5f8..017aa39d0debf 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java @@ -10,6 +10,7 @@ import org.elasticsearch.action.get.MultiGetRequest; import org.elasticsearch.client.node.NodeClient; +import org.elasticsearch.common.RestApiVersion; import org.elasticsearch.common.Strings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentParser; @@ -25,6 +26,8 @@ import static org.elasticsearch.rest.RestRequest.Method.POST; public class RestMultiGetAction extends BaseRestHandler { + public static final String TYPES_DEPRECATION_MESSAGE = "[types removal]" + + " Specifying types in multi get requests is deprecated."; private final boolean allowExplicitIndex; @@ -38,7 +41,13 @@ public List routes() { new Route(GET, "/_mget"), new Route(POST, "/_mget"), new Route(GET, "/{index}/_mget"), - new Route(POST, "/{index}/_mget")); + new Route(POST, "/{index}/_mget"), + Route.builder(GET, "/{index}/{type}/_mget") + .deprecated(TYPES_DEPRECATION_MESSAGE, RestApiVersion.V_7) + .build(), + Route.builder(POST, "/{index}/{type}/_mget") + .deprecated(TYPES_DEPRECATION_MESSAGE, RestApiVersion.V_7) + .build()); } @Override @@ -48,7 +57,9 @@ public String getName() { @Override public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { - + if (request.getRestApiVersion() == RestApiVersion.V_7 && request.param("type") != null) { + request.param("type"); + } MultiGetRequest multiGetRequest = new MultiGetRequest(); multiGetRequest.refresh(request.paramAsBoolean("refresh", multiGetRequest.refresh())); multiGetRequest.preference(request.param("preference")); diff --git a/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java new file mode 100644 index 0000000000000..afafd2c31bfe5 --- /dev/null +++ b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.rest.action.document; + +import org.elasticsearch.action.get.MultiGetRequest; +import org.elasticsearch.action.get.MultiGetResponse; +import org.elasticsearch.common.RestApiVersion; +import org.elasticsearch.common.bytes.BytesReference; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.rest.RestRequest; +import org.elasticsearch.test.rest.FakeRestRequest; +import org.elasticsearch.test.rest.RestActionTestCase; +import org.junit.Before; +import org.mockito.Mockito; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.Matchers.instanceOf; + +public class RestMultiGetActionTests extends RestActionTestCase { + final List contentTypeHeader = Collections.singletonList(randomCompatibleMediaType(RestApiVersion.V_7)); + + @Before + public void setUpAction() { + controller().registerHandler(new RestMultiGetAction(Settings.EMPTY)); + verifyingClient.setExecuteVerifier((actionType, request) -> { + assertThat(request, instanceOf(MultiGetRequest.class)); + return Mockito.mock(MultiGetResponse.class); + }); + } + public void testTypeInPath() { + RestRequest deprecatedRequest = new FakeRestRequest.Builder(xContentRegistry()) + .withHeaders( Map.of("Content-Type", contentTypeHeader, "Accept", contentTypeHeader)) + .withMethod(RestRequest.Method.GET) + .withPath("some_index/some_type/_mget") + .build(); + dispatchRequest(deprecatedRequest); + assertWarnings(RestMultiGetAction.TYPES_DEPRECATION_MESSAGE); + } + + public void testTypeInBody() throws Exception { + XContentBuilder content = XContentFactory.jsonBuilder().startObject() + .startArray("docs") + .startObject() + .field("_index", "some_index") + .field("_type", "_doc") + .field("_id", "2") + .endObject() + .startObject() + .field("_index", "test") + .field("_id", "2") + .endObject() + .endArray() + .endObject(); + + RestRequest request = new FakeRestRequest.Builder(xContentRegistry()) + .withPath("_mget") + .withHeaders( Map.of("Content-Type", contentTypeHeader, "Accept", contentTypeHeader)) + .withContent(BytesReference.bytes(content), null) + .build(); + dispatchRequest(request); + assertWarnings(RestMultiGetAction.TYPES_DEPRECATION_MESSAGE); + } + +} diff --git a/test/framework/src/main/java/org/elasticsearch/test/rest/yaml/section/MatchAssertion.java b/test/framework/src/main/java/org/elasticsearch/test/rest/yaml/section/MatchAssertion.java index 8da311af4691a..feef23c42ba8e 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/rest/yaml/section/MatchAssertion.java +++ b/test/framework/src/main/java/org/elasticsearch/test/rest/yaml/section/MatchAssertion.java @@ -88,6 +88,6 @@ protected void doAssert(Object actualValue, Object expectedValue) { assertThat(actualValue, instanceOf(List.class)); assertMap((List) actualValue, matchesList((List) expectedValue)); } - assertThat(expectedValue, equalTo(actualValue)); + assertThat(actualValue, equalTo(expectedValue)); } } From 4f8d2620d8a9a60c49e41b1afc56ffff959a7a85 Mon Sep 17 00:00:00 2001 From: pgomulka Date: Tue, 8 Jun 2021 13:23:56 +0200 Subject: [PATCH 2/4] fix tests --- rest-api-spec/build.gradle | 48 ++++++++++++++----- .../action/get/MultiGetResponse.java | 4 ++ .../document/RestMultiGetActionTests.java | 6 ++- .../org/elasticsearch/test/ESTestCase.java | 4 ++ 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index b898c355a1b98..7534a17af4331 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -127,14 +127,14 @@ tasks.named("yamlRestCompatTest").configure { 'count/11_basic_with_types/count body without query element', 'count/11_basic_with_types/count with body', 'count/11_basic_with_types/count with empty body', -// 'explain/10_basic/Basic explain', -// 'explain/10_basic/Basic explain with alias', -// 'explain/11_basic_with_types/Basic explain', -// 'explain/11_basic_with_types/Basic explain with alias', -// 'explain/20_source_filtering/Source filtering', -// 'explain/21_source_filtering_with_types/Source filtering', -// 'explain/31_query_string_with_types/explain with query_string parameters', - //'explain/40_mix_typeless_typeful/Explain with typeless API on an index that has types', + 'explain/10_basic/Basic explain', + 'explain/10_basic/Basic explain with alias', + 'explain/11_basic_with_types/Basic explain', + 'explain/11_basic_with_types/Basic explain with alias', + 'explain/20_source_filtering/Source filtering', + 'explain/21_source_filtering_with_types/Source filtering', + 'explain/31_query_string_with_types/explain with query_string parameters', + 'explain/40_mix_typeless_typeful/Explain with typeless API on an index that has types', 'field_caps/30_filter/Field caps with index filter', 'get_source/11_basic_with_types/Basic with types', 'get_source/16_default_values_with_types/Default values', @@ -169,6 +169,24 @@ tasks.named("yamlRestCompatTest").configure { 'indices.upgrade/10_basic/Upgrade indices disallow no indices', 'indices.upgrade/10_basic/Upgrade indices disallow unavailable', 'indices.upgrade/10_basic/Upgrade indices ignore unavailable', +// 'mget/10_basic/Basic multi-get', + // the use case is no longer valid, because we always default to _doc. + // This mean test cases where there is assertion on not finging by type won't work + 'mget/11_default_index_type/Default index/type', + 'mget/16_basic_with_types/Basic multi-get', +// 'mget/14_alias_to_multiple_indices/Multi Get with alias that resolves to multiple indices', +// 'mget/17_default_index/Default index/type', +// 'mget/18_non_existent_index_with_types/Non-existent index', +// 'mget/19_missing_metadata_with_types/Missing metadata', +// 'mget/21_alias_to_multiple_indices_with_types/Multi Get with alias that resolves to multiple indices', +// 'mget/22_ids_with_types/IDs', +// 'mget/23_stored_fields_with_types/Stored fields', +// 'mget/41_routing_with_types/Routing', +// 'mget/61_realtime_refresh_with_types/Realtime Refresh', +// 'mget/71_source_filtering_with_types/Source filtering - exclude field', +// 'mget/71_source_filtering_with_types/Source filtering - include field', +// 'mget/71_source_filtering_with_types/Source filtering - include nested field', +// 'mget/71_source_filtering_with_types/Source filtering - true/false', 'mlt/20_docs/Basic mlt query with docs', 'mlt/30_unlike/Basic mlt query with unlike', 'search.aggregation/10_histogram/Deprecated _time order', @@ -293,9 +311,17 @@ tasks.named("transformV7RestTests").configure({ task -> task.replaceIsTrue("test_1.mappings.doc", "test_1.mappings._doc") task.replaceIsTrue("test_2.mappings.doc", "test_2.mappings._doc") // overrides for mget - task.replaceValueInMatch("docs.0._type", "_doc") - task.replaceValueInMatch("docs.1._type", "_doc") - task.replaceValueInMatch("docs.2._type", "_doc") + task.replaceValueInMatch("docs.0._type", "_doc" , "Basic multi-get") // index found, but no doc + task.replaceValueInMatch("docs.0._type", "_doc", "Default index/type") + task.replaceValueInMatch("docs.0._type", "_doc", "Non-existent index") + task.replaceValueInMatch("docs.0._type", "_doc", "Missing metadata") + task.replaceValueInMatch("docs.0._type", "_doc", "Multi Get with alias that resolves to multiple indices") + task.replaceValueInMatch("docs.1._type", "_doc", "Multi Get with alias that resolves to multiple indices") + task.replaceValueInMatch("docs.2._type", "_doc", "Multi Get with alias that resolves to multiple indices") + task.replaceValueInMatch("docs.0._type", "_doc", "IDs") + task.replaceValueInMatch("docs.1._type", "_doc", "IDs") + task.replaceValueInMatch("docs.2._type", "_doc", "Routing") + }) diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java index 57b6f19e455b2..9583afc3ae6d0 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java @@ -12,6 +12,7 @@ import org.elasticsearch.Version; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.common.ParseField; +import org.elasticsearch.common.RestApiVersion; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -98,6 +99,9 @@ public void writeTo(StreamOutput out) throws IOException { public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.field(INDEX.getPreferredName(), index); + if (builder.getRestApiVersion() == RestApiVersion.V_7) { + builder.field(MapperService.TYPE_FIELD_NAME, MapperService.SINGLE_MAPPING_NAME); + } builder.field(ID.getPreferredName(), id); ElasticsearchException.generateFailureXContent(builder, params, exception, true); builder.endObject(); diff --git a/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java index afafd2c31bfe5..7fbcc9c5aa7f0 100644 --- a/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java +++ b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java @@ -15,6 +15,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.test.rest.FakeRestRequest; import org.elasticsearch.test.rest.RestActionTestCase; @@ -28,7 +29,8 @@ import static org.hamcrest.Matchers.instanceOf; public class RestMultiGetActionTests extends RestActionTestCase { - final List contentTypeHeader = Collections.singletonList(randomCompatibleMediaType(RestApiVersion.V_7)); + XContentType VND_TYPE = randomVendorType(); + List contentTypeHeader = Collections.singletonList(compatibleMediaType(VND_TYPE, RestApiVersion.V_7)); @Before public void setUpAction() { @@ -49,7 +51,7 @@ public void testTypeInPath() { } public void testTypeInBody() throws Exception { - XContentBuilder content = XContentFactory.jsonBuilder().startObject() + XContentBuilder content = XContentFactory.contentBuilder(VND_TYPE).startObject() .startArray("docs") .startObject() .field("_index", "some_index") diff --git a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java index 312e3b39efba1..27dce66a282e4 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java @@ -1157,6 +1157,10 @@ public String compatibleMediaType(XContentType type, RestApiVersion version) { .responseContentTypeHeader(Map.of(MediaType.COMPATIBLE_WITH_PARAMETER_NAME, String.valueOf(version.major))); } + public XContentType randomVendorType() { + return randomFrom(XContentType.VND_JSON, XContentType.VND_SMILE, XContentType.VND_CBOR, XContentType.VND_YAML); + } + public static class GeohashGenerator extends CodepointSetGenerator { private static final char[] ASCII_SET = "0123456789bcdefghjkmnpqrstuvwxyz".toCharArray(); From 720ca20dbb0e1fc144df1c338dfafd2ed7389fc3 Mon Sep 17 00:00:00 2001 From: pgomulka Date: Tue, 8 Jun 2021 14:45:28 +0200 Subject: [PATCH 3/4] gradle cleanup --- rest-api-spec/build.gradle | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index 7534a17af4331..73a9dd8fcdc8c 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -121,7 +121,11 @@ tasks.named("yamlRestCompatTest").configure { 'search/160_exists_query/Test exists query on _type field', //type information is not stored, hence the the index will be found 'termvectors/50_mix_typeless_typeful/Term vectors with typeless API on an index that has types', - // 85 - 13 = 72 tests won't be fixed + // mget - these use cases are no longer valid, because we always default to _doc. + // This mean test cases where there is assertion on not finging by type won't work + 'mget/11_default_index_type/Default index/type', + 'mget/16_basic_with_types/Basic multi-get', + // 88 - 14 = 74 tests won't be fixed 'cluster.voting_config_exclusions/10_basic/Throw exception when adding voting config exclusion and specifying both node_ids and node_names', 'cluster.voting_config_exclusions/10_basic/Throw exception when adding voting config exclusion without specifying nodes', 'count/11_basic_with_types/count body without query element', @@ -169,24 +173,6 @@ tasks.named("yamlRestCompatTest").configure { 'indices.upgrade/10_basic/Upgrade indices disallow no indices', 'indices.upgrade/10_basic/Upgrade indices disallow unavailable', 'indices.upgrade/10_basic/Upgrade indices ignore unavailable', -// 'mget/10_basic/Basic multi-get', - // the use case is no longer valid, because we always default to _doc. - // This mean test cases where there is assertion on not finging by type won't work - 'mget/11_default_index_type/Default index/type', - 'mget/16_basic_with_types/Basic multi-get', -// 'mget/14_alias_to_multiple_indices/Multi Get with alias that resolves to multiple indices', -// 'mget/17_default_index/Default index/type', -// 'mget/18_non_existent_index_with_types/Non-existent index', -// 'mget/19_missing_metadata_with_types/Missing metadata', -// 'mget/21_alias_to_multiple_indices_with_types/Multi Get with alias that resolves to multiple indices', -// 'mget/22_ids_with_types/IDs', -// 'mget/23_stored_fields_with_types/Stored fields', -// 'mget/41_routing_with_types/Routing', -// 'mget/61_realtime_refresh_with_types/Realtime Refresh', -// 'mget/71_source_filtering_with_types/Source filtering - exclude field', -// 'mget/71_source_filtering_with_types/Source filtering - include field', -// 'mget/71_source_filtering_with_types/Source filtering - include nested field', -// 'mget/71_source_filtering_with_types/Source filtering - true/false', 'mlt/20_docs/Basic mlt query with docs', 'mlt/30_unlike/Basic mlt query with unlike', 'search.aggregation/10_histogram/Deprecated _time order', @@ -321,8 +307,6 @@ tasks.named("transformV7RestTests").configure({ task -> task.replaceValueInMatch("docs.0._type", "_doc", "IDs") task.replaceValueInMatch("docs.1._type", "_doc", "IDs") task.replaceValueInMatch("docs.2._type", "_doc", "Routing") - - }) tasks.register('enforceYamlTestConvention').configure { From a6c735d67f341c05b018500c3fd452dfc4ede0af Mon Sep 17 00:00:00 2001 From: pgomulka Date: Wed, 9 Jun 2021 14:05:49 +0200 Subject: [PATCH 4/4] fix compile --- .../main/java/org/elasticsearch/action/get/MultiGetRequest.java | 2 +- .../elasticsearch/rest/action/document/RestMultiGetAction.java | 2 +- .../rest/action/document/RestMultiGetActionTests.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java index e4da6e6c84f58..eacf9f018cdcc 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java @@ -20,7 +20,7 @@ import org.elasticsearch.core.Nullable; import org.elasticsearch.common.xcontent.ParseField; import org.elasticsearch.common.ParsingException; -import org.elasticsearch.common.RestApiVersion; +import org.elasticsearch.core.RestApiVersion; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java index 017aa39d0debf..45d2230d3fec2 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestMultiGetAction.java @@ -10,7 +10,7 @@ import org.elasticsearch.action.get.MultiGetRequest; import org.elasticsearch.client.node.NodeClient; -import org.elasticsearch.common.RestApiVersion; +import org.elasticsearch.core.RestApiVersion; import org.elasticsearch.common.Strings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentParser; diff --git a/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java index 7fbcc9c5aa7f0..064c9ae23df29 100644 --- a/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java +++ b/server/src/test/java/org/elasticsearch/rest/action/document/RestMultiGetActionTests.java @@ -10,7 +10,7 @@ import org.elasticsearch.action.get.MultiGetRequest; import org.elasticsearch.action.get.MultiGetResponse; -import org.elasticsearch.common.RestApiVersion; +import org.elasticsearch.core.RestApiVersion; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder;