timja / jenkins-gh-issues-poc-06-18

0 stars 0 forks source link

[JENKINS-22553] Listing plugins shortly after installation throws ConcurrentModificationException #5050

Closed timja closed 10 years ago

timja commented 10 years ago

Steps to reproduce: install multiple plugins on /pluginManager/availabale and load /pluginManager/installed while installation is in progress. Often seen running acceptance-tests.

PluginManager exposes modifiable plugin list that is fed to j:forEach tag. List is being updated by pending plugin installations while the jelly tag is using its iterator.

javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:${JENKINS_HOME}/war/WEB-INF/lib/jenkins-core-1.532.2.jar!/hudson/PluginManager/installed.jelly:50:69:  java.util.ConcurrentModificationException
 at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:103)
 at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
 at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:182)
 at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
 at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:631)
 at org.kohsuke.stapler.Stapler.service(Stapler.java:225)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
 at winstone.ServletConfiguration.execute(ServletConfiguration.java:248)
 at winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:376)
 at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
 at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
 at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
 at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
 at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
 at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
 at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
 at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
 at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
 at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
 at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
 at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
 at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
 at winstone.RequestDispatcher.forward(RequestDispatcher.java:331)
 at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:227)
 at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
 at java.util.concurrent.FutureTask.run(FutureTask.java:262)
 at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.commons.jelly.JellyTagException: jar:file:${JENKINS_HOME}/war/WEB-INF/lib/jenkins-core-1.532.2.jar!/hudson/PluginManager/installed.jelly:50:69:  java.util.ConcurrentModificationException
 at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:726)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:281)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
 at org.apache.commons.jelly.tags.core.OtherwiseTag.doTag(OtherwiseTag.java:41)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
 at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
 at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
 at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:81)
 at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
 at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
 at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:95)
 ... 39 more
Caused by: java.util.ConcurrentModificationException
 at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
 at java.util.ArrayList$Itr.next(ArrayList.java:831)
 at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:115)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

Originally reported by olivergondza, imported from: Listing plugins shortly after installation throws ConcurrentModificationException
  • assignee: olivergondza
  • status: Resolved
  • priority: Major
  • resolution: Fixed
  • resolved: 2014-04-12T07:31:01+00:00
  • imported: 2022/01/10
timja commented 10 years ago

olivergondza:

https://github.com/jenkinsci/jenkins/pull/1180

timja commented 10 years ago

scm_issue_link:

Code changed in jenkins
User: Oliver Gondža
Path:
core/src/main/java/hudson/PluginManager.java
http://jenkins-ci.org/commit/jenkins/f76eca4ee801869c1cbf9b59e73fe76594fe265e
Log:
[FIXED JENKINS-22553] Do not expose plugin list that can be a subject of modification

timja commented 10 years ago

scm_issue_link:

Code changed in jenkins
User: Oliver Gondža
Path:
core/src/main/java/hudson/PluginManager.java
http://jenkins-ci.org/commit/jenkins/511a84eec2c9b07ea9bb20081b61e53a65736b7f
Log:
Merge pull request #1180 from olivergondza/plugin-list-safe-copy

[FIXED JENKINS-22553] Do not expose plugin list that can be a subject of modification

timja commented 10 years ago

scm_issue_link:

Code changed in jenkins
User: Oliver Gondža
Path:
changelog.html
http://jenkins-ci.org/commit/jenkins/54c13f147bca9af2ad8c4b9197ada1e9cde56946
Log:
JENKINS-22553 Noting #1180

Compare: https://github.com/jenkinsci/jenkins/compare/7f76a93dd947...54c13f147bca

timja commented 10 years ago

dogfood:

Integrated in jenkins_main_trunk #3297
[FIXED JENKINS-22553] Do not expose plugin list that can be a subject of modification (Revision f76eca4ee801869c1cbf9b59e73fe76594fe265e)
JENKINS-22553 Noting #1180 (Revision 54c13f147bca9af2ad8c4b9197ada1e9cde56946)

Result = SUCCESS
ogondza : f76eca4ee801869c1cbf9b59e73fe76594fe265e
Files :

ogondza : 54c13f147bca9af2ad8c4b9197ada1e9cde56946
Files :

timja commented 10 years ago

olivergondza:

Fixed in 1.560.

timja commented 8 years ago

scm_issue_link:

Code changed in jenkins
User: Oliver Gondža
Path:
src/main/java/org/jenkinsci/test/acceptance/selenium/SanityChecker.java
http://jenkins-ci.org/commit/acceptance-test-harness/45f654774e9fad43bda39dca4cdfaff34efe24c8
Log:
Quit hiding JENKINS-22553 symptoms - grace period is over