[
https://issues.jboss.org/browse/DROOLS-1383?page=com.atlassian.jira.plugi...
]
Karen Zhu commented on DROOLS-1383:
-----------------------------------
Thanks for reply. The threaddump information is just like attached. I just wonder how it
will hold a PackageClassLoader lock when in a rule Consequence. I just new an object in
the UCR2 rule consquence. Meanwhile, did Drools 6.4.0 support the parallel class load? In
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.internalDefineClass(JavaDialectRuntimeData.java:694),
it will call internalDefineClass method then go into line 940 of ClassLoader.class of jdk.
In this line, I think the parallelLockMap should not be null when jdk set the
configuration as support parallel classload. Like the explanation in java doc below:
// Maps class name to the corresponding lock object when the current
// class loader is parallel capable.
// Note: VM also uses this field to decide if the current class loader
// is parallel capable and the appropriate lock object for class loading.
private final ConcurrentHashMap<String, Object> parallelLockMap;
And in ClassLoader.class line 283, the parallelLockMap is null because
ParallelLoaders.isRegistered(this.getClass()) returns false. So did the
PackageClassLoader.class in Drools lost the register() method? I'm so confused about
this.
Deadlock in PackageClassLoader
------------------------------
Key: DROOLS-1383
URL:
https://issues.jboss.org/browse/DROOLS-1383
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 6.4.0.Final
Reporter: Karen Zhu
Assignee: Mario Fusco
Priority: Blocker
Found one deadlock in PackageLoader. Did I write rule in a bad way? How did a consequence
of a rule will get the lock of PackageLoader which is needed by checkCerts(). Below is
threaddump information.
Found one Java-level deadlock:
=============================
"Thread-105-CustomClass-executor[17 17]":
waiting to lock monitor 0x00007f933c005b38 (object 0x00007f963ed294b0, a
java.lang.Object),
which is held by "Thread-17-CustomClass-executor[33 33]"
"Thread-17-CustomClass-executor[33 33]":
waiting to lock monitor 0x00007f933c0031f8 (object 0x00007f963ed294c0, a
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader),
which is held by "Thread-33-CustomClass-executor[9 9]"
"Thread-33-CustomClass-executor[9 9]":
waiting to lock monitor 0x00007f933c005b38 (object 0x00007f963ed294b0, a
java.lang.Object),
which is held by "Thread-17-CustomClass-executor[33 33]"
Java stack information for the threads listed above:
===================================================
"Thread-105-CustomClass-executor[17 17]":
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.fastFindClass(JavaDialectRuntimeData.java:662)
waiting to lock <0x00007f963ed294b0> (a java.lang.Object)
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.loadClass(JavaDialectRuntimeData.java:642)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at
org.drools.core.rule.MVELDialectRuntimeData.getParserConfiguration(MVELDialectRuntimeData.java:299)
at
org.drools.core.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)
at
org.drools.core.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:264)
at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:248)
at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:214)
at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:131)
at
org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:63)
at
org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:366)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:300)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
"Thread-17-CustomClass-executor[33 33]":
at java.lang.ClassLoader.checkCerts(ClassLoader.java:942)
waiting to lock <0x00007f963ed294c0> (a
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:666)
at java.lang.ClassLoader.defineClass(ClassLoader.java:794)
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.internalDefineClass(JavaDialectRuntimeData.java:694)
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.fastFindClass(JavaDialectRuntimeData.java:665)
locked <0x00007f963ed294b0> (a java.lang.Object)
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.loadClass(JavaDialectRuntimeData.java:642)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at
org.drools.core.rule.MVELDialectRuntimeData.getParserConfiguration(MVELDialectRuntimeData.java:299)
at
org.drools.core.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)
at
org.drools.core.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:264)
at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:248)
at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:214)
at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:131)
at
org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:63)
at
org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:366)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:300)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
"Thread-33-CustomClass-executor[9 9]":
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.fastFindClass(JavaDialectRuntimeData.java:662)
waiting to lock <0x00007f963ed294b0> (a java.lang.Object)
at
org.drools.core.rule.JavaDialectRuntimeData$PackageClassLoader.loadClass(JavaDialectRuntimeData.java:642)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at
com.cdr.apEventWrapperRules.ConstructorApBeansWrapper.constructorApBeansWrapper(ConstructorApBeansWrapper.java:55)
at
com.cdr.apEventWrapperRules.Rule_UCR2359988097.defaultConsequence(Rule_UCR2359988097.java:7)
at
com.cdr.apEventWrapperRules.Rule_UCR2359988097DefaultConsequenceInvokerGenerated.evaluate(Unknown
Source)
at
com.cdr.apEventWrapperRules.Rule_UCR2359988097DefaultConsequenceInvoker.evaluate(Unknown
Source)
at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1089)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:121)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:74)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1007)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1350)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
Found 1 deadlock.
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)