Description
Activity stream and chanegset log use cross-repository Lucene index and for big number of documents stored in index they may fail with OOME:
Caused by: java.lang.OutOfMemoryError: Java heap space at org.apache.lucene.search.FieldComparator$LongComparator.<init>(FieldComparator.java:463) at org.apache.lucene.search.SortField.getComparator(SortField.java:405) at org.apache.lucene.search.FieldValueHitQueue$OneComparatorFieldValueHitQueue.<init>(FieldValueHitQueue.java:70) at org.apache.lucene.search.FieldValueHitQueue.create(FieldValueHitQueue.java:178) at org.apache.lucene.search.TopFieldCollector.create(TopFieldCollector.java:913) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:197) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:177) at org.apache.lucene.search.Searcher.search(Searcher.java:49) at com.cenqua.fisheye.csindex.BaseRecentChangesSearcher2$1.perform(BaseRecentChangesSearcher2.java:78) at com.cenqua.fisheye.csindex.BaseRecentChangesSearcher2$1.perform(BaseRecentChangesSearcher2.java:74) at com.cenqua.fisheye.lucene.LuceneConnection.withIndexSearcher(LuceneConnection.java:359) at com.cenqua.fisheye.csindex.BaseRecentChangesSearcher2.doSearch(BaseRecentChangesSearcher2.java:74) at com.cenqua.fisheye.csindex.BaseRecentChangesSearcher2.findRecentChangeSets(BaseRecentChangesSearcher2.java:61) at com.cenqua.fisheye.csindex.BaseRecentChangesSearcher2.findRecentChangeSets(BaseRecentChangesSearcher2.java:46) at com.cenqua.fisheye.csindex.RecentChangesSearcher2.findRecentChangeSets(RecentChangesSearcher2.java:48) at com.cenqua.fisheye.cache.BaseRevisionCache.findRecentChangeSets(BaseRevisionCache.java:395) at com.cenqua.fisheye.web.FisheyeChangelogExplorer.computeData(FisheyeChangelogExplorer.java:130) at com.atlassian.crucible.explorers.RepositoryChangelogExplorer.computeData(RepositoryChangelogExplorer.java:80) at com.atlassian.crucible.actions.create.EditChangelogAction.initChangesets(EditChangelogAction.java:112) at com.atlassian.crucible.actions.create.EditChangelogAction.getExplorer(EditChangelogAction.java:73) at sun.reflect.GeneratedMethodAccessor1395.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at javax.el.BeanELResolver.getValue(BeanELResolver.java:305) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188) at com.sun.el.parser.AstValue.getValue(AstValue.java:120) at com.sun.el.parser.AstValue.getValue(AstValue.java:167) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224) at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1009) at org.apache.jsp.WEB_002dINF.jsp.crucible.create.create_005fselectRevisions_005fchangelogAjaxResp_jsp._jspx_meth_cru_asJavascriptString_0(create_005fselectRevisions_005fchangelogAjaxResp_jsp.java:171) at org.apache.jsp.WEB_002dINF.jsp.crucible.create.create_005fselectRevisions_005fchangelogAjaxResp_jsp._jspService(create_005fselectRevisions_005fchangelogAjaxResp_jsp.java:98) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
The root cause is a Predicate forcing to allocate array of longs for all documents in index. For ~60 million documents it is ~500MB per call