Uploaded image for project: 'Jira Software Data Center'
  1. Jira Software Data Center
  2. JSWSERVER-19230

REST call lastVisited executes board-scope-filter which leads to performance overhead

      Summary

      REST API call PUT /rest/projects/1.0/project/<PRJ>/lastVisited is used to track last visited project.
      While executing the call, method started to load the context thus executing com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl#getContext which leads to expensive computations (see JSWSERVER-16185).
      Due to excessive computation, it puts extra pressure for the permission cache and increases CPU usage, which may lead to degraded performance of the whole Jira instance.

      Steps to Reproduce

      1. Load any issue, Jira will execute PUT /rest/projects/1.0/project/<PRJ>/lastVisited as part of page loading
      2. Put a break point and collect stack-trace

      Expected Results

      getContext is not executed

      Actual Results

      getContext is executed

      Notes

      Taking into account that /lastVisited is executed for each issue load, this adds extra CPU overhead for Jira.
      Snippet from stacktrace:

      ...
      	at com.atlassian.greenhopper.service.query.QueryServiceImpl.getProjectsForRapidView(QueryServiceImpl.java:137)
      	at com.atlassian.greenhopper.service.query.QueryServiceImpl.getExplicitProjectsForRapidViewFilterQuery(QueryServiceImpl.java:128)
      	at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findProjectsByRapidView(ProjectRapidViewServiceImpl.java:69)
      	at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findRapidViewsByProject(ProjectRapidViewServiceImpl.java:51)
      	at com.atlassian.greenhopper.web.sidebar.ProjectBoardsHelper.getProjectBoards(ProjectBoardsHelper.java:53)
      	at com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl.getContext(BoardScopeFilterContextProviderImpl.java:47)
      	at com.atlassian.jira.projects.context.ProjectContextPopulatorImpl.populateWithProject(ProjectContextPopulatorImpl.java:82)
      	at com.atlassian.jira.projects.sidebar.navigation.SidebarNavigationService.getNavigationItemById(SidebarNavigationService.java:49)
      	at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedNavigationItemHelper.getNavigationItemById(LastVisitedNavigationItemHelper.java:58)
      	at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.isValid(LastVisitedItemInProjectService.java:101)
      	at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.setLastVisitedItemIdForProject(LastVisitedItemInProjectService.java:59)
      	at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemResource.updateLastVisitedItem(LastVisitedItemResource.java:51)
      ...
      

      Based on performance data, /lastVisited calls might be up to 10% of all CPU active threads.

      Workaround

      Please check JSWSERVER-16717 to be able to disable sidebar loading code.

          Form Name

            [JSWSERVER-19230] REST call lastVisited executes board-scope-filter which leads to performance overhead

            Agata Kowal made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 771485 ]
            Tony D. made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 483883 ]
            Kevin Allen made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 479634 ]
            Kevin Allen made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 478597 ]
            ferrari made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 474207 ]
            Kasia Derenda made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 458409 ]
            Clement made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 439722 ]
            Andriy Yakovlev [Atlassian] made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 438326 ]
            Andriy Yakovlev [Atlassian] made changes -
            Description Original: h3. Summary
            REST API call _PUT_ {{/rest/projects/1.0/project/<PRJ>/lastVisited}} is used to track last visited project.
            While executing the call, method started to load the context thus executing {{com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl#getContext}} which leads to expensive computations (see JSWSERVER-16185).
            Due to excessive computation, it puts extra pressure for the permission cache and increases CPU usage, which may lead to degraded performance of the whole Jira instance.

            h3. Steps to Reproduce
            # Load any issue, Jira will execute _PUT_ {{/rest/projects/1.0/project/<PRJ>/lastVisited}} as part of page loading
            # Put a break point and collect stack-trace

            h3. Expected Results
            _getContext_ is not executed

            h3. Actual Results
            _getContext_ is executed

            h3. Notes
            Taking into account that {{/lastVisited}} is executed for each issue load, this adds extra CPU overhead for Jira.
            Snippet from stacktrace:
            {noformat}
            ...
            at com.atlassian.greenhopper.service.query.QueryServiceImpl.getProjectsForRapidView(QueryServiceImpl.java:137)
            at com.atlassian.greenhopper.service.query.QueryServiceImpl.getExplicitProjectsForRapidViewFilterQuery(QueryServiceImpl.java:128)
            at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findProjectsByRapidView(ProjectRapidViewServiceImpl.java:69)
            at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findRapidViewsByProject(ProjectRapidViewServiceImpl.java:51)
            at com.atlassian.greenhopper.web.sidebar.ProjectBoardsHelper.getProjectBoards(ProjectBoardsHelper.java:53)
            at com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl.getContext(BoardScopeFilterContextProviderImpl.java:47)
            at com.atlassian.jira.projects.context.ProjectContextPopulatorImpl.populateWithProject(ProjectContextPopulatorImpl.java:82)
            at com.atlassian.jira.projects.sidebar.navigation.SidebarNavigationService.getNavigationItemById(SidebarNavigationService.java:49)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedNavigationItemHelper.getNavigationItemById(LastVisitedNavigationItemHelper.java:58)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.isValid(LastVisitedItemInProjectService.java:101)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.setLastVisitedItemIdForProject(LastVisitedItemInProjectService.java:59)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemResource.updateLastVisitedItem(LastVisitedItemResource.java:51)
            ...
            {noformat}

            h3.Workaround
            Please check JSWSERVER-16717 to be able to disable sidebar loading code.
            New: h3. Summary
            REST API call _PUT_ {{/rest/projects/1.0/project/<PRJ>/lastVisited}} is used to track last visited project.
            While executing the call, method started to load the context thus executing {{com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl#getContext}} which leads to expensive computations (see JSWSERVER-16185).
            Due to excessive computation, it puts extra pressure for the permission cache and increases CPU usage, which may lead to degraded performance of the whole Jira instance.

            h3. Steps to Reproduce
            # Load any issue, Jira will execute _PUT_ {{/rest/projects/1.0/project/<PRJ>/lastVisited}} as part of page loading
            # Put a break point and collect stack-trace

            h3. Expected Results
            _getContext_ is not executed

            h3. Actual Results
            _getContext_ is executed

            h3. Notes
            Taking into account that {{/lastVisited}} is executed for each issue load, this adds extra CPU overhead for Jira.
            Snippet from stacktrace:
            {noformat}
            ...
            at com.atlassian.greenhopper.service.query.QueryServiceImpl.getProjectsForRapidView(QueryServiceImpl.java:137)
            at com.atlassian.greenhopper.service.query.QueryServiceImpl.getExplicitProjectsForRapidViewFilterQuery(QueryServiceImpl.java:128)
            at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findProjectsByRapidView(ProjectRapidViewServiceImpl.java:69)
            at com.atlassian.greenhopper.service.rapid.ProjectRapidViewServiceImpl.findRapidViewsByProject(ProjectRapidViewServiceImpl.java:51)
            at com.atlassian.greenhopper.web.sidebar.ProjectBoardsHelper.getProjectBoards(ProjectBoardsHelper.java:53)
            at com.atlassian.greenhopper.web.sidebar.BoardScopeFilterContextProviderImpl.getContext(BoardScopeFilterContextProviderImpl.java:47)
            at com.atlassian.jira.projects.context.ProjectContextPopulatorImpl.populateWithProject(ProjectContextPopulatorImpl.java:82)
            at com.atlassian.jira.projects.sidebar.navigation.SidebarNavigationService.getNavigationItemById(SidebarNavigationService.java:49)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedNavigationItemHelper.getNavigationItemById(LastVisitedNavigationItemHelper.java:58)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.isValid(LastVisitedItemInProjectService.java:101)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemInProjectService.setLastVisitedItemIdForProject(LastVisitedItemInProjectService.java:59)
            at com.atlassian.jira.projects.sidebar.lastvisited.LastVisitedItemResource.updateLastVisitedItem(LastVisitedItemResource.java:51)
            ...
            {noformat}
            Based on performance data, {{/lastVisited}} calls might be up to 10% of all CPU active threads.

            h3.Workaround
            Please check JSWSERVER-16717 to be able to disable sidebar loading code.
            Kamil Kolonko made changes -
            Resolution New: Fixed [ 1 ]
            Status Original: Waiting for Release [ 12075 ] New: Closed [ 6 ]

              gtanczyk Grzegorz Tanczyk (Inactive)
              ayakovlev@atlassian.com Andriy Yakovlev [Atlassian]
              Affected customers:
              1 This affects my team
              Watchers:
              10 Start watching this issue

                Created:
                Updated:
                Resolved: