Workflow transition button missing for some users
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Summary
In the multi-node cluster, some users complain that they can't view the workflow options after some maintenance activity.
Environment
Jira 8.x , 9.x
Diagnosis
In one of the cluster Nodes ( Node 1 ), the below error was found in the atlassian-jira.
log
2023-03-10 07:25:07,460+0000 http-nio-8080-exec-745 ERROR test@example.com 445x4426443x1 133vzrm 10.122.6.123,10.198.12.138 /browse/ABC-38 [c.a.jira.workflow.DefaultOSWorkflowConfigurator] Could not load class 'com.onresolve.jira.groovy.GroovyCondition'
java.lang.ClassNotFoundException: com.onresolve.jira.groovy.GroovyCondition
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1420)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
at com.atlassian.core.util.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:79)
at com.atlassian.core.util.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:48)
at com.atlassian.jira.workflow.DefaultOSWorkflowConfigurator$LegacyJiraTypeResolver.loadObject(DefaultOSWorkflowConfigurator.java:153)
at com.opensymphony.workflow.TypeResolver.getCondition(TypeResolver.java:73)
at com.atlassian.jira.workflow.DefaultOSWorkflowConfigurator$JiraTypeResolverDelegator.getCondition(DefaultOSWorkflowConfigurator.java:106)
at com.opensymphony.workflow.AbstractWorkflow.passesCondition(AbstractWorkflow.java:1041)
at com.opensymphony.workflow.AbstractWorkflow.passesConditions(AbstractWorkflow.java:1083)
at com.opensymphony.workflow.AbstractWorkflow.passesConditions(AbstractWorkflow.java:1107)
at com.opensymphony.workflow.AbstractWorkflow.getAvailableActions(AbstractWorkflow.java:106)
at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getAvailableActionIds(IssueWorkflowManagerImpl.java:166)
at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getAvailableActions(IssueWorkflowManagerImpl.java:57)
at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getSortedAvailableActions(IssueWorkflowManagerImpl.java:87)
at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getSortedAvailableActions(IssueWorkflowManagerImpl.java:82)
at com.atlassian.jira.issue.transitions.TransitionLinkFactory.getAvailableActions(TransitionLinkFactory.java:53)
at com.atlassian.jira.issue.transitions.TransitionLinkFactory.getItems(TransitionLinkFactory.java:43)
at com.atlassian.plugin.web.DefaultWebInterfaceManager.getDynamicWebItems(DefaultWebInterfaceManager.java:249)
at com.atlassian.plugin.web.DefaultWebInterfaceManager.getDisplayableWebItems(DefaultWebInterfaceManager.java:232)
at com.atlassian.jira.plugin.webfragment.DefaultSimpleLinkManager.getLinksForSection(DefaultSimpleLinkManager.java:120)
at com.atlassian.jira.plugin.webfragment.ThreadLocalCachingSimpleLinkManager.access$701(ThreadLocalCachingSimpleLinkManager.java:28)
at com.atlassian.jira.plugin.webfragment.ThreadLocalCachingSimpleLinkManager$3.load(ThreadLocalCachingSimpleLinkManager.java:149)
at com.atlassian.jira.plugin.webfragment.ThreadLocalCachingSimpleLinkManager$3.load(ThreadLocalCachingSimpleLinkManager.java:146)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3528)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2277)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044)
at com.google.common.cache.LocalCache.get(LocalCache.java:3952)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
at com.atlassian.jira.plugin.webfragment.ThreadLocalCachingSimpleLinkManager.getLinksForSection(ThreadLocalCachingSimpleLinkManager.java:153)
at com.atlassian.jira.plugin.webfragment.ThreadLocalCachingSimpleLinkManager.getLinksForSection(ThreadLocalCachingSimpleLinkManager.java:140)
... 2 filtered
at java.lang.reflect.Method.invoke(Method.java:498)
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
at com.sun.proxy.$Proxy558.getLinksForSection(Unknown Source)
... 2 filtered
The issue pointed to a specific plugin, "Adaptavist ScriptRunner for JIRA."
Cause
The below plugin was disabled on (in this case) Node 1, and users were facing issues when they connected to Node 1.
<plugin>
<key>com.onresolve.jira.groovy.groovyrunner</key>
<name>Adaptavist ScriptRunner for JIRA</name>
<version>7.12.0</version>
<vendor>Adaptavist.com Ltd</vendor>
<status>DISABLED</status>
<vendor-url>http://www.adaptavist.com</vendor-url>
<framework-version>2</framework-version>
<bundled>User installed</bundled>
</plugin>
The plugin was enabled on the other nodes (i.e. Node 2). Hence, users were not facing when they connected with any of those nodes.
<plugin>
<key>com.onresolve.jira.groovy.groovyrunner</key>
<name>Adaptavist ScriptRunner for JIRA</name>
<version>7.12.0</version>
<vendor>Adaptavist.com Ltd</vendor>
<status>ENABLED</status>
<vendor-url>http://www.adaptavist.com</vendor-url>
<framework-version>2</framework-version>
<bundled>User installed</bundled>
</plugin>
Typically, the plugin state should be the same across the node. However, we may result in such a situation due to local plugin cache issues/corruption.
Solution
Clear the local plugin cache and restart the node (in this case Node 1) where the plugin was disabled, and make sure the plugin is enabled on both nodes.
If the issue is not resolved, don't hesitate to contact Atlassian Support via this link for further investigation.