Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-63453

JQL function componentsLeadByUser() takes a lot of time on instances with large number of projects

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Low
    • 7.2.7
    • 6.4
    • JQL

    Description

      Summary

      JQL function componentsLeadByUser() takes time proportional to number of projects cubed.

      Expected behaviour

      componentsLeadByUser() should be executed fast even on instances with large number of projects.

      Current behaviour

      JQL queries that use componentsLeadByUser() can take tens of seconds on instances with ~1000 projects and minutes on larger instances.

      Verification steps

      To confirm that your JIRA instance experiences this problem you can take thread dump during execution of JQL that uses componentsLeadByUser() function (com.atlassian.jira.plugin.jql.function.ComponentsLeadByUserFunction.getFunctionValuesList) and look for thread that has stack trace similar to the following one (note: there can be easily hundreds of lines with invocations of next/hasNext methods):

      "http-nio-80-exec-125" #126716 daemon prio=5 os_prio=0 tid=0x0000000055262000 nid=0x1eac runnable [0x0000000079d52000]
         java.lang.Thread.State: RUNNABLE
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:547)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.google.common.collect.Iterators$5.next(Iterators.java:558)
              at com.atlassian.jira.plugin.jql.function.ComponentsLeadByUserFunction.getFunctionValuesList(ComponentsLeadByUserFunction.java:70)
              at com.atlassian.jira.plugin.jql.function.AbstractUserBasedFunction.getValues(AbstractUserBasedFunction.java:79)
              at com.atlassian.jira.jql.operand.FunctionOperandHandler$3.call(FunctionOperandHandler.java:61)
              at com.atlassian.jira.jql.operand.FunctionOperandHandler$3.call(FunctionOperandHandler.java:58)
              at com.atlassian.ozymandias.SafePluginPointAccess.call(SafePluginPointAccess.java:187)
              at com.atlassian.jira.jql.operand.FunctionOperandHandler.getValues(FunctionOperandHandler.java:58)
              at com.atlassian.jira.jql.operand.FunctionOperandHandler.getValues(FunctionOperandHandler.java:26)
              at com.atlassian.jira.jql.operand.DefaultJqlOperandResolver.getValues(DefaultJqlOperandResolver.java:87)
              at com.atlassian.jira.jql.operand.DefaultJqlOperandResolver.getValues(DefaultJqlOperandResolver.java:68)
              at com.atlassian.jira.jql.context.MultiClauseDecoratorContextFactory.getClauseContext(MultiClauseDecoratorContextFactory.java:58)
              at com.atlassian.jira.jql.context.ValidatingDecoratorContextFactory.getClauseContext(ValidatingDecoratorContextFactory.java:29)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:121)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
              at com.atlassian.query.clause.TerminalClauseImpl.accept(TerminalClauseImpl.java:143)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:75)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
              at com.atlassian.query.clause.AndClause.accept(AndClause.java:28)
              at com.atlassian.jira.jql.context.QueryContextVisitor.createContext(QueryContextVisitor.java:54)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:69)
              at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
              at com.atlassian.query.clause.AndClause.accept(AndClause.java:28)
              at com.atlassian.jira.bc.issue.search.DefaultSearchService.getQueryContext(DefaultSearchService.java:204)
              at sun.reflect.GeneratedMethodAccessor742.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
              at com.sun.proxy.$Proxy294.getQueryContext(Unknown Source)
              at sun.reflect.GeneratedMethodAccessor742.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136)
              at com.sun.proxy.$Proxy294.getQueryContext(Unknown Source)
              at com.atlassian.greenhopper.service.query.QueryToProjectMapper.getProjectContextIdsForQuery(QueryToProjectMapper.java:90)
              at com.atlassian.greenhopper.service.query.QueryServiceImpl.getProjectsForRapidViewFilterQuery(QueryServiceImpl.java:103)
              at com.atlassian.greenhopper.web.rapid.view.RapidViewProjectHelper.getRapidViewProjectList(RapidViewProjectHelper.java:42)
              at com.atlassian.greenhopper.web.rapid.view.RapidViewFilterHelper.buildSavedFilterEntry(RapidViewFilterHelper.java:281)
              at com.atlassian.greenhopper.web.rapid.view.RapidViewListHelper.buildListEntry(RapidViewListHelper.java:215)
              at com.atlassian.greenhopper.web.rapid.view.RapidViewListHelper.buildListModel(RapidViewListHelper.java:156)
      ...
      

      Workaround

      None

      Attachments

        Issue Links

          Activity

            People

              pbugalski Pawel Bugalski (Inactive)
              pbugalski Pawel Bugalski (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: