java.lang.StackOverflowError

Sonatype JIRA | Tamás Cservenák | 6 years ago
tip
Click on the to mark the solution that helps you, Samebug will learn from it.
As a community member, you’ll be rewarded for you help.
  1. 0

    Timeline filter implementation fills up the stack due to it's recursive implementation. The implementation, since it's recursive, just fills up the call stack, to clean up filtered elements from memory only _after_ recursion ends. With feeds having a lot to filter out, this leads to OOM. Example stack trace: {noformat} INFO | jvm 1 | 2010/11/24 19:43:22.806 | 2010-11-24 19:43:22 ERROR [-473546514-2151] - o.s.n.r.NexusApplic~ - Unhandled exception or error intercepted INFO | jvm 1 | 2010/11/24 19:43:22.807 | java.lang.StackOverflowError INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DigitList.getStringBuffer(DigitList.java:681) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DigitList.getLong(DigitList.java:172) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DecimalFormat.parse(DecimalFormat.java:1298) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1312) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DateFormat.parse(DateFormat.java:335) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.apache.lucene.document.DateTools.stringToDate(DateTools.java:179) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.apache.lucene.document.DateTools.stringToTime(DateTools.java:142) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.buildData(DefaultTimelineIndexer.java:454) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:416) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) {noformat}

    Sonatype JIRA | 6 years ago | Tamás Cservenák
    java.lang.StackOverflowError
  2. 0

    Timeline filter implementation fills up the stack due to it's recursive implementation. The implementation, since it's recursive, just fills up the call stack, to clean up filtered elements from memory only _after_ recursion ends. With feeds having a lot to filter out, this leads to OOM. Example stack trace: {noformat} INFO | jvm 1 | 2010/11/24 19:43:22.806 | 2010-11-24 19:43:22 ERROR [-473546514-2151] - o.s.n.r.NexusApplic~ - Unhandled exception or error intercepted INFO | jvm 1 | 2010/11/24 19:43:22.807 | java.lang.StackOverflowError INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DigitList.getStringBuffer(DigitList.java:681) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DigitList.getLong(DigitList.java:172) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DecimalFormat.parse(DecimalFormat.java:1298) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1312) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at java.text.DateFormat.parse(DateFormat.java:335) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.apache.lucene.document.DateTools.stringToDate(DateTools.java:179) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.apache.lucene.document.DateTools.stringToTime(DateTools.java:142) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.buildData(DefaultTimelineIndexer.java:454) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:416) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) INFO | jvm 1 | 2010/11/24 19:43:22.807 | at org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420) {noformat}

    Sonatype JIRA | 6 years ago | Tamás Cservenák
    java.lang.StackOverflowError

Root Cause Analysis

  1. java.lang.StackOverflowError

    No message provided

    at java.text.DigitList.getStringBuffer()
  2. Java RT
    DateFormat.parse
    1. java.text.DigitList.getStringBuffer(DigitList.java:681)
    2. java.text.DigitList.getLong(DigitList.java:172)
    3. java.text.DecimalFormat.parse(DecimalFormat.java:1298)
    4. java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589)
    5. java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1312)
    6. java.text.DateFormat.parse(DateFormat.java:335)
    6 frames
  3. Lucene
    DateTools.stringToTime
    1. org.apache.lucene.document.DateTools.stringToDate(DateTools.java:179)
    2. org.apache.lucene.document.DateTools.stringToTime(DateTools.java:142)
    2 frames
  4. org.sonatype.timeline
    DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord
    1. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.buildData(DefaultTimelineIndexer.java:454)
    2. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:416)
    3. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420)
    4. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420)
    5. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420)
    6. org.sonatype.timeline.DefaultTimelineIndexer$IndexerTimelineResult.fetchNextRecord(DefaultTimelineIndexer.java:420)
    6 frames