diff --git a/modules/reindex/build.gradle b/modules/reindex/build.gradle index 3a5d93629d455..6f456f533e2b8 100644 --- a/modules/reindex/build.gradle +++ b/modules/reindex/build.gradle @@ -163,16 +163,11 @@ if (Os.isFamily(Os.FAMILY_WINDOWS)) { tasks.named("yamlRestCompatTest").configure { systemProperty 'tests.rest.blacklist', [ - 'reindex/20_validation/reindex without source gives useful error message', /* type in exception message */ - 'reindex/85_scripting/Reindex all docs with one doc deletion', /*type in a request*/ - 'delete_by_query/10_basic/Limit by size', + /*type related failures */ + 'reindex/20_validation/reindex without source gives useful error message', + 'reindex/85_scripting/Reindex all docs with one doc deletion', 'delete_by_query/10_basic/Response for version conflict (seq no powered)', - 'delete_by_query/20_validation/both max_docs and size fails', - 'delete_by_query/20_validation/invalid size fails', - 'update_by_query/10_basic/Limit by size', 'update_by_query/10_basic/Response for version conflict (seq no powered)', - 'update_by_query/20_validation/inconsistent max_docs and size fails', - 'update_by_query/20_validation/invalid size fails', 'update_by_query/20_validation/update_by_query without source gives useful error message' ].join(',') } diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractBulkByQueryRestHandler.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractBulkByQueryRestHandler.java index 682f0f763b6a9..59e6a17711914 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractBulkByQueryRestHandler.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractBulkByQueryRestHandler.java @@ -10,8 +10,10 @@ import org.elasticsearch.action.ActionType; import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.common.RestApiVersion; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; +import org.elasticsearch.common.xcontent.LoggingDeprecationHandler; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; @@ -21,6 +23,7 @@ import java.io.IOException; import java.util.Map; import java.util.function.Consumer; +import java.util.function.IntConsumer; /** * Rest handler for reindex actions that accepts a search request like Update-By-Query or Delete-By-Query @@ -41,7 +44,10 @@ protected void parseInternalRequest(Request internal, RestRequest restRequest, N SearchRequest searchRequest = internal.getSearchRequest(); try (XContentParser parser = extractRequestSpecificFields(restRequest, bodyConsumers)) { - RestSearchAction.parseSearchRequest(searchRequest, restRequest, parser, namedWriteableRegistry, size -> failOnSizeSpecified()); + IntConsumer sizeConsumer = restRequest.getRestApiVersion() == RestApiVersion.V_7 ? + size -> setMaxDocsFromSearchSize(internal, size) : + size -> failOnSizeSpecified(); + RestSearchAction.parseSearchRequest(searchRequest, restRequest, parser, namedWriteableRegistry, sizeConsumer); } searchRequest.source().size(restRequest.paramAsInt("scroll_size", searchRequest.source().size())); @@ -87,4 +93,9 @@ private XContentParser extractRequestSpecificFields(RestRequest restRequest, private static void failOnSizeSpecified() { throw new IllegalArgumentException("invalid parameter [size], use [max_docs] instead"); } + + private void setMaxDocsFromSearchSize(Request request, int size) { + LoggingDeprecationHandler.INSTANCE.logRenamedField(null, null, "size", "max_docs", true); + setMaxDocsValidateIdentical(request, size); + } }