[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