Details
-
Bug
-
Resolution: Fixed
-
Low
-
None
-
None
-
None
Description
When review page is rendered it prepares a model of all files and files revisions by calling ReviewBaseAction.getFrxNavList which is visible on sequence of thread dumps:
"qtp943573036-605" #605 prio=5 os_prio=64 tid=0x00000000038b6000 nid=0x25f runnable [0xffff80feddff4000] java.lang.Thread.State: RUNNABLE at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:172) at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValues(AbstractEntityTuplizer.java:485) at org.hibernate.tuple.entity.PojoEntityTuplizer.getPropertyValues(PojoEntityTuplizer.java:243) at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValues(AbstractEntityPersister.java:3834) at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:193) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147) at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58) at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:859) at com.cenqua.crucible.revision.managers.CrucibleRevisionCreator.findStoredPath(CrucibleRevisionCreator.java:70) at com.cenqua.crucible.revision.managers.CrucibleRevisionCreator.findRevision(CrucibleRevisionCreator.java:121) at com.cenqua.crucible.model.managers.FileRevisionManager.findRevision(FileRevisionManager.java:142) at com.cenqua.crucible.revision.managers.DefaultContentManager$3.doInTransaction(DefaultContentManager.java:435) at com.cenqua.crucible.revision.managers.DefaultContentManager$3.doInTransaction(DefaultContentManager.java:432) at com.atlassian.fisheye.spi.impl.DefaultTxTemplate.execute(DefaultTxTemplate.java:78) at com.cenqua.crucible.revision.managers.DefaultContentManager.getCrucibleRevision(DefaultContentManager.java:432) at com.cenqua.crucible.revision.source.PatchSource.getRevisionAnchor(PatchSource.java:320) at com.cenqua.crucible.view.FRXDO.getAnchoredRevision(FRXDO.java:523) at com.cenqua.crucible.view.FRXDO.isAnchorFailure(FRXDO.java:508) at com.cenqua.crucible.view.FRXDO.isSliderFixedMinimum(FRXDO.java:214) at com.cenqua.crucible.view.FRXDO.<init>(FRXDO.java:184) at com.cenqua.crucible.revision.managers.DefaultContentManager.makeFRXDO(DefaultContentManager.java:125) at com.atlassian.crucible.actions.ReviewBaseAction.makeFRXDO(ReviewBaseAction.java:600) at com.atlassian.crucible.actions.ReviewBaseAction$FRXWrapper.wrap(ReviewBaseAction.java:309) at com.atlassian.crucible.actions.ReviewBaseAction$FRXWrapper.wrap(ReviewBaseAction.java:301) at com.cenqua.crucible.util.WrappingIterator.wrap(WrappingIterator.java:26) at com.cenqua.crucible.util.WrappingIterator.next(WrappingIterator.java:35) at com.cenqua.crucible.view.FRXNavList.<init>(FRXNavList.java:174) at com.atlassian.crucible.actions.ReviewBaseAction.getFrxNavList(ReviewBaseAction.java:343) at com.atlassian.crucible.actions.ReviewBaseAction.getSortedFrxs(ReviewBaseAction.java:336) at com.atlassian.crucible.actions.ReviewBaseAction.getEmptyFRXs(ReviewBaseAction.java:320) at sun.reflect.GeneratedMethodAccessor1374.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) 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.tag.web.review.reviewPage_tag.doTag(reviewPage_tag.java:678) at org.apache.jsp.WEB_002dINF.jsp.crucible.review.monolithic.review_jsp._jspx_meth_rev_reviewPage_0(review_jsp.java:182) at org.apache.jsp.WEB_002dINF.jsp.crucible.review.monolithic.review_jsp._jspService(review_jsp.java:157) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
Having many files in review and having Hibernate checks on each list() and transaction commit leads to a huge processing time.
It may to be related to pre-commit reviews as isAnchorFailure() is always visible on stacks.