[rules-users] Drools low concurrency/high synchronization? !NOSIG!

Edson Tirelli tirelli at post.com
Thu Mar 13 16:40:15 EDT 2008


   Leon,

   This specific problem was fixed in the 4.0.x branch a few weeks ago. I
believe we covered all the scenarios, but in case we missed any, please let
us know asap.

   []s
   Edson

2008/3/13, Leon Stein <leon at farecast.com>:
>
> 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
> >
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
  Edson Tirelli
  JBoss Drools Core Development
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080313/43cb8cdb/attachment.html 


More information about the rules-users mailing list