ArithmeticException: Non-terminating decimal expansion with non-executable model after jitting
Issue
When BigDecimal-type "divide" expression value / 7B (*1-1) in the following rule (*1) is 15B / 7B, the constraint evaluation starts failing with ArithmeticException (*2-1) after it was evaluated several times.
(*1) Example rule
dialect "mvel"
rule "Rule 1"
when
$fact : Fact( value / 7B >= 0 ) <---------- (*1-1)
then
System.out.println("***** " + drools.getRule().getName() + ": $fact = " + $fact);
modify($fact) {
value = $fact.value
}
end
// value is a BigDecimal property of Fact class.
(*2) Error message
org.drools.mvel.ConstraintEvaluationException: Error evaluating constraint 'value / 7B >= 0' in [Rule "Rule 1" in /tmp/reproducer_arithmeticexception_1c/target/classes/com/example/reproducer/Sample.drl]
at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:287)
at org.drools.mvel.MVELConstraint.isAllowed(MVELConstraint.java:235)
at org.drools.core.reteoo.AlphaNode.modifyObject(AlphaNode.java:145)
at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateModifyObject(SingleObjectSinkAdapter.java:79)
at org.drools.core.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:396)
at org.drools.core.phreak.PropagationEntry$Update.execute(PropagationEntry.java:233)
at org.drools.core.phreak.PropagationEntry$Update.execute(PropagationEntry.java:225)
at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:100)
at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:90)
at org.drools.core.common.DefaultAgenda.flushPropagations(DefaultAgenda.java:1074)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:165)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:110)
at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:869)
at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:816)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:808)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1341)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1332)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1316)
at com.example.reproducer.DroolsTest.main(DroolsTest.java:22)
Caused by: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. <---------- (*2-1)
at java.base/java.math.BigDecimal.divide(BigDecimal.java:1736)
at ConditionEvaluator05169571c7d846e3b0c6e6e4439e0ef9.evaluate(Unknown Source)
at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:285)
Environment
- Red Hat Process Automation Manager (RHPAM)
- 7.13
- Red Hat Decision Manager (RHDM)
- 7.13
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.