[JIRA] (JENKINS-59501) ConcurrentModificationException during startup of Image.inside() step

13 views
Skip to first unread message

jon.sten@gmail.com (JIRA)

unread,
Sep 24, 2019, 4:29:05 AM9/24/19
to jenkinsc...@googlegroups.com
Jon Sten created an issue
 
Jenkins / Bug JENKINS-59501
ConcurrentModificationException during startup of Image.inside() step
Issue Type: Bug Bug
Assignee: Unassigned
Components: docker-commons-plugin
Created: 2019-09-24 08:28
Environment: Jenkins ver. 2.176.1
Docker Commons Plugin 1.15
Priority: Minor Minor
Reporter: Jon Sten

Occasionally when we trigger loads of similar pipeline jobs we get a ConcurrentModificationException during setup of Image.inside() step. Looking at the code it seems like DockerFingerprints#addRunFacet() is lacking synchronization, so if two builds uses the same docker image, and is unlucky enough, then that method will fail. This bug is very similar to JENKINS-41880 and the change PR-69. That change fixed the same problem for the neighbor method.

java.util.ConcurrentModificationException
	at java.util.Hashtable$Enumerator.next(Hashtable.java:1387)
	at com.thoughtworks.xstream.converters.collections.MapConverter.marshal(MapConverter.java:75)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
	at hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:263)
	at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:250)
Caused: java.lang.RuntimeException: Failed to serialize org.jenkinsci.plugins.docker.commons.fingerprint.DockerRunPtrFingerprintFacet#usages for class org.jenkinsci.plugins.docker.commons.fingerprint.DockerRunFingerprintFacet
	at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:254)
	at hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:222)
	at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:138)
	at hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:208)
	at hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:149)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:88)
	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:64)
	at hudson.util.PersistedList$ConverterImpl.marshal(PersistedList.java:237)
	at hudson.util.XStream2$AssociatedConverterImpl.marshal(XStream2.java:460)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
	at hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:263)
	at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:250)
Caused: java.lang.RuntimeException: Failed to serialize hudson.model.Fingerprint#facets for class hudson.model.Fingerprint
	at hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:254)
	at hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:222)
	at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:138)
	at hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:208)
	at hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:149)
	at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
	at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:82)
	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
	at com.thoughtworks.xstream.XStream.marshal(XStream.java:1026)
	at com.thoughtworks.xstream.XStream.marshal(XStream.java:1015)
	at com.thoughtworks.xstream.XStream.toXML(XStream.java:988)
	at hudson.XmlFile.write(XmlFile.java:193)
	at hudson.model.Fingerprint.save(Fingerprint.java:1307)
	at hudson.model.Fingerprint.save(Fingerprint.java:1251)
	at hudson.BulkChange.commit(BulkChange.java:98)
	at org.jenkinsci.plugins.docker.commons.fingerprint.DockerFingerprints.addRunFacet(DockerFingerprints.java:243)
	at org.jenkinsci.plugins.docker.workflow.WithContainerStep$Execution.start(WithContainerStep.java:195)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:269)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:177)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
	at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
Caused: java.io.IOException
	at hudson.XmlFile.write(XmlFile.java:200)
	at hudson.model.Fingerprint.save(Fingerprint.java:1307)
	at hudson.model.Fingerprint.save(Fingerprint.java:1251)
	at hudson.BulkChange.commit(BulkChange.java:98)
	at org.jenkinsci.plugins.docker.commons.fingerprint.DockerFingerprints.addRunFacet(DockerFingerprints.java:243)
	at org.jenkinsci.plugins.docker.workflow.WithContainerStep$Execution.start(WithContainerStep.java:195)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:269)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:177)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
	at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
	at org.jenkinsci.plugins.docker.workflow.Docker$Image.inside(Docker.groovy:134)
	at org.jenkinsci.plugins.docker.workflow.Docker.node(Docker.groovy:66)
	at org.jenkinsci.plugins.docker.workflow.Docker$Image.inside(Docker.groovy:122)
	at ... edited, call in pipeline code ...
	at ... edited, call in pipeline code ...
	at ... edited, call in pipeline code ...
	at ... edited, call in pipeline code ...
	at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2030)
	at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2015)
	at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.each(CpsDefaultGroovyMethods:2056)
	at ... edited, call in pipeline code ...
	at ... edited, call in pipeline code ...
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:84)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
	at sun.reflect.GeneratedMethodAccessor727.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:186)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:370)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:93)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:282)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:270)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:66)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

jon.sten@gmail.com (JIRA)

unread,
Sep 24, 2019, 4:34:01 AM9/24/19
to jenkinsc...@googlegroups.com

jon.sten@gmail.com (JIRA)

unread,
Sep 24, 2019, 4:34:03 AM9/24/19
to jenkinsc...@googlegroups.com
Jon Sten started work on Bug JENKINS-59501
 
Change By: Jon Sten
Status: Open In Progress

jon.sten@gmail.com (JIRA)

unread,
Nov 15, 2019, 7:21:02 AM11/15/19
to jenkinsc...@googlegroups.com

jon.sten@gmail.com (JIRA)

unread,
Nov 15, 2019, 7:22:02 AM11/15/19
to jenkinsc...@googlegroups.com

o.v.nenashev@gmail.com (JIRA)

unread,
Dec 23, 2019, 5:14:03 AM12/23/19
to jenkinsc...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages