-
Notifications
You must be signed in to change notification settings - Fork 25.6k
Closed
Labels
Description
The ML find_structure_finder endpoint can fail with a null pointer exception if should_trim_fields is overridden to true and there are blank fields in the delimited file.
As an example to reproduce this:
curl -s -H "Content-Type: application/json" -XPOST "localhost:9200/_xpack/ml/find_file_structure?pretty&format=delimited&explain&should_trim_fields=true" -T PAN-sample.log
where PAN-sample.log is a CSV file containing blank field values.
The output is:
{
"error" : {
"root_cause" : [
{
"type" : "null_pointer_exception",
"reason" : null
}
],
"type" : "null_pointer_exception",
"reason" : null
},
"status" : 500
}
Stack trace is:
[elasticsearch] [2018-11-12T16:29:06,517][WARN ][r.suppressed ] [node-0] path: /_xpack/ml/find_file_structure, params: {explain=, pretty=, should_trim_fields=true, format=delimited}
[elasticsearch] java.lang.NullPointerException: null
[elasticsearch] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[?:?]
[elasticsearch] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) ~[?:?]
[elasticsearch] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
[elasticsearch] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
[elasticsearch] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[?:?]
[elasticsearch] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
[elasticsearch] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?]
[elasticsearch] at org.elasticsearch.xpack.ml.filestructurefinder.DelimitedFileStructureFinder.makeDelimitedFileStructureFinder(DelimitedFileStructureFinder.java:85) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.filestructurefinder.DelimitedFileStructureFinderFactory.createFromSample(DelimitedFileStructureFinderFactory.java:66) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.filestructurefinder.FileStructureFinderManager.makeBestStructureFinder(FileStructureFinderManager.java:278) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.filestructurefinder.FileStructureFinderManager.findFileStructure(FileStructureFinderManager.java:150) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.filestructurefinder.FileStructureFinderManager.findFileStructure(FileStructureFinderManager.java:121) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.action.TransportFindFileStructureAction.buildFileStructureResponse(TransportFindFileStructureAction.java:50) ~[x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.xpack.ml.action.TransportFindFileStructureAction.lambda$doExecute$0(TransportFindFileStructureAction.java:39) [x-pack-ml-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:627) [elasticsearch-6.6.0-SNAPSHOT.jar:6.6.0-SNAPSHOT]
[elasticsearch] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
[elasticsearch] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
[elasticsearch] at java.lang.Thread.run(Thread.java:834) [?:?]