Skip to content

Commit 8523068

Browse files
authored
Adding validation for incompatibility of compound retrievers and scroll (#115106) (#115322)
1 parent 8a00fce commit 8523068

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
@@ -172,9 +172,10 @@ public final void extractToSearchSourceBuilder(SearchSourceBuilder searchSourceB
172172
public ActionRequestValidationException validate(
173173
SearchSourceBuilder source,
174174
ActionRequestValidationException validationException,
175+
boolean isScroll,
175176
boolean allowPartialSearchResults
176177
) {
177-
validationException = super.validate(source, validationException, allowPartialSearchResults);
178+
validationException = super.validate(source, validationException, isScroll, allowPartialSearchResults);
178179
if (source.size() > rankWindowSize) {
179180
validationException = addValidationError(
180181
"["
@@ -190,12 +191,15 @@ public ActionRequestValidationException validate(
190191
}
191192
if (allowPartialSearchResults) {
192193
validationException = addValidationError(
193-
"cannot specify a compound retriever and [allow_partial_search_results]",
194+
"cannot specify [" + getName() + "] and [allow_partial_search_results]",
194195
validationException
195196
);
196197
}
198+
if (isScroll) {
199+
validationException = addValidationError("cannot specify [" + getName() + "] and [scroll]", validationException);
200+
}
197201
for (RetrieverSource innerRetriever : innerRetrievers) {
198-
validationException = innerRetriever.retriever().validate(source, validationException, allowPartialSearchResults);
202+
validationException = innerRetriever.retriever().validate(source, validationException, isScroll, allowPartialSearchResults);
199203
}
200204
return validationException;
201205
}

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)