Fixing Workflows with Duplicate occurrence of action

Still need help?

The Atlassian Community is here for you.

Ask the community

Problem

  • Unable to view or edit workflows
  • Navigating to the Statuses page throws a "Sorry, we had some technical problems during your last operation."
  • Workflows section displays the error:

"The JIRA server was contacted but has returned an error response. We are unsure of the result of this operation."

The following appears in the JIRA log:

Error converting XML to workflow descriptor.: root cause: Duplicate occurance of action ID 131 found in step 7

Cause

For unknown reasons a JIRA workflow became corrupt and contains a duplicate action. The XML can't be parsed correctly and the Workflows section fails to be displayed.

Workaround

Manually remove the duplicate action from the database.

  1. Find the affected workflow:
    from the Error message in the logs, use the ID number to search in the database for workflow that has 2 sets of the same action:

    SELECT id, workflowname FROM jiraworkflows WHERE descriptor like '%<action id="<ID>"%<action id="<ID>"%';

    should return only one workflow. You'll use the id returned in step 5

  2. Extract the descriptor:

    Copy (SELECT descriptor FROM jiraworkflows WHERE descriptor like '%<action id="<ID>"%<action id="<ID>"%') to '/tmp/desc.csv' DELIMITER ',' QUOTE '''' CSV;

    will create a /tmp/desc.csv file with the workflow XML

  3. Manually search for the step mentioned in the Error and it will contain 2 action IDs exactly the same.

    expand to see example...
     <step id="7" name="App Approved">
          <meta name="jira.status.id">12104</meta>
          <actions>
    
            .... some actions ...
    
            <action id="131" name="Cancel">
              <meta name="jira.description"></meta>
              <meta name="jira.fieldscreen.id"></meta>
              <results>
                <unconditional-result old-status="null" status="null" step="3">
                  <post-functions>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="eventTypeId">13</arg>
                      <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>
                    </function>
                  </post-functions>
                </unconditional-result>
              </results>
            </action>
            <action id="131" name="Cancel">
              <meta name="jira.description"></meta>
              <meta name="jira.fieldscreen.id"></meta>
              <results>
                <unconditional-result old-status="null" status="null" step="3">
                  <post-functions>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>
                    </function>
                    <function type="class">
                      <arg name="eventTypeId">13</arg>
                      <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>
                    </function>
                  </post-functions>
                </unconditional-result>
              </results>
            </action>
          </actions>
        </step>
  4. Remove one ID from <action id= to </action>
  5. Update the Workflow in the DB

    Always back up your data before performing any modifications to the database. If possible, test any alter, insert, update, or delete SQL commands on a staging server first.

    UPDATE jiraworkflows SET descriptor = '<paste here the full edited XML>' where id = '<database workflow id returned from step 1>';



Last modified on Sep 10, 2020

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.