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 47dd444ea5463..07d3ce81fea8c 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 @@
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 String getId() {
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 XContentBuilder toXContent(XContentBuilder builder, Params params) throws
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 XContentBuilder toXContent(XContentBuilder builder, Params params) throws
}
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 XContentBuilder toXContent(XContentBuilder builder, Params params) throws
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 @@ private static SearchResponse parseSearchResponse(XContentParser p) throws IOExc
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 a1c608b3c6ef4..d0f6ddc93080f 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 void testSubmitAsyncSearchRequest() throws IOException {
// 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 6caf69db9ac6c..08c0da25e5bb6 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 @@ protected org.elasticsearch.xpack.core.search.action.AsyncSearchResponse createS
: 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 @@ protected AsyncSearchResponse doParseToClientInstance(XContentParser parser) thr
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 1b94e4000f38f..32b89f02d0523 100644
--- a/docs/reference/search/async-search.asciidoc
+++ b/docs/reference/search/async-search.asciidoc
@@ -43,7 +43,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,
@@ -135,17 +134,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" : 38, <4>
"_shards" : {
- "total" : 562,
+ "total" : 562, <5>
"successful" : 188,
"skipped" : 0,
"failed" : 0
@@ -158,7 +156,7 @@ GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsd
"max_score" : null,
"hits" : [ ]
},
- "aggregations" : { <5>
+ "aggregations" : { <6>
"sale_date" : {
"buckets" : []
}
@@ -178,15 +176,16 @@ GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsd
// TESTRESPONSE[s/"buckets" : \[\]/"buckets": $body.response.aggregations.sale_date.buckets/]
// TESTRESPONSE[s/"num_reduce_phases" : 38,//]
-<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/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 82e311fc8bb8a..cce587abd15d3 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 @@ synchronized void updatePartialResponse(int successfulShards, SearchResponseSect
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 @@ synchronized void updatePartialResponse(int successfulShards, SearchResponseSect
*/
synchronized void updateFinalResponse(int successfulShards, SearchResponseSections newSections) {
failIfFrozen();
- ++ version;
this.successfulShards = successfulShards;
this.sections = newSections;
this.isPartial = false;
@@ -110,7 +106,6 @@ synchronized void updateFinalResponse(int successfulShards, SearchResponseSectio
*/
synchronized void updateWithFailure(Exception exc) {
failIfFrozen();
- ++ version;
this.isPartial = true;
this.failure = ElasticsearchException.guessRootCauses(exc)[0];
this.frozen = true;
@@ -147,7 +142,7 @@ synchronized AsyncSearchResponse toAsyncSearchResponse(AsyncSearchTask task, lon
} 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 @@ private void failIfFrozen() {
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/AsyncSearchResponseTests.java b/x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/AsyncSearchResponseTests.java
index 925ce9d7897eb..9b68453e5306b 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 @@ static AsyncSearchResponse randomAsyncSearchResponse(String searchId, SearchResp
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 @@ static SearchResponse randomSearchResponse() {
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 80d1439f80abc..ad46baf891864 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 @@
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 AsyncSearchResponse(String id,
* @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 AsyncSearchResponse(String id,
long startTimeMillis,
long expirationTimeMillis) {
this.id = id;
- this.version = version;
this.error = error;
this.searchResponse = searchResponse;
this.isPartial = isPartial;
@@ -80,7 +75,6 @@ public AsyncSearchResponse(String id,
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 AsyncSearchResponse(StreamInput in) throws IOException {
@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 void writeTo(StreamOutput out) throws IOException {
}
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 String getId() {
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 XContentBuilder toXContent(XContentBuilder builder, Params params) throws
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 dd78157e79bef..c373217b06c99 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,7 +72,6 @@
field: max
sort: max
- - match: { version: 6 }
- match: { is_partial: false }
- length: { response.hits.hits: 3 }
- match: { response.hits.hits.0._source.max: 1 }
@@ -95,7 +93,6 @@
sort: max
- set: { id: id }
- - match: { version: 6 }
- match: { is_partial: false }
- is_false: response._clusters
- length: { response.hits.hits: 3 }
@@ -106,7 +103,6 @@
async_search.get:
id: "$id"
- - match: { version: 6 }
- match: { is_partial: false }
- is_false: response._clusters
- length: { response.hits.hits: 3 }
@@ -119,7 +115,6 @@
id: "$id"
typed_keys: true
- - match: { version: 6 }
- match: { is_partial: false }
- is_false: response._clusters
- length: { response.hits.hits: 3 }