[JIRA] (JENKINS-44989) Updating JIRA-issues deadlock

1 view
Skip to first unread message

thomson.tat@razerzone.com (JIRA)

unread,
Mar 7, 2018, 3:51:35 PM3/7/18
to jenkinsc...@googlegroups.com
Thomson Tat commented on Bug JENKINS-44989
 
Re: Updating JIRA-issues deadlock

We're seeing the same problem as well.  Seems to occur randomly.  Every now and then, it would update 50 to 200 unrelated JIRA tickets.

Add Comment Add Comment
 
This message was sent by Atlassian JIRA (v7.3.0#73011-sha1:3c73d0e)
Atlassian logo

thomson.tat@razerzone.com (JIRA)

unread,
Mar 7, 2018, 3:52:02 PM3/7/18
to jenkinsc...@googlegroups.com

dieter.guthmann@gossenmetrawatt.com (JIRA)

unread,
Mar 8, 2018, 2:43:03 AM3/8/18
to jenkinsc...@googlegroups.com
Dieter G. commented on Bug JENKINS-44989
 
Re: Updating JIRA-issues deadlock

We've disabled the JIRA-Plugin last year due to this Problem.

We are now building some GIT-Projects with jenkins - I've tested the JIRA Plugin recently again.
The problem seem to be independent from SVN...

java.lang.StackOverflowError
	at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
	at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
	at java.io.File.exists(File.java:819)
	at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1282)
	at sun.misc.URLClassPath$FileLoader.findResource(URLClassPath.java:1249)
	at sun.misc.URLClassPath$1.next(URLClassPath.java:267)
	at sun.misc.URLClassPath$1.hasMoreElements(URLClassPath.java:277)
	at java.net.URLClassLoader$3$1.run(URLClassLoader.java:601)
	at java.net.URLClassLoader$3$1.run(URLClassLoader.java:599)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader$3.next(URLClassLoader.java:598)
	at java.net.URLClassLoader$3.hasMoreElements(URLClassLoader.java:623)
	at org.eclipse.jetty.webapp.WebAppClassLoader.getResources(WebAppClassLoader.java:380)
	at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:348)
	at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393)
	at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474)
	at javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:293)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:289)
	at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:267)
	at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:127)
	at org.apache.commons.digester.Digester.getFactory(Digester.java:537)
	at org.apache.commons.digester.Digester.getParser(Digester.java:791)
	at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1068)
	at org.apache.commons.digester.Digester.parse(Digester.java:1871)
	at hudson.scm.SubversionChangeLogParser.parse(SubversionChangeLogParser.java:76)
	at hudson.scm.SubversionChangeLogParser.parse(SubversionChangeLogParser.java:43)
	at hudson.scm.ChangeLogParser.parse(ChangeLogParser.java:57)
	at hudson.model.AbstractBuild.calcChangeSet(AbstractBuild.java:875)
	at hudson.model.AbstractBuild.getChangeSet(AbstractBuild.java:843)
	at hudson.plugins.jira.RunScmChangeExtractor.getChanges(RunScmChangeExtractor.java:29)
	at hudson.plugins.jira.selector.DefaultIssueSelector.findIssues(DefaultIssueSelector.java:73)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromChangeLog(DefaultIssueSelector.java:97)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromCurrentBuild(DefaultIssueSelector.java:121)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:109)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	...
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesRecursive(DefaultIssueSelector.java:110)
	at hudson.plugins.jira.selector.DefaultIssueSelector.addIssuesFromDependentBuilds(DefaultIssueSelector.java:135)

thomson.tat@razerzone.com (JIRA)

unread,
Mar 8, 2018, 5:33:02 PM3/8/18
to jenkinsc...@googlegroups.com
Thomson Tat updated an issue
 
Jenkins / Bug JENKINS-44989
Updating JIRA-issues deadlock
Change By: Thomson Tat
Attachment: image-2018-03-08-14-32-54-776.png

thomson.tat@razerzone.com (JIRA)

unread,
Mar 8, 2018, 5:39:02 PM3/8/18
to jenkinsc...@googlegroups.com
Thomson Tat commented on Bug JENKINS-44989
 
Re: Updating JIRA-issues deadlock

It looks like it's a combination of two things that's causing this bug.  There's a bug that's causing Jenkins to see changes to it's dependencies even though there aren't any.  This seems random for us.  And I'm not sure how or why it thinks there's a dependency on itself?

https://issues.jenkins-ci.org/browse/JENKINS-46995

i.e. Job A #300 has dependency changes in Job A #290-299.  Job A #290 has dependency changes in Job A #275-289....

 

The DefaultIssueSelector looks at all of these dependencies, which can take a really long time to finish. This recursive call doesn't have any limit on how far down the dependencies it's looking.  This can end up being hundreds of builds down the chain.

https://github.com/jenkinsci/jira-plugin/blob/master/src/main/java/hudson/plugins/jira/selector/DefaultIssueSelector.java#L110

https://github.com/jenkinsci/jira-plugin/blob/master/src/main/java/hudson/plugins/jira/selector/DefaultIssueSelector.java#L135

It looks like it's a bug in the refactoring of the original issue selector.

https://github.com/jenkinsci/jira-plugin/commit/2eace064c77979cab041e61d82dea47eb44cc886#diff-e381acd1474876247543cc9edc4ea09e

As far as I can tell, the original code (roughly) looks like this:

findIssueIdsRecursive()
{
  findIssues()
  for each in dependency
    findIssues()
  // findIssueIdsRecursive is not called again
}
 

The refactoring changed it to roughly this:

addIssuesRecursive()
{  
    addIssuesCarriedOverFromPreviousBuild()
    addIssuesFromCurrentBuild()
    addIssuesFromDependentBuilds()
}

addIssuesFromDependentBuilds()
{    
    for each in dependency
       // Looking at dependent builds of this build, along with all of its dependent builds
       addIssuesRecursive()
}

 

When we're running into this problem, it looks like a deadlock, but it's actually just taking hours instead of minutes like it normally does.

 

Those spikes are probably when no one noticed on our team and it finished.  The smaller spikes are probably when someone noticed and we had to manually abort the thread, thinking the plugin deadlocked again.

 

scm_issue_link@java.net (JIRA)

unread,
Mar 12, 2018, 7:01:03 PM3/12/18
to jenkinsc...@googlegroups.com
SCM/JIRA link daemon commented on Bug JENKINS-44989
 
Re: Updating JIRA-issues deadlock

Code changed in jenkins
User: Thomson Tat
Path:
src/main/java/hudson/plugins/jira/selector/DefaultIssueSelector.java
http://jenkins-ci.org/commit/jira-plugin/c1d681ba6333b7341babefbb37fcff363eb83f8b
Log:
JENKINS-44989 - addIssuesFromDependentBuilds method shouldn't call addIssuesRecursive

radek.antoniuk@quiddia.com (JIRA)

unread,
Mar 27, 2020, 1:32:04 PM3/27/20
to jenkinsc...@googlegroups.com
Change By: Radek Antoniuk
Status: Open Fixed but Unreleased
Resolution: Fixed
This message was sent by Atlassian Jira (v7.13.12#713012-sha1:6e07c38)
Atlassian logo

radek.antoniuk@quiddia.com (JIRA)

unread,
Mar 27, 2020, 1:32:07 PM3/27/20
to jenkinsc...@googlegroups.com
Radek Antoniuk updated an issue
Change By: Radek Antoniuk
Labels: jira-plugin-2.5.2

radek.antoniuk@quiddia.com (JIRA)

unread,
Mar 27, 2020, 1:32:07 PM3/27/20
to jenkinsc...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages