Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-20507

pagetree search macro causing performance issue when Confluence full reindex is performed

    XMLWordPrintable

Details

    Description

      This is from https://studio.plugins.atlassian.com/browse/PGTR-82 - I'm creating a duplicate in JAC as to add the bug in Support Bug Fix backlog.

      The pagetreesearch macro can cause performance issue in large Confluence instance with complex page hierarchy.

      In one reported accident, it appears to require building a lot of joints when accessing the ancestors table to determine the page hierarchy - if the hierarchy is complex enough, the reindexing process can take days to finish.

      Example query:

      select ancestors0_.DESCENDENTID as DESCENDE1__, ancestors0.ANCESTORID as ANCESTORID_, ancestors0.ANCESTORPOSITION as ANCESTOR3__, contentent1.CONTENTID as CONTENTID0_, contentent1_.CONTENTTYPE as CONTENTT2_0_, contentent1_.TITLE as TITLE0_, contentent1_.VERSION as VERSION0_, contentent1_.CREATOR as CREATOR0_, contentent1_.CREATIONDATE as CREATION6_0_, contentent1_.LASTMODIFIER as LASTMODI7_0_, contentent1_.LASTMODDATE as LASTMODD8_0_, contentent1_.VERSIONCOMMENT as VERSIONC9_0_, contentent1_.PREVVER as PREVVER0_, contentent1_.CONTENT_STATUS as CONTENT11_0_, contentent1_.SPACEID as SPACEID0_, contentent1_.CHILD_POSITION as CHILD_P13_0_, contentent1_.PARENTID as PARENTID0_, contentent1_.MESSAGEID as MESSAGEID0_, contentent1_.DRAFTPAGEID as DRAFTPA16_0_, contentent1_.DRAFTSPACEKEY as DRAFTSP17_0_, contentent1_.DRAFTTYPE as DRAFTTYPE0_, contentent1_.DRAFTPAGEVERSION as DRAFTPA19_0_, contentent1_.PAGEID as PAGEID0_, contentent1_.PARENTCOMMENTID as PARENTC21_0_, contentent1_.USERNAME as USERNAME0_, contenten
      

      Example thread dump:

      "com.atlassian.confluence.search.lucene.ConfluenceMultiThreadedIndexer: 6" daemon prio=1 tid=0x00002aaacc1d6400 nid=0x150b waiting on condition [0x00000000459f8000..0x00000000459f9d90]
        	at org.postgresql.core.PGStream.ReceiveTupleV3(PGStream.java:349)
        	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1322)
        	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
        	- locked <0x00002b0d7c50add8> (a org.postgresql.core.v3.QueryExecutorImpl)
        	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
        	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
        	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
        	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
        	at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:89)
        	at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:880)
        	at net.sf.hibernate.loader.Loader.doQuery(Loader.java:273)
        	at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
        	at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:1020)
        	at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:995)
        	at net.sf.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:83)
        	at net.sf.hibernate.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:288)
        	at net.sf.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:3315)
        	at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:195)
        	at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71)
        	at net.sf.hibernate.collection.List.iterator(List.java:103)
        	at com.atlassian.confluence.plugins.pagetree.PageHierarchyExtractor.addFields(PageHierarchyExtractor.java:78)
        	at com.atlassian.confluence.plugin.descriptor.ExtractorModuleDescriptor$BackwardsCompatibleExtractor.addFields(ExtractorModuleDescriptor.java:43)
        	at com.atlassian.bonnie.search.BaseDocumentBuilder.getDocument(BaseDocumentBuilder.java:104)
        	at com.atlassian.confluence.search.lucene.ConfluenceDocumentBuilder.getDocument(ConfluenceDocumentBuilder.java:89)
        	at com.atlassian.confluence.search.lucene.ConfluenceObjectToDocumentConverter.convert(ConfluenceObjectToDocumentConverter.java:30)
        	at com.atlassian.confluence.search.lucene.ConfluenceObjectQueue$1.indexCollection(ConfluenceObjectQueue.java:79)
        	at com.atlassian.bonnie.index.QueueProcessingRunnableImpl.run(QueueProcessingRunnableImpl.java:39)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        	at java.lang.reflect.Method.invoke(Method.java:585)
        	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        	at $Proxy670.run(Unknown Source)
        	at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:987)
        	at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:528)
        	at java.lang.Thread.run(Thread.java:595)
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              rhartono Roy Hartono [Atlassian]
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: