mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-12 07:55:24 +00:00
Chain transform was incorrectly assuming that all transforms had to be objects.
The chain transform : ``` "transform" : { "chain" : [ { "search" : { "search_type" : "count", "indices" : [ "logstash-*" ], "body" : { "query" : { "match" : { "priority" : "error"} } } } }, { "script" : "return [ error_count : ctx.payload.hits.total ]" } ] }, ``` Was failing because the chain transform (wrongly) refused to parse the script string as a transform. This change will allow the transforms to determine what should parse or not. Fixes: elastic/elasticsearch#475 Updates after review Original commit: elastic/x-pack-elasticsearch@78c1a2498d
This commit is contained in:
parent
926e39d21e
commit
5796a771c0
@ -79,10 +79,8 @@ public class ChainTransform implements Transform {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
builder.add(transformRegistry.parseTransform(watchId, currentFieldName, parser));
|
||||
} else {
|
||||
throw new ChainTransformException("could not parse [{}] transform for watch [{}]. expected a transform object, but found [{}] instead", TYPE, watchId, token);
|
||||
builder.add(transformRegistry.parseTransform(watchId, currentFieldName, parser));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -75,6 +75,7 @@ public class ChainTransformTests extends ElasticsearchTestCase {
|
||||
.startObject().startObject("named").field("name", "name1").endObject().endObject()
|
||||
.startObject().startObject("named").field("name", "name2").endObject().endObject()
|
||||
.startObject().startObject("named").field("name", "name3").endObject().endObject()
|
||||
.startObject().field("named", "name4").endObject()
|
||||
.endArray();
|
||||
|
||||
XContentParser parser = JsonXContent.jsonXContent.createParser(builder.bytes());
|
||||
@ -82,7 +83,7 @@ public class ChainTransformTests extends ElasticsearchTestCase {
|
||||
ExecutableChainTransform executable = transformParser.parseExecutable("_id", parser);
|
||||
assertThat(executable, notNullValue());
|
||||
assertThat(executable.transform().getTransforms(), notNullValue());
|
||||
assertThat(executable.transform().getTransforms(), hasSize(3));
|
||||
assertThat(executable.transform().getTransforms(), hasSize(4));
|
||||
for (int i = 0; i < executable.transform().getTransforms().size(); i++) {
|
||||
assertThat(executable.executableTransforms().get(i), instanceOf(NamedExecutableTransform.class));
|
||||
assertThat(((NamedExecutableTransform) executable.executableTransforms().get(i)).transform().name, is("name" + (i + 1)));
|
||||
@ -157,6 +158,9 @@ public class ChainTransformTests extends ElasticsearchTestCase {
|
||||
|
||||
@Override
|
||||
public Transform parseTransform(String watchId, XContentParser parser) throws IOException {
|
||||
if (parser.currentToken() == XContentParser.Token.VALUE_STRING) {
|
||||
return new Transform(parser.text());
|
||||
}
|
||||
assert parser.currentToken() == XContentParser.Token.START_OBJECT;
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME; // the "name" field
|
||||
@ -186,6 +190,5 @@ public class ChainTransformTests extends ElasticsearchTestCase {
|
||||
return new NamedExecutableTransform(transform);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user