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

Space Analytics Content tab data export job should only consider pages with events. As non-events pages are leading to performance issues when the export job is executed.

XMLWordPrintable

    • 8
    • 2
    • We collect Confluence feedback from various sources, and we evaluate what we've collected when planning our product roadmap. To understand how this piece of feedback will be reviewed, see our Implementation of New Features Policy.

      Current Feature behavior:

      Space Analytics Content tab data export job considers all pages regardless if they have events or not. This leads to the below performance issues when the export job is executed.

      This is reproducible on Data Center: Yes

      Proposed Feature Request:

      Space Analytics Content tab data export job should only take into consideration pages with events which can help in avoiding the performance issue.

      Steps to Reproduce performance issue when Space Analytics Content tab data export job contains all pages of space(pages with event and without events).

      • Create a Confluence site with any version.
      • Create a space having more than 100k content. Create large page counts in Confluence using REST Client for Testing. can be used to populate the space with content.
      • Rebuild the index.
      • Go to Space -> Demonstration Space -> Analytics -> Content tab.
      • Choose a date range of one Day and choose Export to Excel from the drop-down menu.
        Or
        For an existing Confluence site having a Space that has more than 100k content perform the below steps:
      • Go to Space -> Demonstration Space -> Analytics -> Content tab.
      • Choose a date range of one Day and choose Export to Excel from the drop-down menu.
      • The CSV file never gets downloaded and creates a stuck thread that never clears causing high CPU usage for Confluence Java process.
      • Stuck thread detail:
        16-Jul-2023 12:56:55.684 WARNING [Catalina-utility-2] org.apache.catalina.valves.StuckThreadDetectionValve.notifyStuckThreadDetected Thread [http-nio-6840-exec-2 url: /rest/confanalytics/1.0/space/contentViews.xlsx; user: xxxx] (id=[222])
        has been active for [1,987,765] milliseconds (since [7/16/23, 12:23 PM]) to serve the same request for [http://<confluence-base-url>/rest/confanalytics/1.0/space/contentViews.xlsx?spaceKey=ds&includeMyActivity=undefined&fromDate=2023-07-11T22%3A00
        %3A00.000Z&toDate=2023-07-12T22%3A00%3A00.000Z&type=total&period=day&timezone=GMT%2B02%3A00&content=page%2Cblog] and may be stuck (configured threshold for this StuckThreadDetectionValve is [60] seconds). There is/are [2] thread(s) in total that
         are monitored by this Valve and may be stuck.
                java.lang.Throwable
                        at java.base@17.0.7/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at java.base@17.0.7/java.lang.reflect.Method.invoke(Method.java:568)
                        at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:42)
                        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
                        at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:5280)
                        at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:74)
                        at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:203)
                        at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:162)
                        at org.hibernate.event.internal.AbstractFlushingEventListener$$Lambda$2061/0x0000000801c6e098.accept(Unknown Source)
                        at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
                        at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:229)
                        at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:93)
                        at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
                        at org.hibernate.internal.SessionImpl$$Lambda$2064/0x0000000801c6ee08.accept(Unknown Source)
                        at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
                        at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1407)
                        at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:489)
                        at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3290)
                        at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2425)
                        at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:449)
                        at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
                        at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
                        at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
                        at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
                        at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:643)
                        at com.atlassian.confluence.impl.hibernate.ConfluenceHibernateTransactionManager.doCommit(ConfluenceHibernateTransactionManager.java:59)
                        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743)
                        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:711)
                        at jdk.internal.reflect.GeneratedMethodAccessor204.invoke(Unknown Source)
                        at java.base@17.0.7/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at java.base@17.0.7/java.lang.reflect.Method.invoke(Method.java:568)
                        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
                        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
                        at jdk.proxy4/jdk.proxy4.$Proxy106.commit(Unknown Source)
                        at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:654)
                        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:407)
                        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
                        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
                        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:220)
                        at jdk.proxy4/jdk.proxy4.$Proxy176.getUserByKey(Unknown Source)
        ........
                        at com.addonengine.addons.analytics.service.confluence.server.SpaceServiceServerImpl.getCurrentUser(SpaceServiceServerImpl.kt:189)
                        at com.addonengine.addons.analytics.service.confluence.server.SpaceServiceServerImpl.getByKeysInternal(SpaceServiceServerImpl.kt:158)
                        at com.addonengine.addons.analytics.service.confluence.server.SpaceServiceServerImpl.getByKey(SpaceServiceServerImpl.kt:45)
                        at com.addonengine.addons.analytics.service.confluence.server.ContentServiceServerImpl.toAnalyticsObject(ContentServiceServerImpl.kt:51)
                        at com.addonengine.addons.analytics.service.confluence.server.ContentServiceServerImpl.getByIdOrNull(ContentServiceServerImpl.kt:35)
        ...
                        at com.addonengine.addons.analytics.service.SpacePaginatedAnalyticsServiceImpl.getActivityByContent(SpacePaginatedAnalyticsServiceImpl.kt:92)
        
        

         

            Unassigned Unassigned
            14e5536372e2 Ojas Potdar
            Votes:
            2 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated: