We have a ScriptRunner plugin that includes a postfunction that will, under certain circumstances, initiate an additional transition for an issue.
For example, imagine there's an issue that's currently in Status A. A user initiates a transition, T0, to Status B. A post-function for T0 determines that the issue should in turn, initiate another transition, T1, to Status C. To the user, Status B is effectively skipped.
However, upon doing so, the issue Status is B despite the fact that both the issue history and currently available transitions suggest the issue in in Status C. And the Integrity Checker reports the following for the issue:
"The current step associated with the workflow entry with id 20373 has an incorrect stepId. (JRA-4539)"
The issue is resolved by running the Fix. But I'd like to know *why* this is happening in the first place. The postfunction is the last item in the list and therefore, should work.
Has anyone else run into a problem like this?
After digging in a bit more, this looks like a race condition in JIRA. So we ended up bailing on doing the transition in our plugin and instead, implemented it using the SR Fast-Track Transition post function. It adds a bit of overhead when setting up a new workflow. But it works!
How are you triggering the transition?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Here's a snippet of how we're performing the transition:
public static IssueService.IssueResult transitionIssue(MutableIssue issue, int transitionId, ApplicationUser user){
IssueInputParameters issueInputParameters = ComponentAccessor.getIssueService().newIssueInputParameters()
issueInputParameters.setSkipScreenCheck(true)
// Need to validate the transition before we can actually perform it.
IssueService.TransitionValidationResult validationResult = ComponentAccessor.getIssueService().validateTransition(user, issue.getId(), transitionId, issueInputParameters);
if (validationResult.isValid()) {
return ComponentAccessor.getIssueService().transition(user, validationResult)
}
log.error("Unable to validate transition!")
log.error(formatErrorCollection(validationResult.getErrorCollection()))
null
}
I should note that our logs aren't reporting any errors (there's also a similar isValid() check on the result of the IssueService.transition() function).
Thanks!
Shaun
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.