Validate metdata on `_msearch` (#35938)
MultiSearchRequests issues through `_msearch` now validate all keys in the metadata section. Previously unknown keys were ignored while now an exception is thrown. Closes #35869
This commit is contained in:
parent
cc1fa799c8
commit
ad1f0dccd4
|
@ -107,3 +107,9 @@ object has been removed in favor of the top level `created` field.
|
|||
==== Source filtering url parameters `_source_include` and `_source_exclude` have been removed
|
||||
|
||||
The deprecated in 6.x url parameters are now removed. Use `_source_includes` and `_source_excludes` instead.
|
||||
|
||||
[float]
|
||||
==== Multi Search Request metadata validation
|
||||
|
||||
MultiSearchRequests issued through `_msearch` now validate all keys in the metadata section. Previously unknown keys were ignored
|
||||
while now an exception is thrown.
|
||||
|
|
|
@ -211,6 +211,10 @@ public class MultiSearchRequest extends ActionRequest implements CompositeIndice
|
|||
try (InputStream stream = data.slice(from, nextMarker - from).streamInput();
|
||||
XContentParser parser = xContent.createParser(registry, LoggingDeprecationHandler.INSTANCE, stream)) {
|
||||
Map<String, Object> source = parser.map();
|
||||
Object expandWildcards = null;
|
||||
Object ignoreUnavailable = null;
|
||||
Object ignoreThrottled = null;
|
||||
Object allowNoIndices = null;
|
||||
for (Map.Entry<String, Object> entry : source.entrySet()) {
|
||||
Object value = entry.getValue();
|
||||
if ("index".equals(entry.getKey()) || "indices".equals(entry.getKey())) {
|
||||
|
@ -230,12 +234,20 @@ public class MultiSearchRequest extends ActionRequest implements CompositeIndice
|
|||
searchRequest.routing(nodeStringValue(value, null));
|
||||
} else if ("allow_partial_search_results".equals(entry.getKey())) {
|
||||
searchRequest.allowPartialSearchResults(nodeBooleanValue(value, null));
|
||||
} else if ("expand_wildcards".equals(entry.getKey()) || "expandWildcards".equals(entry.getKey())) {
|
||||
expandWildcards = value;
|
||||
} else if ("ignore_unavailable".equals(entry.getKey()) || "ignoreUnavailable".equals(entry.getKey())) {
|
||||
ignoreUnavailable = value;
|
||||
} else if ("allow_no_indices".equals(entry.getKey()) || "allowNoIndices".equals(entry.getKey())) {
|
||||
allowNoIndices = value;
|
||||
} else if ("ignore_throttled".equals(entry.getKey()) || "ignoreThrottled".equals(entry.getKey())) {
|
||||
ignoreThrottled = value;
|
||||
} else {
|
||||
// TODO we should not be lenient here and fail if there is any unknown key in the source map
|
||||
throw new IllegalArgumentException("key [" + entry.getKey() + "] is not supported in the metadata section");
|
||||
}
|
||||
|
||||
}
|
||||
defaultOptions = IndicesOptions.fromMap(source, defaultOptions);
|
||||
defaultOptions = IndicesOptions.fromParameters(expandWildcards, ignoreUnavailable, allowNoIndices, ignoreThrottled,
|
||||
defaultOptions);
|
||||
}
|
||||
}
|
||||
searchRequest.indicesOptions(defaultOptions);
|
||||
|
|
|
@ -90,6 +90,16 @@ public class MultiSearchRequestTests extends ESTestCase {
|
|||
assertThat(request.requests().get(7).types().length, equalTo(0));
|
||||
}
|
||||
|
||||
public void testFailWithUnknownKey() {
|
||||
final String requestContent = "{\"index\":\"test\", \"ignore_unavailable\" : true, \"unknown_key\" : \"open,closed\"}}\r\n" +
|
||||
"{\"query\" : {\"match_all\" :{}}}\r\n";
|
||||
FakeRestRequest restRequest = new FakeRestRequest.Builder(xContentRegistry())
|
||||
.withContent(new BytesArray(requestContent), XContentType.JSON).build();
|
||||
IllegalArgumentException ex = expectThrows(IllegalArgumentException.class,
|
||||
() -> RestMultiSearchAction.parseRequest(restRequest, true));
|
||||
assertEquals("key [unknown_key] is not supported in the metadata section", ex.getMessage());
|
||||
}
|
||||
|
||||
public void testSimpleAddWithCarriageReturn() throws Exception {
|
||||
final String requestContent = "{\"index\":\"test\", \"ignore_unavailable\" : true, \"expand_wildcards\" : \"open,closed\"}}\r\n" +
|
||||
"{\"query\" : {\"match_all\" :{}}}\r\n";
|
||||
|
|
Loading…
Reference in New Issue