[rules-users] Drools low concurrency/high synchronization? !NOSIG!
Leon Stein
leon at farecast.com
Thu Mar 13 12:49:17 EDT 2008
I'll test with the latest from 4.0.x branch, in the meanwhile, more info
on the actual error:
Stack trace:
org.drools.RuntimeDroolsException: Exception executing predicate
org.drools.base.mvel.MVELPredicateExpression at 3863aa2c
at
org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:216)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:132)
at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
at org.drools.reteoo.Rete.assertObject(Rete.java:175)
at
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
at
org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:682)
<removed>
Caused by: org.mvel.CompileException: cannot invoke getter: getBar
[declr.class: org.example.Foo; act.class: null]
at
org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:52)
at
org.mvel.optimizers.impl.refl.VariableAccessor.getValue(VariableAccessor.java:39)
at
org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:22)
at
org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:21)
at
org.mvel.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:21)
at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
at org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
at org.mvel.MVEL.executeExpression(MVEL.java:235)
at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:36)
at
org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:210)
... 41 more
Caused by: java.lang.NullPointerException
at sun.reflect.GeneratedMethodAccessor292.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:42)
... 50 more
- Only occurs on multi-cpu boxes (Linux, Sun JRE 1.5.0_06, 64 bit) under
heavy load with simultaneous sessions running against same rule base
with thousands of facts in each session.
- The rule where exception occurs traverses properties of inserted
object (foo.bar expression):
rule "XYZ"
when
foo : FooHolder(foo.bar == Bar.GREEN)
...
then
...
end
The traversed objects are not shared between sessions, and properties
are never null.
Leon
Mark Proctor wrote:
> Leon S wrote:
>> We ran into this problem after upgrading from 3.0.* to 4.0.4.
>>
>> Is there a JIRA issue filed for this? I see a few MVEL-related issues scoped
>> for 4.0.5 and 5.0 releases, but nothing that looks like specifically
>> covering this problem.
>>
>>
> The user who reported this has not provided more information on how
> this is happening, nor have they confirmed that is or is not fixed in
> 4.0.x. My advice is quickly test your code against 4.0.x and let us
> know if there is a problem. There is no way we can determine if there
> is or isn't a problem from the stack trace given at the start of this
> conversation thread.
> http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/
>> Thanks,
>>
>> Leon
>>
>>
>> Mark Proctor wrote:
>>
>>> This looks different to what was fixed in 4.0.4. I'm cc'ing brockm to
>>> get his feedback as it looks like an MVEL bug on accessors.
>>>
>>> Mark
>>> Fernando Meyer wrote:
>>>
>>>> Hi Ingomar,
>>>>
>>>> Which drools version are you using? We made improvements on 4.0.4,
>>>> that fixes concurrency issues on mvel core, so if you aren't using it
>>>> please do an update and try test against your environment.
>>>>
>>>> Please let me know if your problems go away when you upgrade.
>>>>
>>>> Thanks
>>>>
>>>> On Jan 22, 2008 11:13 AM, Ingomar Otter <ingomar.otter at valtech.de
>>>> <mailto:ingomar.otter at valtech.de>> wrote:
>>>>
>>>> Folks,
>>>> I am currently trying to scale our implementation by farming out
>>>> request into mutliple threads. I am on a 4 CPU Mac.
>>>> A few things I am wondering about:
>>>> 1. Although I see an increase in CPU load when going from single
>>>> to multi-threaded processing the throughput increased marginally.
>>>> I am pretty sure that my measurements are correct. I have checked
>>>> the GC and this is not the source of congestion. My question here
>>>> is whether Drools is using lot's of synchronization that may
>>>> explain this.
>>>> 2. When I share the RuleBase accross threads (which I think is
>>>> valid?) I get interesting errors during execution. eg:
>>>>
>>>> org.drools.RuntimeDroolsException : Exception executing predicate
>>>> org.drools.base.mvel.MVELPredicateExpression at bb981e
>>>> atorg.drools.rule.PredicateConstraint.isAllowedCachedRight(
>>>> PredicateConstraint.java:246)
>>>> at
>>>>
>>>> org.drools.common.TripleBetaConstraints.isAllowedCachedRight(TripleBetaConstraints.java:200)
>>>>
>>>> atorg.drools.reteoo.JoinNode.assertObject(JoinNode.java:150)
>>>>
>>>>
>>>> atorg.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
>>>>
>>>> atorg.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
>>>> at org.drools.reteoo.Rete.assertObject(Rete.java:175)
>>>> atorg.drools.reteoo.ReteooRuleBase.assertObject
>>>> (ReteooRuleBase.java:192)
>>>> at
>>>>
>>>> org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
>>>>
>>>> at
>>>>
>>>> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
>>>>
>>>>
>>>> atorg.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
>>>>
>>>>
>>>> atorg.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:682)
>>>>
>>>> atxxxx.DroolsPD.validate(DroolsPD.java:66)
>>>> at xxxx.DroolsMTRunner.run(DroolsMTRunner.java:30)
>>>> at java.lang.Thread.run(Thread.java:552)
>>>> Caused by: org.mvel.CompileException: cannot invoke getter:
>>>> getSAClass [declr.class: xxx.AbstractSA; act.class: null]
>>>> atorg.mvel.optimizers.impl.refl.GetterAccessor.getValue(
>>>> GetterAccessor.java:52)
>>>> at
>>>>
>>>> org.mvel.optimizers.impl.refl.VariableAccessor.getValue(VariableAccessor.java:39)
>>>>
>>>> at
>>>>
>>>> org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:22)
>>>>
>>>> atorg.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:21)
>>>> at
>>>>
>>>> org.mvel.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:21)
>>>>
>>>> at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
>>>> at org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
>>>>
>>>> atorg.mvel.MVEL.executeExpression(MVEL.java:235)
>>>> at
>>>>
>>>> org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:36)
>>>>
>>>>
>>>> atorg.drools.rule.PredicateConstraint.isAllowedCachedRight(PredicateConstraint.java:240)
>>>> ... 13 more
>>>> Caused by: java.lang.NullPointerException
>>>> atsun.reflect.GeneratedMethodAccessor6.invoke (Unknown Source)
>>>> atsun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>> DelegatingMethodAccessorImpl.java:25)
>>>> atjava.lang.reflect.Method.invoke( Method.java:324)
>>>> at
>>>>
>>>> org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:42)
>>>>
>>>> ... 22 more
>>>>
>>>> Details:
>>>> * I use StatelessSessions which are private to the threads
>>>> * No data is shared between threads (with the exception of the
>>>> RuleBase, as outline above)
>>>> * I am on JDK 1.5
>>>>
>>>> I would be grateful for any pointers for 'correct' use of Drools
>>>> in an MT environment.
>>>> Cheers,
>>>> Ingomar
>>>>
>>>>
>>>> Ingomar Otter
>>>> Chief Technology Officer
>>>> ingomar.otter at valtech.de <mailto:ingomar.otter at valtech.de>
>>>> Mobile: +49 172 2367867
>>>>
>>>> Valtech GmbH
>>>> Bahnstraße 16
>>>> 40212 Düsseldorf
>>>> Germany
>>>>
>>>> Phone: +49 (0)211 179237-0
>>>> Fax: +49 211 179237-19
>>>>
>>>> www.valtech.de <http://www.valtech.de/>
>>>>
>>>> Geschäftsführer: Ingo Kriescher
>>>> Amtsgericht Düsseldorf HRB48672
>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Fernando Meyer http://fmeyer.org
>>>> JBoss Rules Core Developer
>>>> fernando at fmeyer.org <mailto:fernando at fmeyer.org>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>
>>
>>
>>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
More information about the rules-users
mailing list