[rules-users] JITting error with 5.5.0.CR1

paulk_asert paulk at asert.com.au
Fri Nov 9 04:49:21 EST 2012


No replies? Is this getting through? Should I raise an issue for the bug?


paulk_asert wrote
> I should have added that the script still completes successfully, it is
> only the JIT optimization that is having problems and only when some
> threshold is reached causing an attempt at performing the optimization -
> as per descriptions I have read earlier. The problem is that I thought
> there was a fix already in place for this problem if I read the earlier
> posts correctly but perhaps I do not know how to enable it.
> paulk_asert wrote
>> When I run this Groovy script using drools 5.5.0.CR1 with numAnimals = 8
>> and numLegs = 120, it works fine. If I set numAnimals = 17 and numLegs =
>> 1020 then it fails with a JITting error. I saw a bunch of Jira issues
>> related to JITting issues but no open ones seemed to match exactly.
>> 
>> @GrabResolver('https://repository.jboss.org/nexus/content/groups/public-jboss/')
>> @Grab('org.drools:knowledge-api:5.5.0.CR1')
>> @Grab('org.drools:drools-compiler:5.5.0.CR1')
>> @Grab('org.drools:drools-core:5.5.0.CR1')
>> @Grab('com.sun.xml.bind:jaxb-xjc:2.2.5.jboss-1')
>> @GrabExclude('com.github.relaxng:relaxngDatatype')
>> @GrabResolver('http://repo2.maven.org/maven2/')
>> @Grab('org.mvel#mvel2;2.1.2.Final')
>> @Grab('org.slf4j#slf4j-simple;1.6.4')
>> import groovy.transform.Immutable
>> import static org.drools.KnowledgeBaseFactory.newKnowledgeBase
>> import static
>> org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder
>> import static org.drools.builder.ResourceType.DRL
>> import static org.drools.io.ResourceFactory.newReaderResource
>> 
>> def numAnimals = 8
>> def numLegs = 120
>> def kbuilder = newKnowledgeBuilder()
>> def drl = '''
>> dialect "mvel"
>> rule "deduce animal counts"
>>   when
>>     $crane : Crane( )
>>     $centipede : Centipede( )
>>     $tortoise : Tortoise(
>>       quantity + $crane.quantity + $centipede.quantity == ''' +
>> numAnimals + ''',
>>       quantity * numLegs + $crane.quantity * $crane.numLegs +
>> $centipede.quantity * $centipede.numLegs == ''' + numLegs + '''
>>     )
>>   then
>>     System.out.println( "Cranes " + $crane.getQuantity() )
>>     System.out.println( "Tortoises " + $tortoise.getQuantity() )
>>     System.out.println( "Centipedes " + $centipede.getQuantity() )
>> end
>> '''
>> kbuilder.add(newReaderResource(new StringReader(drl)), DRL)
>> def kbase = newKnowledgeBase()
>> kbase.addKnowledgePackages(kbuilder.knowledgePackages)
>> def ksession = kbase.newStatefulKnowledgeSession()
>> 
>> (numAnimals + 1).times { n ->
>>   if (numLegs.intdiv(Crane.numLegs) >= n) {
>>     ksession.insert(new Crane(n))
>>   }
>>   if (numLegs.intdiv(Tortoise.numLegs) >= n) {
>>     ksession.insert(new Tortoise(n))
>>   }
>>   if (numLegs.intdiv(Centipede.numLegs) >= n) {
>>     ksession.insert(new Centipede(n))
>>   }
>> }
>> 
>> ksession.fireAllRules()
>> ksession.dispose()
>> 
>> @Immutable
>> class Crane {
>>   static int numLegs = 2
>>   int quantity
>> }
>> 
>> @Immutable
>> class Tortoise {
>>   static int numLegs = 4
>>   int quantity
>> }
>> 
>> @Immutable
>> class Centipede {
>>   static int numLegs = 100
>>   int quantity
>> }
>> 
>> Here is the error message:
>> 
>> Exception in thread "Thread-1" java.lang.RuntimeException: Exception
>> jitting: quantity + $crane.quantity + $centipede.quantity == 17 &&
>> quantity * numLegs + $crane.quantity * $crane.numLegs +
>> $centipede.quantity * $centipede.numLegs == 1020
>> 	at
>> org.drools.rule.constraint.MvelConstraint.executeJitting(MvelConstraint.java:275)
>> 	at
>> org.drools.rule.constraint.MvelConstraint.access$200(MvelConstraint.java:51)
>> 	at
>> org.drools.rule.constraint.MvelConstraint$ConditionJitter.run(MvelConstraint.java:250)
>> 	at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>> 	at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>> 	at java.lang.Thread.run(Thread.java:722)
>> Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Error
>> writing method evaluate
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator.newInstance(ClassGenerator.java:200)
>> 	at
>> org.drools.rule.constraint.ASMConditionEvaluatorJitter.jitEvaluator(ASMConditionEvaluatorJitter.java:53)
>> 	at
>> org.drools.rule.constraint.MvelConstraint.executeJitting(MvelConstraint.java:273)
>> 	... 5 more
>> Caused by: java.lang.RuntimeException: Error writing method evaluate
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator$MethodDescr.write(ClassGenerator.java:881)
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator.generateBytecode(ClassGenerator.java:128)
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator.generateClass(ClassGenerator.java:144)
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator.newInstance(ClassGenerator.java:198)
>> 	... 7 more
>> Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
>> 	at org.mvel2.asm.Frame.merge(Frame.java:1373)
>> 	at org.mvel2.asm.Frame.merge(Frame.java:1329)
>> 	at org.mvel2.asm.MethodWriter.visitMaxs(MethodWriter.java:1282)
>> 	at
>> org.drools.rule.builder.dialect.asm.ClassGenerator$MethodDescr.write(ClassGenerator.java:879)
>> 	... 10 more
>> 
>> Is this a known issue?
>> 
>> Thanks, Paul.





--
View this message in context: http://drools.46999.n3.nabble.com/JITting-error-with-5-5-0-CR1-tp4020565p4020769.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list