Skip to content

Commit c210cd4

Browse files
authored
Adding validation for incompatibility of compound retrievers and scroll (#115106) (#115323)
1 parent 2bfbb42 commit c210cd4

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2208,7 +2208,7 @@ public ActionRequestValidationException validate(
22082208
boolean allowPartialSearchResults
22092209
) {
22102210
if (retriever() != null) {
2211-
validationException = retriever().validate(this, validationException, allowPartialSearchResults);
2211+
validationException = retriever().validate(this, validationException, isScroll, allowPartialSearchResults);
22122212
List<String> specified = new ArrayList<>();
22132213
if (subSearches().isEmpty() == false) {
22142214
specified.add(QUERY_FIELD.getPreferredName());

server/src/main/java/org/elasticsearch/search/retriever/CompoundRetrieverBuilder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,10 @@ public final void extractToSearchSourceBuilder(SearchSourceBuilder searchSourceB
176176
public ActionRequestValidationException validate(
177177
SearchSourceBuilder source,
178178
ActionRequestValidationException validationException,
179+
boolean isScroll,
179180
boolean allowPartialSearchResults
180181
) {
181-
validationException = super.validate(source, validationException, allowPartialSearchResults);
182+
validationException = super.validate(source, validationException, isScroll, allowPartialSearchResults);
182183
if (source.size() > rankWindowSize) {
183184
validationException = addValidationError(
184185
"["
@@ -194,12 +195,15 @@ public ActionRequestValidationException validate(
194195
}
195196
if (allowPartialSearchResults) {
196197
validationException = addValidationError(
197-
"cannot specify a compound retriever and [allow_partial_search_results]",
198+
"cannot specify [" + getName() + "] and [allow_partial_search_results]",
198199
validationException
199200
);
200201
}
202+
if (isScroll) {
203+
validationException = addValidationError("cannot specify [" + getName() + "] and [scroll]", validationException);
204+
}
201205
for (RetrieverSource innerRetriever : innerRetrievers) {
202-
validationException = innerRetriever.retriever().validate(source, validationException, allowPartialSearchResults);
206+
validationException = innerRetriever.retriever().validate(source, validationException, isScroll, allowPartialSearchResults);
203207
}
204208
return validationException;
205209
}

server/src/main/java/org/elasticsearch/search/retriever/RetrieverBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ public RetrieverBuilder rewrite(QueryRewriteContext ctx) throws IOException {
239239
public ActionRequestValidationException validate(
240240
SearchSourceBuilder source,
241241
ActionRequestValidationException validationException,
242+
boolean isScroll,
242243
boolean allowPartialSearchResults
243244
) {
244245
return validationException;

server/src/test/java/org/elasticsearch/action/search/SearchRequestTests.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,23 @@ public void testValidate() throws IOException {
272272
assertNotNull(validationErrors);
273273
assertEquals(1, validationErrors.validationErrors().size());
274274
assertEquals(
275-
"cannot specify a compound retriever and [allow_partial_search_results]",
275+
"cannot specify [test_compound_retriever_builder] and [allow_partial_search_results]",
276276
validationErrors.validationErrors().get(0)
277277
);
278278
}
279+
{
280+
// scroll and compound retriever
281+
SearchRequest searchRequest = createSearchRequest().source(
282+
new SearchSourceBuilder().retriever(new TestCompoundRetrieverBuilder(randomIntBetween(1, 10)))
283+
);
284+
searchRequest.allowPartialSearchResults(false);
285+
searchRequest.scroll(TimeValue.timeValueMinutes(1));
286+
searchRequest.requestCache(false);
287+
ActionRequestValidationException validationErrors = searchRequest.validate();
288+
assertNotNull(validationErrors);
289+
assertEquals(1, validationErrors.validationErrors().size());
290+
assertEquals("cannot specify [test_compound_retriever_builder] and [scroll]", validationErrors.validationErrors().get(0));
291+
}
279292
{
280293
// allow_partial_results and non-compound retriever
281294
SearchRequest searchRequest = createSearchRequest().source(new SearchSourceBuilder().retriever(new RetrieverBuilder() {

0 commit comments

Comments
 (0)