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.
This commit is contained in:
parent
3fc35aa76e
commit
2eb1e8bc84
|
@ -68,7 +68,7 @@ public final class SearchShardIterator extends PlainShardIterator {
|
|||
this.clusterAlias = clusterAlias;
|
||||
this.searchContextId = searchContextId;
|
||||
this.searchContextKeepAlive = searchContextKeepAlive;
|
||||
assert (searchContextId == null) == (searchContextKeepAlive == null);
|
||||
assert searchContextKeepAlive == null || searchContextId != null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1719,33 +1719,35 @@ public final class SearchSourceBuilder implements Writeable, ToXContentObject, R
|
|||
|
||||
public PointInTimeBuilder(String id, TimeValue keepAlive) {
|
||||
this.id = Objects.requireNonNull(id);
|
||||
this.keepAlive = Objects.requireNonNull(keepAlive);
|
||||
this.keepAlive = keepAlive;
|
||||
}
|
||||
|
||||
public PointInTimeBuilder(StreamInput in) throws IOException {
|
||||
id = in.readString();
|
||||
keepAlive = in.readTimeValue();
|
||||
keepAlive = in.readOptionalTimeValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
out.writeString(id);
|
||||
out.writeTimeValue(keepAlive);
|
||||
out.writeOptionalTimeValue(keepAlive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(POINT_IN_TIME.getPreferredName());
|
||||
builder.field(ID_FIELD.getPreferredName(), id);
|
||||
builder.field(KEEP_ALIVE_FIELD.getPreferredName(), keepAlive);
|
||||
if (keepAlive != null) {
|
||||
builder.field(KEEP_ALIVE_FIELD.getPreferredName(), keepAlive);
|
||||
}
|
||||
builder.endObject();
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static PointInTimeBuilder fromXContent(XContentParser parser) throws IOException {
|
||||
final XContentParams params = PARSER.parse(parser, null);
|
||||
if (params.id == null || params.keepAlive == null) {
|
||||
throw new IllegalArgumentException("id and keep_alive must be specified");
|
||||
if (params.id == null) {
|
||||
throw new IllegalArgumentException("point int time id is not provided");
|
||||
}
|
||||
return new PointInTimeBuilder(params.id, params.keepAlive);
|
||||
}
|
||||
|
|
|
@ -179,7 +179,7 @@ public class ShardSearchRequest extends TransportRequest implements IndicesReque
|
|||
this.originalIndices = originalIndices;
|
||||
this.readerId = readerId;
|
||||
this.keepAlive = keepAlive;
|
||||
assert (readerId != null) == (keepAlive != null);
|
||||
assert keepAlive == null || readerId != null : "readerId: " + readerId + " keepAlive: " + keepAlive;
|
||||
}
|
||||
|
||||
public ShardSearchRequest(StreamInput in) throws IOException {
|
||||
|
|
|
@ -386,7 +386,8 @@ public class SearchSourceBuilderTests extends AbstractSearchTestCase {
|
|||
public void testToXContentWithPointInTime() throws IOException {
|
||||
XContentType xContentType = randomFrom(XContentType.values());
|
||||
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
||||
searchSourceBuilder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder("id", TimeValue.timeValueHours(1)));
|
||||
TimeValue keepAlive = randomBoolean() ? TimeValue.timeValueHours(1) : null;
|
||||
searchSourceBuilder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder("id", keepAlive));
|
||||
XContentBuilder builder = XContentFactory.contentBuilder(xContentType);
|
||||
searchSourceBuilder.toXContent(builder, ToXContent.EMPTY_PARAMS);
|
||||
BytesReference bytes = BytesReference.bytes(builder);
|
||||
|
@ -394,9 +395,14 @@ public class SearchSourceBuilderTests extends AbstractSearchTestCase {
|
|||
assertEquals(1, sourceAsMap.size());
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> pit = (Map<String, Object>) sourceAsMap.get("pit");
|
||||
assertEquals(2, pit.size());
|
||||
assertEquals("id", pit.get("id"));
|
||||
assertEquals("1h", pit.get("keep_alive"));
|
||||
if (keepAlive != null) {
|
||||
assertEquals("1h", pit.get("keep_alive"));
|
||||
assertEquals(2, pit.size());
|
||||
} else {
|
||||
assertNull(pit.get("keep_alive"));
|
||||
assertEquals(1, pit.size());
|
||||
}
|
||||
}
|
||||
|
||||
public void testParseIndicesBoost() throws IOException {
|
||||
|
|
|
@ -374,8 +374,8 @@ public class RandomSearchRequestGenerator {
|
|||
builder.collapse(randomCollapseBuilder.get());
|
||||
}
|
||||
if (randomBoolean()) {
|
||||
builder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder(randomAlphaOfLengthBetween(3, 10),
|
||||
TimeValue.timeValueMinutes(randomIntBetween(1, 60))));
|
||||
TimeValue keepAlive = randomBoolean() ? TimeValue.timeValueMinutes(randomIntBetween(1, 60)) : null;
|
||||
builder.pointInTimeBuilder(new SearchSourceBuilder.PointInTimeBuilder(randomAlphaOfLengthBetween(3, 10), keepAlive));
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
|
|
@ -86,7 +86,6 @@ setup:
|
|||
search_after: [24, 172]
|
||||
pit:
|
||||
id: "$point_in_time_id"
|
||||
keep_alive: 1m
|
||||
|
||||
- match: {hits.total: 3 }
|
||||
- length: {hits.hits: 1 }
|
||||
|
@ -106,7 +105,6 @@ setup:
|
|||
search_after: [18, 42]
|
||||
pit:
|
||||
id: "$point_in_time_id"
|
||||
keep_alive: 1m
|
||||
|
||||
- match: {hits.total: 3}
|
||||
- length: {hits.hits: 1 }
|
||||
|
|
Loading…
Reference in New Issue