Skip to content

Commit 2eb1e8b

Browse files
committed
Make keep alive of point in time optional in search (#62184)
A search request should not be required to extend the keep_alive of a point in time. This change makes that parameter optional.
1 parent 3fc35aa commit 2eb1e8b

File tree

6 files changed

+21
-15
lines changed

6 files changed

+21
-15
lines changed

server/src/main/java/org/elasticsearch/action/search/SearchShardIterator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public SearchShardIterator(@Nullable String clusterAlias, ShardId shardId,
6868
this.clusterAlias = clusterAlias;
6969
this.searchContextId = searchContextId;
7070
this.searchContextKeepAlive = searchContextKeepAlive;
71-
assert (searchContextId == null) == (searchContextKeepAlive == null);
71+
assert searchContextKeepAlive == null || searchContextId != null;
7272
}
7373

7474
/**

server/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,33 +1719,35 @@ private static final class XContentParams {
17191719

17201720
public PointInTimeBuilder(String id, TimeValue keepAlive) {
17211721
this.id = Objects.requireNonNull(id);
1722-
this.keepAlive = Objects.requireNonNull(keepAlive);
1722+
this.keepAlive = keepAlive;
17231723
}
17241724

17251725
public PointInTimeBuilder(StreamInput in) throws IOException {
17261726
id = in.readString();
1727-
keepAlive = in.readTimeValue();
1727+
keepAlive = in.readOptionalTimeValue();
17281728
}
17291729

17301730
@Override
17311731
public void writeTo(StreamOutput out) throws IOException {
17321732
out.writeString(id);
1733-
out.writeTimeValue(keepAlive);
1733+
out.writeOptionalTimeValue(keepAlive);
17341734
}
17351735

17361736
@Override
17371737
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
17381738
builder.startObject(POINT_IN_TIME.getPreferredName());
17391739
builder.field(ID_FIELD.getPreferredName(), id);
1740-
builder.field(KEEP_ALIVE_FIELD.getPreferredName(), keepAlive);
1740+
if (keepAlive != null) {
1741+
builder.field(KEEP_ALIVE_FIELD.getPreferredName(), keepAlive);
1742+
}
17411743
builder.endObject();
17421744
return builder;
17431745
}
17441746

17451747
public static PointInTimeBuilder fromXContent(XContentParser parser) throws IOException {
17461748
final XContentParams params = PARSER.parse(parser, null);
1747-
if (params.id == null || params.keepAlive == null) {
1748-
throw new IllegalArgumentException("id and keep_alive must be specified");
1749+
if (params.id == null) {
1750+
throw new IllegalArgumentException("point int time id is not provided");
17491751
}
17501752
return new PointInTimeBuilder(params.id, params.keepAlive);
17511753
}

server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ private ShardSearchRequest(OriginalIndices originalIndices,
179179
this.originalIndices = originalIndices;
180180
this.readerId = readerId;
181181
this.keepAlive = keepAlive;
182-
assert (readerId != null) == (keepAlive != null);
182+
assert keepAlive == null || readerId != null : "readerId: " + readerId + " keepAlive: " + keepAlive;
183183
}
184184

185185
public ShardSearchRequest(StreamInput in) throws IOException {

server/src/test/java/org/elasticsearch/search/builder/SearchSourceBuilderTests.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -386,17 +386,23 @@ public void testToXContent() throws IOException {
386386
public void testToXContentWithPointInTime() throws IOException {
387387
XContentType xContentType = randomFrom(XContentType.values());
388388
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
389-
searchSourceBuilder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder("id", TimeValue.timeValueHours(1)));
389+
TimeValue keepAlive = randomBoolean() ? TimeValue.timeValueHours(1) : null;
390+
searchSourceBuilder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder("id", keepAlive));
390391
XContentBuilder builder = XContentFactory.contentBuilder(xContentType);
391392
searchSourceBuilder.toXContent(builder, ToXContent.EMPTY_PARAMS);
392393
BytesReference bytes = BytesReference.bytes(builder);
393394
Map<String, Object> sourceAsMap = XContentHelper.convertToMap(bytes, false, xContentType).v2();
394395
assertEquals(1, sourceAsMap.size());
395396
@SuppressWarnings("unchecked")
396397
Map<String, Object> pit = (Map<String, Object>) sourceAsMap.get("pit");
397-
assertEquals(2, pit.size());
398398
assertEquals("id", pit.get("id"));
399-
assertEquals("1h", pit.get("keep_alive"));
399+
if (keepAlive != null) {
400+
assertEquals("1h", pit.get("keep_alive"));
401+
assertEquals(2, pit.size());
402+
} else {
403+
assertNull(pit.get("keep_alive"));
404+
assertEquals(1, pit.size());
405+
}
400406
}
401407

402408
public void testParseIndicesBoost() throws IOException {

test/framework/src/main/java/org/elasticsearch/search/RandomSearchRequestGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,8 @@ public static SearchSourceBuilder randomSearchSourceBuilder(
374374
builder.collapse(randomCollapseBuilder.get());
375375
}
376376
if (randomBoolean()) {
377-
builder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder(randomAlphaOfLengthBetween(3, 10),
378-
TimeValue.timeValueMinutes(randomIntBetween(1, 60))));
377+
TimeValue keepAlive = randomBoolean() ? TimeValue.timeValueMinutes(randomIntBetween(1, 60)) : null;
378+
builder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder(randomAlphaOfLengthBetween(3, 10), keepAlive));
379379
}
380380
return builder;
381381
}

x-pack/plugin/src/test/resources/rest-api-spec/test/search/point_in_time.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ setup:
8686
search_after: [24, 172]
8787
pit:
8888
id: "$point_in_time_id"
89-
keep_alive: 1m
9089

9190
- match: {hits.total: 3 }
9291
- length: {hits.hits: 1 }
@@ -106,7 +105,6 @@ setup:
106105
search_after: [18, 42]
107106
pit:
108107
id: "$point_in_time_id"
109-
keep_alive: 1m
110108

111109
- match: {hits.total: 3}
112110
- length: {hits.hits: 1 }

0 commit comments

Comments
 (0)