Uploaded image for project: 'Daffodil'
  1. Daffodil
  2. DFDL-1391

CLI Performance: Potential Race Condition - StringIndexOutOfBoundsException

XMLWordPrintableJSON

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • 2.0.0
    • 2.0.0
    • Back End
    • None

      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.

              jchab Jessie Chab
              jchab Jessie Chab
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: