Optimisation - Avoid multi evaluation of Condition defined for an Workflow Action

XMLWordPrintable

    • Type: Suggestion
    • Resolution: Won't Fix
    • None
    • Component/s: None

      See below a point of improvement of Performances

      Imagine the following Workflow ...

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
      <workflow>
      	...
      	<initial-actions>
      		<action id="1" name="Create Issue">...</action>
      	</initial-actions>
      
      	<common-actions>
      
      		<action id="1010" name="Action_1010" view="comment">
      			...
      			<restrict-to>
      				<conditions>
      					<condition type="class">
      						<arg name="class.name">com.atlassian.jira.workflow.condition.AnyCondition</arg>
      					</condition>
      				</conditions>
      			</restrict-to>
      			...
      		</action>
      
      		<action id="1020" name="Action_1020" view="comment">
      			...
      			<restrict-to>
      				<conditions>
      					<condition type="class">
      						<arg name="class.name">com.atlassian.jira.workflow.condition.AnyCondition</arg>
      					</condition>
      				</conditions>
      			</restrict-to>
      			...
      		</action>
      
      		<action id="1030" name="Action_1030" view="comment">
      			...
      			<restrict-to>
      				<conditions>
      					<condition type="class">
      						<arg name="class.name">com.atlassian.jira.workflow.condition.AnyCondition</arg>
      					</condition>
      				</conditions>
      			</restrict-to>
      			...
      		</action>
      	</common-actions>
      
      	<steps>
      		<step id="1" name="In Progress">
      			...
      			<actions>
      				<common-action id="10" />
      				<common-action id="20" />
      				<common-action id="30" />
      			</actions>
      		</step>
      		...
      	</steps>
      </workflow>

      In previous exemple, the com.atlassian.jira.workflow.condition.AnyCondition is evaluate 4 times.

      1. In Velocity Context preparation
        IssueSummaryWebComponent.getHtml(IssueSummaryLayoutBean layout, Issue issue, User remoteUser)
        ...params.put("availableActions", getAvailableActions(issue));
      1. For each iterations in Velocity Template (templates/jira/issue/summary/issuesummary.vm)
        $summaryComponent.isLazyDecoratable($issue, $action.value)
        ...IssueUtilsBean.isValidAction(Issue issue, int action)
        ......IssueUtilsBean.loadAvailableActions(Issue issueObject)

      When Workflow became more complexe (i.e 3 Transitions from a Step with at least 3 conditions per Transition), and also with more complex conditions, the time allocated to conditions's evaluation is not trivial.

      Rgsd
      Vincent

            Assignee:
            Unassigned
            Reporter:
            Vincent Thoulé
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: