On Apr 8, 2011, at 5:59 PM, Jason Dillon wrote:
> I've tested 1.6 (deadlocks very quickly), 1.7.10 and 1.8.0-rc-3 both of which require heavy concurrency for this to happen.
>
> The scenario is that I have 1 hudson multi-configuration project with a groovy builder that simply evaluates (using its system mode, so in the same JVM its re-using the Groovy runtime and essentially doing new GroovyShell().evaluate(string)) :
>
> println "Hello from ${this}"
>
> I've set up 4 axes a,b,c all have 10 values, d has 2, so thats 2000 builds and 2000 groovy evaluations from a string. This takes ~40s to complete on my mac over 10 executor threads. I set it up to run every minute. I've gotten well over 40000 builds/script evaluations. But it always seems to end after some time with a deadlock when parsing the script/building the script class and using java.beans.* methods:
>
> <snip>
> Java-level deadlocks have been detected
>
> This means that some threads are blocked waiting to enter a synchronization block or
> waiting to reenter a synchronization block after an Object.wait() call, where each thread
> owns one monitor while trying to obtain another monitor already held by another thread.
>
> Deadlock:
>
> Executor #4 for master : executing test-groovy/a=3,b=3,c=8,d=1 #56 is waiting to lock java.beans.PropertyDescriptor <at> 34f4d25f which is held by Executor #8 for master : executing test-groovy/a=5,b=4,c=3,d=0 #56
> Executor #8 for master : executing test-groovy/a=5,b=4,c=3,d=0 #56 is waiting to lock java.lang.Object <at> 1bbb60c3 which is held by Executor #4 for master : executing test-groovy/a=3,b=3,c=8,d=1 #56
>
> Thread stacks
>
> Executor #4 for master : executing test-groovy/a=3,b=3,c=8,d=1 #56 [BLOCKED; waiting to lock java.beans.PropertyDescriptor <at> 34f4d25f]
> java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:158)
> java.beans.Introspector.processPropertyDescriptors(Introspector.java:683)
> java.beans.Introspector.getTargetPropertyInfo(Introspector.java:615)
> java.beans.Introspector.getBeanInfo(Introspector.java:407)
> java.beans.Introspector.getBeanInfo(Introspector.java:164)
> groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2937)
> java.security.AccessController.doPrivileged(native method)
> groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2935)
> groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2918)
> org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
> org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
> org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:242)
> org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:751)
> groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
> groovy.lang.Script.<init>(Script.java:40)
> groovy.lang.Script.<init>(Script.java:37)
> Script1.<init>(Script1.groovy)
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(native method)
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> java.lang.Class.newInstance0(Class.java:355)
> java.lang.Class.newInstance(Class.java:308)
> org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:408)
> groovy.lang.GroovyShell.parse(GroovyShell.java:743)
> groovy.lang.GroovyShell.parse(GroovyShell.java:723)
> groovy.lang.GroovyShell.evaluate(GroovyShell.java:680)
> groovy.lang.GroovyShell.evaluate(GroovyShell.java:666)
> hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:50)
> hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
> hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601)
> hudson.model.Build$RunnerImpl.build(Build.java:174)
> hudson.model.Build$RunnerImpl.doRun(Build.java:138)
> hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
> hudson.model.Run.run(Run.java:1277)
> hudson.matrix.MatrixRun.run(MatrixRun.java:145)
> hudson.model.ResourceController.execute(ResourceController.java:88)
> hudson.model.Executor.run(Executor.java:137)
>
>
> Executor #8 for master : executing test-groovy/a=5,b=4,c=3,d=0 #56 [BLOCKED; waiting to lock java.lang.Object <at> 1bbb60c3]
> java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1277)
> java.beans.Introspector.internalFindMethod(Introspector.java:1312)
> java.beans.Introspector.findMethod(Introspector.java:1383)
> java.beans.Introspector.findMethod(Introspector.java:1363)
> java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:179)
> groovy.lang.MetaClassImpl.applyPropertyDescriptors(MetaClassImpl.java:2212)
> groovy.lang.MetaClassImpl.setupProperties(MetaClassImpl.java:1992)
> groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2947)
> groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2918)
> org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
> org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
> org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:242)
> org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:751)
> groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
> groovy.lang.Script.<init>(Script.java:40)
> groovy.lang.Script.<init>(Script.java:37)
> Script1.<init>(Script1.groovy)
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(native method)
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> java.lang.Class.newInstance0(Class.java:355)
> java.lang.Class.newInstance(Class.java:308)
> org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:408)
> groovy.lang.GroovyShell.parse(GroovyShell.java:743)
> groovy.lang.GroovyShell.parse(GroovyShell.java:723)
> groovy.lang.GroovyShell.evaluate(GroovyShell.java:680)
> groovy.lang.GroovyShell.evaluate(GroovyShell.java:666)
> hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:50)
> hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
> hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601)
> hudson.model.Build$RunnerImpl.build(Build.java:174)
> hudson.model.Build$RunnerImpl.doRun(Build.java:138)
> hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
> hudson.model.Run.run(Run.java:1277)
> hudson.matrix.MatrixRun.run(MatrixRun.java:145)
> hudson.model.ResourceController.execute(ResourceController.java:88)
> hudson.model.Executor.run(Executor.java:137)
> </snip>
>
> Any idea why?
>
> --jason
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email