diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponse.java index 47dd444ea54..07d3ce81fea 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponse.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponse.java @@ -41,7 +41,6 @@ import static org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpect public class AsyncSearchResponse implements ToXContentObject { @Nullable private final String id; - private final int version; @Nullable private final SearchResponse searchResponse; @Nullable @@ -55,15 +54,13 @@ public class AsyncSearchResponse implements ToXContentObject { /** * Creates an {@link AsyncSearchResponse} with the arguments that are always present in the server response */ - AsyncSearchResponse(int version, - boolean isPartial, - boolean isRunning, - long startTimeMillis, - long expirationTimeMillis, - @Nullable String id, - @Nullable SearchResponse searchResponse, - @Nullable ElasticsearchException error) { - this.version = version; + AsyncSearchResponse(boolean isPartial, + boolean isRunning, + long startTimeMillis, + long expirationTimeMillis, + @Nullable String id, + @Nullable SearchResponse searchResponse, + @Nullable ElasticsearchException error) { this.isPartial = isPartial; this.isRunning = isRunning; this.startTimeMillis = startTimeMillis; @@ -81,13 +78,6 @@ public class AsyncSearchResponse implements ToXContentObject { return id; } - /** - * Returns the version of this response. - */ - public int getVersion() { - return version; - } - /** * Returns the current {@link SearchResponse} or null if not available. * @@ -145,7 +135,6 @@ public class AsyncSearchResponse implements ToXContentObject { if (id != null) { builder.field("id", id); } - builder.field("version", version); builder.field("is_partial", isPartial); builder.field("is_running", isRunning); builder.field("start_time_in_millis", startTimeMillis); @@ -165,7 +154,6 @@ public class AsyncSearchResponse implements ToXContentObject { } public static final ParseField ID_FIELD = new ParseField("id"); - public static final ParseField VERSION_FIELD = new ParseField("version"); public static final ParseField IS_PARTIAL_FIELD = new ParseField("is_partial"); public static final ParseField IS_RUNNING_FIELD = new ParseField("is_running"); public static final ParseField START_TIME_FIELD = new ParseField("start_time_in_millis"); @@ -176,16 +164,14 @@ public class AsyncSearchResponse implements ToXContentObject { public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>( "submit_async_search_response", true, args -> new AsyncSearchResponse( - (int) args[0], + (boolean) args[0], (boolean) args[1], - (boolean) args[2], + (long) args[2], (long) args[3], - (long) args[4], - (String) args[5], - (SearchResponse) args[6], - (ElasticsearchException) args[7])); + (String) args[4], + (SearchResponse) args[5], + (ElasticsearchException) args[6])); static { - PARSER.declareInt(constructorArg(), VERSION_FIELD); PARSER.declareBoolean(constructorArg(), IS_PARTIAL_FIELD); PARSER.declareBoolean(constructorArg(), IS_RUNNING_FIELD); PARSER.declareLong(constructorArg(), START_TIME_FIELD); @@ -203,7 +189,7 @@ public class AsyncSearchResponse implements ToXContentObject { return SearchResponse.innerFromXContent(p); } - public static AsyncSearchResponse fromXContent(XContentParser parser) throws IOException { + public static AsyncSearchResponse fromXContent(XContentParser parser) { return PARSER.apply(parser, null); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchIT.java index a1c608b3c6e..d0f6ddc9308 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchIT.java @@ -40,7 +40,6 @@ public class AsyncSearchIT extends ESRestHighLevelClientTestCase { // 15 sec should be enough to make sure we always complete right away request.setWaitForCompletion(new TimeValue(15, TimeUnit.SECONDS)); AsyncSearchResponse response = highLevelClient().asyncSearch().submitAsyncSearch(request, RequestOptions.DEFAULT); - assertTrue(response.getVersion() >= 0); assertFalse(response.isPartial()); assertTrue(response.getStartTime() > 0); assertTrue(response.getExpirationTime() > 0); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponseTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponseTests.java index 6caf69db9ac..08c0da25e5b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponseTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/asyncsearch/AsyncSearchResponseTests.java @@ -36,7 +36,6 @@ public class AsyncSearchResponseTests @Override protected org.elasticsearch.xpack.core.search.action.AsyncSearchResponse createServerTestInstance(XContentType xContentType) { - int version = randomIntBetween(0, Integer.MAX_VALUE); boolean isPartial = randomBoolean(); boolean isRunning = randomBoolean(); long startTimeMillis = randomLongBetween(0, Long.MAX_VALUE); @@ -48,7 +47,7 @@ public class AsyncSearchResponseTests : new SearchResponse(InternalSearchResponse.empty(), randomAlphaOfLength(10), 1, 1, 0, randomIntBetween(0, 10000), ShardSearchFailure.EMPTY_ARRAY, Clusters.EMPTY); org.elasticsearch.xpack.core.search.action.AsyncSearchResponse testResponse = - new org.elasticsearch.xpack.core.search.action.AsyncSearchResponse(id, version, searchResponse, error, isPartial, isRunning, + new org.elasticsearch.xpack.core.search.action.AsyncSearchResponse(id, searchResponse, error, isPartial, isRunning, startTimeMillis, expirationTimeMillis); return testResponse; } @@ -62,7 +61,6 @@ public class AsyncSearchResponseTests protected void assertInstances(org.elasticsearch.xpack.core.search.action.AsyncSearchResponse expected, AsyncSearchResponse parsed) { assertNotSame(parsed, expected); assertEquals(expected.getId(), parsed.getId()); - assertEquals(expected.getVersion(), parsed.getVersion()); assertEquals(expected.isRunning(), parsed.isRunning()); assertEquals(expected.isPartial(), parsed.isPartial()); assertEquals(expected.getStartTime(), parsed.getStartTime()); diff --git a/docs/reference/search/async-search.asciidoc b/docs/reference/search/async-search.asciidoc index b5df771b643..7f5957a94e4 100644 --- a/docs/reference/search/async-search.asciidoc +++ b/docs/reference/search/async-search.asciidoc @@ -30,9 +30,8 @@ POST /sales*/_async_search?size=0 } } -------------------------------------------------- -// TEST[skip:"AwaitsFix https://github.com/elastic/elasticsearch/issues/53891"] // TEST[setup:sales] -// TEST[s/size=0/size=0&wait_for_completion=0/] +// TEST[s/size=0/size=0&wait_for_completion=10s&clean_on_completion=false/] The response contains an identifier of the search being executed. You can use this ID to later retrieve the search's final results. @@ -43,7 +42,6 @@ results are returned as part of the <> obje -------------------------------------------------- { "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=", <1> - "version" : 0, "is_partial" : true, <2> "is_running" : true, <3> "start_time_in_millis" : 1583945890986, @@ -70,12 +68,17 @@ results are returned as part of the <> obje } -------------------------------------------------- // TESTRESPONSE[s/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=/$body.id/] +// TESTRESPONSE[s/"is_partial" : true/"is_partial": $body.is_partial/] +// TESTRESPONSE[s/"is_running" : true/"is_running": $body.is_running/] // TESTRESPONSE[s/1583945890986/$body.start_time_in_millis/] // TESTRESPONSE[s/1584377890986/$body.expiration_time_in_millis/] // TESTRESPONSE[s/"took" : 1122/"took": $body.response.took/] +// TESTRESPONSE[s/"num_reduce_phases" : 0,//] // TESTRESPONSE[s/"total" : 562/"total": $body.response._shards.total/] // TESTRESPONSE[s/"successful" : 3/"successful": $body.response._shards.successful/] // TESTRESPONSE[s/"value" : 157483/"value": $body.response.hits.total.value/] +// TESTRESPONSE[s/"relation" : "gte"/"relation": $body.response.hits.total.relation/] +// TESTRESPONSE[s/"hits" : \[ \]\n\s\s\s\s\}/"hits" : \[\]},"aggregations": $body.response.aggregations/] <1> Identifier of the async search that can be used to monitor its progress, retrieve its results, and/or delete it. <2> Whether the returned search results are partial or final @@ -135,17 +138,16 @@ GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsd -------------------------------------------------- { "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=", - "version" : 2, <1> - "is_partial" : true, <2> - "is_running" : true, <3> + "is_partial" : true, <1> + "is_running" : true, <2> "start_time_in_millis" : 1583945890986, - "expiration_time_in_millis" : 1584377890986, <4> + "expiration_time_in_millis" : 1584377890986, <3> "response" : { "took" : 12144, "timed_out" : false, - "num_reduce_phases" : 38, + "num_reduce_phases" : 46, <4> "_shards" : { - "total" : 562, + "total" : 562, <5> "successful" : 188, "skipped" : 0, "failed" : 0 @@ -158,7 +160,7 @@ GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsd "max_score" : null, "hits" : [ ] }, - "aggregations" : { <5> + "aggregations" : { <6> "sale_date" : { "buckets" : [] } @@ -176,17 +178,18 @@ GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsd // TESTRESPONSE[s/"successful" : 188/"successful": $body.response._shards.successful/] // TESTRESPONSE[s/"value" : 456433/"value": $body.response.hits.total.value/] // TESTRESPONSE[s/"buckets" : \[\]/"buckets": $body.response.aggregations.sale_date.buckets/] -// TESTRESPONSE[s/"num_reduce_phases" : 38,//] +// TESTRESPONSE[s/"num_reduce_phases" : 46,//] -<1> The returned `version` is useful to identify whether the response contains -additional results compared to previously obtained responses. If the version -stays the same, no new results have become available, otherwise a higher version -number indicates that more shards have completed their execution of the query -and their partial results are also included in the response. -<2> Whether the returned search results are partial or final -<3> Whether the search is still being executed or it has completed -<4> When the async search will expire -<5> Partial aggregations results, coming from the shards that have already +<1> Whether the returned search results are partial or final +<2> Whether the search is still being executed or it has completed +<3> When the async search will expire +<4> Indicates how many reduction of the results have been performed. If this +number increases compared to the last retrieved results, you can expect +additional results included in the search response +<5> Indicates how many shards have executed the query. Note that in order for +shard results to be included in the search response, they need to be reduced +first. +<6> Partial aggregations results, coming from the shards that have already completed the execution of the query. The `wait_for_completion` parameter, which defaults to `1`, can also be provided diff --git a/server/src/main/java/org/elasticsearch/action/search/SearchResponse.java b/server/src/main/java/org/elasticsearch/action/search/SearchResponse.java index 1c47cc847d7..f8ad1261e3f 100644 --- a/server/src/main/java/org/elasticsearch/action/search/SearchResponse.java +++ b/server/src/main/java/org/elasticsearch/action/search/SearchResponse.java @@ -420,9 +420,7 @@ public class SearchResponse extends ActionResponse implements StatusToXContentOb } private Clusters(StreamInput in) throws IOException { - this.total = in.readVInt(); - this.successful = in.readVInt(); - this.skipped = in.readVInt(); + this(in.readVInt(), in.readVInt(), in.readVInt()); } @Override @@ -434,7 +432,7 @@ public class SearchResponse extends ActionResponse implements StatusToXContentOb @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - if (this != EMPTY) { + if (total > 0) { builder.startObject(_CLUSTERS_FIELD.getPreferredName()); builder.field(TOTAL_FIELD.getPreferredName(), total); builder.field(SUCCESSFUL_FIELD.getPreferredName(), successful); diff --git a/server/src/test/java/org/elasticsearch/action/search/SearchResponseTests.java b/server/src/test/java/org/elasticsearch/action/search/SearchResponseTests.java index ed5104cabe5..299f1212e55 100644 --- a/server/src/test/java/org/elasticsearch/action/search/SearchResponseTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/SearchResponseTests.java @@ -29,6 +29,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.text.Text; import org.elasticsearch.common.xcontent.NamedXContentRegistry; import org.elasticsearch.common.xcontent.ToXContent; +import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; @@ -292,4 +293,13 @@ public class SearchResponseTests extends ESTestCase { assertEquals(searchResponse.getSkippedShards(), deserialized.getSkippedShards()); assertEquals(searchResponse.getClusters(), deserialized.getClusters()); } + + public void testToXContentEmptyClusters() throws IOException { + SearchResponse searchResponse = new SearchResponse(InternalSearchResponse.empty(), null, 1, 1, 0, 1, + ShardSearchFailure.EMPTY_ARRAY, SearchResponse.Clusters.EMPTY); + SearchResponse deserialized = copyWriteable(searchResponse, namedWriteableRegistry, SearchResponse::new, Version.CURRENT); + XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent()); + deserialized.getClusters().toXContent(builder, ToXContent.EMPTY_PARAMS); + assertEquals(0, Strings.toString(builder).length()); + } } diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchIndexService.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchIndexService.java index b9badfe8443..b94b8900e1f 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchIndexService.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchIndexService.java @@ -66,14 +66,14 @@ class AsyncSearchIndexService { public static final String EXPIRATION_TIME_FIELD = "expiration_time"; public static final String RESULT_FIELD = "result"; - public static Settings settings() { + private static Settings settings() { return Settings.builder() .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1) + .put(IndexMetaData.SETTING_AUTO_EXPAND_REPLICAS, "0-1") .build(); } - public static XContentBuilder mappings() throws IOException { + private static XContentBuilder mappings() throws IOException { XContentBuilder builder = jsonBuilder() .startObject() .startObject(SINGLE_MAPPING_NAME) diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/MutableSearchResponse.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/MutableSearchResponse.java index 8471dac8bbc..6666dc8d7c4 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/MutableSearchResponse.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/MutableSearchResponse.java @@ -40,7 +40,6 @@ class MutableSearchResponse { private final AtomicArray shardFailures; private final Supplier aggReduceContextSupplier; - private int version; private boolean isPartial; private boolean isFinalReduce; private int successfulShards; @@ -63,7 +62,6 @@ class MutableSearchResponse { this.skippedShards = skippedShards; this.clusters = clusters; this.aggReduceContextSupplier = aggReduceContextSupplier; - this.version = 0; this.shardFailures = totalShards == -1 ? null : new AtomicArray<>(totalShards-skippedShards); this.isPartial = true; this.sections = totalShards == -1 ? null : new InternalSearchResponse( @@ -83,7 +81,6 @@ class MutableSearchResponse { throw new IllegalStateException("received partial response out of order: " + newSections.getNumReducePhases() + " < " + sections.getNumReducePhases()); } - ++ version; this.successfulShards = successfulShards; this.sections = newSections; this.isPartial = true; @@ -96,7 +93,6 @@ class MutableSearchResponse { */ synchronized void updateFinalResponse(int successfulShards, SearchResponseSections newSections) { failIfFrozen(); - ++ version; this.successfulShards = successfulShards; this.sections = newSections; this.isPartial = false; @@ -110,7 +106,6 @@ class MutableSearchResponse { */ synchronized void updateWithFailure(Exception exc) { failIfFrozen(); - ++ version; this.isPartial = true; this.failure = ElasticsearchException.guessRootCauses(exc)[0]; this.frozen = true; @@ -147,7 +142,7 @@ class MutableSearchResponse { } else { resp = null; } - return new AsyncSearchResponse(task.getSearchId().getEncoded(), version, resp, failure, isPartial, + return new AsyncSearchResponse(task.getSearchId().getEncoded(), resp, failure, isPartial, frozen == false, task.getStartTime(), expirationTime); } @@ -159,7 +154,7 @@ class MutableSearchResponse { private ShardSearchFailure[] buildShardFailures() { if (shardFailures == null) { - return new ShardSearchFailure[0]; + return ShardSearchFailure.EMPTY_ARRAY; } List failures = new ArrayList<>(); for (int i = 0; i < shardFailures.length(); i++) { diff --git a/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchIndexServiceTests.java b/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchIndexServiceTests.java index afc7627b2e4..c66c61f9343 100644 --- a/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchIndexServiceTests.java +++ b/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchIndexServiceTests.java @@ -5,6 +5,10 @@ */ package org.elasticsearch.xpack.search; +import org.elasticsearch.action.admin.indices.get.GetIndexRequest; +import org.elasticsearch.action.admin.indices.get.GetIndexResponse; +import org.elasticsearch.action.support.PlainActionFuture; +import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.ThreadContext; @@ -17,6 +21,7 @@ import org.junit.Before; import java.io.IOException; import java.util.Collections; +import java.util.concurrent.ExecutionException; import static org.elasticsearch.xpack.search.AsyncSearchResponseTests.assertEqualResponses; import static org.elasticsearch.xpack.search.AsyncSearchResponseTests.randomAsyncSearchResponse; @@ -100,4 +105,15 @@ public class AsyncSearchIndexServiceTests extends ESSingleNodeTestCase { assertFalse(indexService.ensureAuthenticatedUserIsSame(original, runAsDiffType)); assertFalse(indexService.ensureAuthenticatedUserIsSame(threadContext.getHeaders(), runAsDiffType)); } + + public void testSettings() throws ExecutionException, InterruptedException { + PlainActionFuture future = PlainActionFuture.newFuture(); + indexService.createIndexIfNecessary(future); + future.get(); + GetIndexResponse getIndexResponse = client().admin().indices().getIndex( + new GetIndexRequest().indices(AsyncSearchIndexService.INDEX)).actionGet(); + Settings settings = getIndexResponse.getSettings().get(AsyncSearchIndexService.INDEX); + assertEquals("1", settings.get(IndexMetaData.SETTING_NUMBER_OF_SHARDS)); + assertEquals("0-1", settings.get(IndexMetaData.SETTING_AUTO_EXPAND_REPLICAS)); + } } diff --git a/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchResponseTests.java b/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchResponseTests.java index 6c91de0bfa4..97646236004 100644 --- a/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchResponseTests.java +++ b/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchResponseTests.java @@ -91,15 +91,15 @@ public class AsyncSearchResponseTests extends ESTestCase { int rand = randomIntBetween(0, 2); switch (rand) { case 0: - return new AsyncSearchResponse(searchId, randomIntBetween(0, Integer.MAX_VALUE), randomBoolean(), + return new AsyncSearchResponse(searchId, randomBoolean(), randomBoolean(), randomNonNegativeLong(), randomNonNegativeLong()); case 1: - return new AsyncSearchResponse(searchId, randomIntBetween(0, Integer.MAX_VALUE), searchResponse, null, + return new AsyncSearchResponse(searchId, searchResponse, null, randomBoolean(), randomBoolean(), randomNonNegativeLong(), randomNonNegativeLong()); case 2: - return new AsyncSearchResponse(searchId, randomIntBetween(0, Integer.MAX_VALUE), searchResponse, + return new AsyncSearchResponse(searchId, searchResponse, new ElasticsearchException(new IOException("boum")), randomBoolean(), randomBoolean(), randomNonNegativeLong(), randomNonNegativeLong()); @@ -120,7 +120,6 @@ public class AsyncSearchResponseTests extends ESTestCase { static void assertEqualResponses(AsyncSearchResponse expected, AsyncSearchResponse actual) { assertEquals(expected.getId(), actual.getId()); - assertEquals(expected.getVersion(), actual.getVersion()); assertEquals(expected.status(), actual.status()); assertEquals(expected.getFailure() == null, actual.getFailure() == null); assertEquals(expected.isRunning(), actual.isRunning()); diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/search/action/AsyncSearchResponse.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/search/action/AsyncSearchResponse.java index 80d1439f80a..ad46baf8918 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/search/action/AsyncSearchResponse.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/search/action/AsyncSearchResponse.java @@ -25,7 +25,6 @@ import static org.elasticsearch.rest.RestStatus.OK; public class AsyncSearchResponse extends ActionResponse implements StatusToXContentObject { @Nullable private final String id; - private final int version; @Nullable private final SearchResponse searchResponse; @Nullable @@ -40,19 +39,17 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont * Creates an {@link AsyncSearchResponse} with meta-information only (not-modified). */ public AsyncSearchResponse(String id, - int version, boolean isPartial, boolean isRunning, long startTimeMillis, long expirationTimeMillis) { - this(id, version, null, null, isPartial, isRunning, startTimeMillis, expirationTimeMillis); + this(id, null, null, isPartial, isRunning, startTimeMillis, expirationTimeMillis); } /** * Creates a new {@link AsyncSearchResponse} * * @param id The id of the search for further retrieval, null if not stored. - * @param version The version number of this response. * @param searchResponse The actual search response. * @param error The error if the search failed, null if the search is running * or has completed without failure. @@ -61,7 +58,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont * @param startTimeMillis The start date of the search in milliseconds since epoch. */ public AsyncSearchResponse(String id, - int version, SearchResponse searchResponse, ElasticsearchException error, boolean isPartial, @@ -69,7 +65,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont long startTimeMillis, long expirationTimeMillis) { this.id = id; - this.version = version; this.error = error; this.searchResponse = searchResponse; this.isPartial = isPartial; @@ -80,7 +75,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont public AsyncSearchResponse(StreamInput in) throws IOException { this.id = in.readOptionalString(); - this.version = in.readVInt(); this.error = in.readOptionalWriteable(ElasticsearchException::new); this.searchResponse = in.readOptionalWriteable(SearchResponse::new); this.isPartial = in.readBoolean(); @@ -92,7 +86,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont @Override public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(id); - out.writeVInt(version); out.writeOptionalWriteable(error); out.writeOptionalWriteable(searchResponse); out.writeBoolean(isPartial); @@ -102,7 +95,7 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont } public AsyncSearchResponse clone(String id) { - return new AsyncSearchResponse(id, version, searchResponse, error, isPartial, false, startTimeMillis, expirationTimeMillis); + return new AsyncSearchResponse(id, searchResponse, error, isPartial, false, startTimeMillis, expirationTimeMillis); } /** @@ -113,13 +106,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont return id; } - /** - * Returns the version of this response. - */ - public int getVersion() { - return version; - } - /** * Returns the current {@link SearchResponse} or null if not available. * @@ -189,7 +175,6 @@ public class AsyncSearchResponse extends ActionResponse implements StatusToXCont if (id != null) { builder.field("id", id); } - builder.field("version", version); builder.field("is_partial", isPartial); builder.field("is_running", isRunning); builder.field("start_time_in_millis", startTimeMillis); diff --git a/x-pack/plugin/src/test/resources/rest-api-spec/test/async_search/10_basic.yml b/x-pack/plugin/src/test/resources/rest-api-spec/test/async_search/10_basic.yml index 292e3bd6cce..c373217b06c 100644 --- a/x-pack/plugin/src/test/resources/rest-api-spec/test/async_search/10_basic.yml +++ b/x-pack/plugin/src/test/resources/rest-api-spec/test/async_search/10_basic.yml @@ -54,7 +54,6 @@ sort: max - is_false: id - - match: { version: 6 } - match: { is_partial: false } - length: { response.hits.hits: 3 } - match: { response.hits.hits.0._source.max: 1 } @@ -73,8 +72,6 @@ field: max sort: max - - set: { id: id } - - match: { version: 6 } - match: { is_partial: false } - length: { response.hits.hits: 3 } - match: { response.hits.hits.0._source.max: 1 } @@ -96,8 +93,8 @@ sort: max - set: { id: id } - - match: { version: 6 } - match: { is_partial: false } + - is_false: response._clusters - length: { response.hits.hits: 3 } - match: { response.hits.hits.0._source.max: 1 } - match: { response.aggregations.max#max.value: 3.0 } @@ -106,8 +103,8 @@ async_search.get: id: "$id" - - match: { version: 6 } - match: { is_partial: false } + - is_false: response._clusters - length: { response.hits.hits: 3 } - match: { response.hits.hits.0._source.max: 1 } - match: { response.aggregations.max.value: 3.0 } @@ -118,8 +115,8 @@ id: "$id" typed_keys: true - - match: { version: 6 } - match: { is_partial: false } + - is_false: response._clusters - length: { response.hits.hits: 3 } - match: { response.hits.hits.0._source.max: 1 } - match: { response.aggregations.max#max.value: 3.0 }