Description
When running multithreaded performance tests for parsing complex textual data, roughly 3/5 executions will fail with the following error:
java.lang.StringIndexOutOfBoundsException: String index out of range: 7
|
at java.lang.String.charAt(String.java:646)
|
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3797)
|
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
|
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
|
at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4804)
|
at java.util.regex.Pattern$Prolog.match(Pattern.java:4741)
|
at java.util.regex.Pattern$Start.match(Pattern.java:3461)
|
at java.util.regex.Matcher.search(Matcher.java:1248)
|
at java.util.regex.Matcher.find(Matcher.java:637)
|
at edu.illinois.ncsa.daffodil.processors.parsers.NilMatcherMixin$class.isFieldNilLiteral(NilMatcherMixin.scala:88)
|
at edu.illinois.ncsa.daffodil.processors.parsers.LiteralNilDelimitedEndOfDataParser.isFieldNilLiteral(DelimitedParsers.scala:120)
|
at edu.illinois.ncsa.daffodil.processors.parsers.LiteralNilDelimitedEndOfDataParser.processResult(DelimitedParsers.scala:146)
|
at edu.illinois.ncsa.daffodil.processors.parsers.StringDelimitedParser$$anonfun$parse$1.apply$mcV$sp(DelimitedParsers.scala:116)
|
at edu.illinois.ncsa.daffodil.processors.WithParseErrorThrowing$class.withParseErrorThrowing(ParseErrors.scala:226)
|
at edu.illinois.ncsa.daffodil.processors.PrimParser.withParseErrorThrowing(ProcessorBases1.scala:45)
|
at edu.illinois.ncsa.daffodil.processors.parsers.StringDelimitedParser.parse(DelimitedParsers.scala:89)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.AltCompParser$$anonfun$parse$3.apply(Parser.scala:187)
|
at edu.illinois.ncsa.daffodil.processors.AltCompParser$$anonfun$parse$3.apply(Parser.scala:182)
|
at scala.collection.immutable.List.foreach(List.scala:318)
|
at edu.illinois.ncsa.daffodil.processors.AltCompParser.parse(Parser.scala:182)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:135)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:134)
|
at scala.Option.foreach(Option.scala:236)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:134)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.SequenceCombinatorParser.parse(ElementKindParsers.scala:220)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.DelimiterStackParser.parse(ElementKindParsers.scala:130)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.ComplexTypeParser.parse(ElementKindParsers.scala:70)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:135)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:134)
|
at scala.Option.foreach(Option.scala:236)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:134)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:158)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:155)
|
at scala.collection.immutable.List.foreach(List.scala:318)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:155)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepAtMostTotalNParser.parseAllRepeats(RepParsers.scala:153)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepParser.parse(RepParsers.scala:79)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:158)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:155)
|
at scala.collection.immutable.List.foreach(List.scala:318)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:155)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepAtMostTotalNParser.parseAllRepeats(RepParsers.scala:153)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepParser.parse(RepParsers.scala:79)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.ArrayCombinatorParser.parse(ElementKindParsers.scala:252)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:158)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:155)
|
at scala.collection.immutable.List.foreach(List.scala:318)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:155)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.SequenceCombinatorParser.parse(ElementKindParsers.scala:220)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.DelimiterStackParser.parse(ElementKindParsers.scala:130)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.ComplexTypeParser.parse(ElementKindParsers.scala:70)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:135)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:134)
|
at scala.Option.foreach(Option.scala:236)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:134)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepExactlyNParser.parseAllRepeats(RepParsers.scala:121)
|
at edu.illinois.ncsa.daffodil.processors.parsers.RepParser.parse(RepParsers.scala:79)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:158)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:155)
|
at scala.collection.immutable.List.foreach(List.scala:318)
|
at edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:155)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.ArrayCombinatorParser.parse(ElementKindParsers.scala:252)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.SequenceCombinatorParser.parse(ElementKindParsers.scala:220)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.parsers.ComplexTypeParser.parse(ElementKindParsers.scala:70)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:135)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$parse$3.apply(ElementCombinator1.scala:134)
|
at scala.Option.foreach(Option.scala:236)
|
at edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:134)
|
at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:85)
|
at edu.illinois.ncsa.daffodil.processors.DataProcessor.edu$illinois$ncsa$daffodil$processors$DataProcessor$$doParse(Runtime.scala:250)
|
at edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3.apply(Runtime.scala:238)
|
at edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3.apply(Runtime.scala:231)
|
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
|
at edu.illinois.ncsa.daffodil.ExecutionMode$$anonfun$usingRuntimeMode$1.apply(ExecutionMode.scala:80)
|
at edu.illinois.ncsa.daffodil.ExecutionMode$$anonfun$usingRuntimeMode$1.apply(ExecutionMode.scala:80)
|
at edu.illinois.ncsa.daffodil.processors.DataProcessor.parse(Runtime.scala:230)
|
at edu.illinois.ncsa.daffodil.processors.DataProcessor.parse(Runtime.scala:202)
|
at edu.illinois.ncsa.daffodil.Main$$anonfun$77$$anonfun$78$$anonfun$79$$anonfun$81.apply(Main.scala:849)
|
at edu.illinois.ncsa.daffodil.Main$$anonfun$77$$anonfun$78$$anonfun$79$$anonfun$81.apply(Main.scala:849)
|
at edu.illinois.ncsa.daffodil.util.Timer$.getTimeResult(Timer.scala:91)
|
at edu.illinois.ncsa.daffodil.Main$$anonfun$77$$anonfun$78$$anonfun$79.apply(Main.scala:849)
|
at edu.illinois.ncsa.daffodil.Main$$anonfun$77$$anonfun$78$$anonfun$79.apply(Main.scala:845)
|
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
|
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
|
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
|
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
|
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
|
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
|
at java.lang.Thread.run(Thread.java:745)
|
The other 2/5 pass without issues. Single-threaded tests do not experience this problem.