Details
-
Bug
-
Resolution: Timed out
-
Low
-
None
-
4.2
-
4.02
-
Severity 3 - Minor
-
-
Description
The DefaultLabelManager takes in IssueIds. This means that it has to lookup the issue that it is trying to change. As there is no issue cache this a DB query. A lot of the time the caller already has the issue which means we end up doing an extra DB query.
For example when creating an issue JIRA is forced to do a SQL query for the issue that it is creating (which I guess must be in the database at this stage?):
http-8090-Processor6@10752 daemon, prio=5, in group 'main', status: 'runnable' java.lang.Thread.State: RUNNABLE at com.atlassian.jira.issue.managers.DefaultIssueManager.getIssueObject(DefaultIssueManager.java:254) at sun.reflect.GeneratedMethodAccessor204.invoke(Unknown Source:-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.atlassian.util.profiling.object.ObjectProfiler.profiledInvoke(ObjectProfiler.java:73) at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:28) at $Proxy38.getIssueObject(Unknown Source:-1) at com.atlassian.jira.issue.label.DefaultLabelManager.findIssue(DefaultLabelManager.java:243) at com.atlassian.jira.issue.label.DefaultLabelManager.setLabels(DefaultLabelManager.java:81) at com.atlassian.jira.issue.fields.LabelsSystemField.createValue(LabelsSystemField.java:234) at com.atlassian.jira.workflow.function.issue.IssueCreateFunction.execute(IssueCreateFunction.java:83) at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:869) at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1265) at com.opensymphony.workflow.AbstractWorkflow.initialize(AbstractWorkflow.java:618) at com.atlassian.jira.workflow.SimpleWorkflowManager.createIssue(SimpleWorkflowManager.java:219) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:431) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:372) at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.atlassian.util.profiling.object.ObjectProfiler.profiledInvoke(ObjectProfiler.java:73) at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:28) at $Proxy38.createIssue(Unknown Source:-1) at com.atlassian.jira.bc.issue.DefaultIssueService.create(DefaultIssueService.java:163) at com.atlassian.jira.web.action.issue.CreateIssueDetails.createIssue(CreateIssueDetails.java:96) at com.atlassian.jira.web.action.issue.CreateIssueDetails.doExecute(CreateIssueDetails.java:72)
This seems to be very inefficient.