Skip to content

Commit d8812a6

Browse files
Fixes #1116 - Add cancel_after_time_interval (#1147)
* Fixes #1116 Signed-off-by: uri.nudelman <[email protected]> * Adds MsearchRequest. Fixes SearchRequest. Signed-off-by: uri.nudelman <[email protected]> * Update CHANGELOG.md Signed-off-by: uri.nudelman <[email protected]> * spotlessJavaCheck Signed-off-by: uri.nudelman <[email protected]> * Adds Builder Function method in MSearch Signed-off-by: uri.nudelman <[email protected]> --------- Signed-off-by: uri.nudelman <[email protected]> Co-authored-by: uri.nudelman <[email protected]> (cherry picked from commit c84ad24) Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 8e1621b commit d8812a6

File tree

5 files changed

+115
-2
lines changed

5 files changed

+115
-2
lines changed

Diff for: CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
44
## [Unreleased 2.x]
55
### Added
66
- Adds `queryImage` (query_image) field to `NeuralQuery`, following definition in ([Neural Query](https://opensearch.org/docs/latest/query-dsl/specialized/neural/)) ([#1137](https://github.com/opensearch-project/opensearch-java/pull/1138))
7+
- Adds `cancelAfterTimeInterval` to `SearchRequest` and `MsearchRequest` ([#1147](https://github.com/opensearch-project/opensearch-java/pull/1147))
78

89
### Dependencies
910

Diff for: java-client/src/main/java/org/opensearch/client/opensearch/core/MsearchRequest.java

+44
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.opensearch.client.opensearch._types.ExpandWildcard;
4949
import org.opensearch.client.opensearch._types.RequestBase;
5050
import org.opensearch.client.opensearch._types.SearchType;
51+
import org.opensearch.client.opensearch._types.Time;
5152
import org.opensearch.client.opensearch.core.msearch.RequestItem;
5253
import org.opensearch.client.transport.Endpoint;
5354
import org.opensearch.client.transport.endpoints.SimpleEndpoint;
@@ -66,6 +67,9 @@ public class MsearchRequest extends RequestBase implements NdJsonpSerializable,
6667
@Nullable
6768
private final Boolean allowNoIndices;
6869

70+
@Nullable
71+
private final Time cancelAfterTimeInterval;
72+
6973
@Nullable
7074
private final Boolean ccsMinimizeRoundtrips;
7175

@@ -98,6 +102,7 @@ public class MsearchRequest extends RequestBase implements NdJsonpSerializable,
98102
private MsearchRequest(Builder builder) {
99103

100104
this.allowNoIndices = builder.allowNoIndices;
105+
this.cancelAfterTimeInterval = builder.cancelAfterTimeInterval;
101106
this.ccsMinimizeRoundtrips = builder.ccsMinimizeRoundtrips;
102107
this.expandWildcards = ApiTypeHelper.unmodifiable(builder.expandWildcards);
103108
this.ignoreThrottled = builder.ignoreThrottled;
@@ -134,6 +139,17 @@ public final Boolean allowNoIndices() {
134139
return this.allowNoIndices;
135140
}
136141

142+
/**
143+
* The time after which the search request will be canceled.
144+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
145+
* <p>
146+
* API name: {@code cancel_after_time_interval}
147+
*/
148+
@Nullable
149+
public final Time cancelAfterTimeInterval() {
150+
return this.cancelAfterTimeInterval;
151+
}
152+
137153
/**
138154
* If true, network roundtrips between the coordinating node and remote clusters
139155
* are minimized for cross-cluster search requests.
@@ -256,6 +272,7 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) {
256272

257273
public Builder toBuilder() {
258274
return new Builder().allowNoIndices(allowNoIndices)
275+
.cancelAfterTimeInterval(cancelAfterTimeInterval)
259276
.ccsMinimizeRoundtrips(ccsMinimizeRoundtrips)
260277
.expandWildcards(expandWildcards)
261278
.ignoreThrottled(ignoreThrottled)
@@ -278,6 +295,9 @@ public static class Builder extends ObjectBuilderBase implements ObjectBuilder<M
278295
@Nullable
279296
private Boolean allowNoIndices;
280297

298+
@Nullable
299+
private Time cancelAfterTimeInterval;
300+
281301
@Nullable
282302
private Boolean ccsMinimizeRoundtrips;
283303

@@ -321,6 +341,27 @@ public final Builder allowNoIndices(@Nullable Boolean value) {
321341
return this;
322342
}
323343

344+
/**
345+
* The time after which the search request will be canceled.
346+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
347+
* <p>
348+
* API name: {@code cancel_after_time_interval}
349+
*/
350+
public final Builder cancelAfterTimeInterval(@Nullable Time value) {
351+
this.cancelAfterTimeInterval = value;
352+
return this;
353+
}
354+
355+
/**
356+
* The time after which the search request will be canceled.
357+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
358+
* <p>
359+
* API name: {@code cancel_after_time_interval}
360+
*/
361+
public final Builder cancelAfterTimeInterval(Function<Time.Builder, ObjectBuilder<Time>> fn) {
362+
return this.cancelAfterTimeInterval(fn.apply(new Time.Builder()).build());
363+
}
364+
324365
/**
325366
* If true, network roundtrips between the coordinating node and remote clusters
326367
* are minimized for cross-cluster search requests.
@@ -540,6 +581,9 @@ public MsearchRequest build() {
540581
request -> {
541582
Map<String, String> params = new HashMap<>();
542583
params.put("typed_keys", "true");
584+
if (request.cancelAfterTimeInterval != null) {
585+
params.put("cancel_after_time_interval", request.cancelAfterTimeInterval._toJsonString());
586+
}
543587
if (request.preFilterShardSize != null) {
544588
params.put("pre_filter_shard_size", String.valueOf(request.preFilterShardSize));
545589
}

Diff for: java-client/src/main/java/org/opensearch/client/opensearch/core/SearchRequest.java

+43
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ public class SearchRequest extends RequestBase implements PlainJsonSerializable
110110
@Nullable
111111
private final String pipeline;
112112

113+
@Nullable
114+
private final Time cancelAfterTimeInterval;
115+
113116
@Nullable
114117
private final FieldCollapse collapse;
115118

@@ -246,6 +249,7 @@ private SearchRequest(Builder builder) {
246249
this.ccsMinimizeRoundtrips = builder.ccsMinimizeRoundtrips;
247250
this.phaseTook = builder.phaseTook;
248251
this.pipeline = builder.pipeline;
252+
this.cancelAfterTimeInterval = builder.cancelAfterTimeInterval;
249253
this.collapse = builder.collapse;
250254
this.defaultOperator = builder.defaultOperator;
251255
this.df = builder.df;
@@ -405,6 +409,17 @@ public final String pipeline() {
405409
return this.pipeline;
406410
}
407411

412+
/**
413+
* The time after which the search request will be canceled.
414+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
415+
* <p>
416+
* API name: {@code cancel_after_time_interval}
417+
*/
418+
@Nullable
419+
public final Time cancelAfterTimeInterval() {
420+
return this.cancelAfterTimeInterval;
421+
}
422+
408423
/**
409424
* API name: {@code collapse}
410425
*/
@@ -1125,6 +1140,7 @@ public Builder toBuilder() {
11251140
.ccsMinimizeRoundtrips(ccsMinimizeRoundtrips)
11261141
.phaseTook(phaseTook)
11271142
.pipeline(pipeline)
1143+
.cancelAfterTimeInterval(cancelAfterTimeInterval)
11281144
.collapse(collapse)
11291145
.defaultOperator(defaultOperator)
11301146
.df(df)
@@ -1209,6 +1225,9 @@ public static class Builder extends ObjectBuilderBase implements ObjectBuilder<S
12091225
@Nullable
12101226
private String pipeline;
12111227

1228+
@Nullable
1229+
private Time cancelAfterTimeInterval;
1230+
12121231
@Nullable
12131232
private FieldCollapse collapse;
12141233

@@ -1483,6 +1502,27 @@ public final Builder pipeline(@Nullable String value) {
14831502
return this;
14841503
}
14851504

1505+
/**
1506+
* The time after which the search request will be canceled.
1507+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
1508+
* <p>
1509+
* API name: {@code cancel_after_time_interval}
1510+
*/
1511+
public final Builder cancelAfterTimeInterval(@Nullable Time value) {
1512+
this.cancelAfterTimeInterval = value;
1513+
return this;
1514+
}
1515+
1516+
/**
1517+
* The time after which the search request will be canceled.
1518+
* Request-level parameter takes precedence over cancel_after_time_interval cluster setting.
1519+
* <p>
1520+
* API name: {@code cancel_after_time_interval}
1521+
*/
1522+
public final Builder cancelAfterTimeInterval(Function<Time.Builder, ObjectBuilder<Time>> fn) {
1523+
return this.cancelAfterTimeInterval(fn.apply(new Time.Builder()).build());
1524+
}
1525+
14861526
/**
14871527
* API name: {@code collapse}
14881528
*/
@@ -2444,6 +2484,9 @@ protected static void setupSearchRequestDeserializer(ObjectDeserializer<SearchRe
24442484
if (request.scroll != null) {
24452485
params.put("scroll", request.scroll._toJsonString());
24462486
}
2487+
if (request.cancelAfterTimeInterval != null) {
2488+
params.put("cancel_after_time_interval", request.cancelAfterTimeInterval._toJsonString());
2489+
}
24472490
if (request.searchType != null) {
24482491
params.put("search_type", request.searchType.jsonValue());
24492492
}

Diff for: java-client/src/test/java/org/opensearch/client/opensearch/core/MsearchRequestTest.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
package org.opensearch.client.opensearch.core;
1010

1111
import java.util.Collections;
12-
import org.junit.Assert;
1312
import org.junit.Test;
13+
import org.opensearch.client.opensearch._types.Time;
14+
import org.opensearch.client.opensearch.model.ModelTestCase;
1415

15-
public class MsearchRequestTest extends Assert {
16+
public class MsearchRequestTest extends ModelTestCase {
1617

1718
@Test
1819
public void toBuilder() {
@@ -21,4 +22,17 @@ public void toBuilder() {
2122

2223
assertEquals(copied.index(), origin.index());
2324
}
25+
26+
@Test
27+
public void cancelAfterTimeInterval() {
28+
Time cancelAfterTimeInterval = Time.of(ti -> ti.time("1000ms"));
29+
MsearchRequest request = new MsearchRequest.Builder().index("index")
30+
.searches(Collections.emptyList())
31+
.cancelAfterTimeInterval(cancelAfterTimeInterval)
32+
.build();
33+
34+
assertEquals("[]", toJson(request));
35+
assertEquals(cancelAfterTimeInterval, request.cancelAfterTimeInterval());
36+
assertEquals("1000ms", MsearchRequest._ENDPOINT.queryParameters(request).get("cancel_after_time_interval"));
37+
}
2438
}

Diff for: java-client/src/test/java/org/opensearch/client/opensearch/core/SearchRequestTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.junit.Test;
1414
import org.opensearch.client.json.JsonData;
1515
import org.opensearch.client.opensearch._types.FieldValue;
16+
import org.opensearch.client.opensearch._types.Time;
1617
import org.opensearch.client.opensearch.core.search.SourceConfig;
1718
import org.opensearch.client.opensearch.core.search.SourceFilter;
1819
import org.opensearch.client.opensearch.model.ModelTestCase;
@@ -58,6 +59,16 @@ public void pipeline() {
5859
assertEquals("my_pipeline", SearchRequest._ENDPOINT.queryParameters(request).get("search_pipeline"));
5960
}
6061

62+
@Test
63+
public void cancelAfterTimeInterval() {
64+
Time cancelAfterTimeInterval = Time.of(ti -> ti.time("1000ms"));
65+
SearchRequest request = new SearchRequest.Builder().cancelAfterTimeInterval(cancelAfterTimeInterval).build();
66+
67+
assertEquals("{}", toJson(request));
68+
assertEquals(cancelAfterTimeInterval, request.cancelAfterTimeInterval());
69+
assertEquals("1000ms", SearchRequest._ENDPOINT.queryParameters(request).get("cancel_after_time_interval"));
70+
}
71+
6172
@Test
6273
public void toBuilder() {
6374
SearchRequest origin = new SearchRequest.Builder().index("index").build();

0 commit comments

Comments
 (0)