alissontadeuoliveira opened a new issue, #6846:
URL: https://github.com/apache/incubator-kie-drools/issues/6846
### Describe the bug
We are facing an intermittent NullPointerException while executing rules in
Drools 10.2.0.
The exception occurs during `fireAllRules()` and seems to happen while
Drools is removing dormant tuples after a sequence of cascading `update()`
operations.
No explicit `delete()` or `modify()` statements are used in the DRL files.
The rules mainly update the same fact multiple times through chained rule
activations.
The exception is thrown inside Drools internals:
`java.lang.NullPointerException: Cannot invoke
"org.drools.core.util.DoubleLinkedEntry.setNext(org.drools.core.util.SingleLinkedEntry)"
because the return value of
"org.drools.core.util.DoubleLinkedEntry.getPrevious()" is null
at org.drools.core.util.LinkedList.remove(LinkedList.java:178)
at
org.drools.core.phreak.RuleExecutor.removeDormantTuple(RuleExecutor.java:314)
at
org.drools.core.phreak.PhreakRuleTerminalNode.doLeftDelete(PhreakRuleTerminalNode.java:281)
at
org.drools.core.phreak.PhreakRuleTerminalNode.doLeftDeletes(PhreakRuleTerminalNode.java:265)
at
org.drools.core.phreak.PhreakRuleTerminalNode.doNode(PhreakRuleTerminalNode.java:59)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.evaluateEndNode(RuleNetworkEvaluatorImpl.java:345)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.innerEval(RuleNetworkEvaluatorImpl.java:312)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.outerEval(RuleNetworkEvaluatorImpl.java:250)
at
org.drools.core.phreak.RuleNetworkEvaluatorImpl.evaluateNetwork(RuleNetworkEvaluatorImpl.java:142)
at
org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:225)
at
org.drools.kiesession.agenda.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:499)
at
org.drools.core.phreak.RuleExecutor.ruleWithHigherSalienceActivated(RuleExecutor.java:272)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:169)
at
org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:91)
at
org.drools.core.concurrent.AbstractGroupEvaluator.evaluateAndFire(AbstractGroupEvaluator.java:53)
at
org.drools.kiesession.agenda.DefaultAgenda.fireLoop(DefaultAgenda.java:616)
at
org.drools.kiesession.agenda.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:569)
at
org.drools.kiesession.agenda.DefaultAgenda.fireAllRules(DefaultAgenda.java:561)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1110)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1101)
at
org.drools.kiesession.session.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1089)
at
br.dominio.executorderegras.adapter.drools.runtime.Sessao.executar(Sessao.java:30)
at
br.dominio.executorderegras.adapter.drools.runtime.Sessao.executar(Sessao.java:45)
at
br.dominio.executorderegras.adapter.drools.service.impl.ExecutorDeRegrasEnriquecimentoService.lambda$executarAssunto$1(ExecutorDeRegrasEnriquecimentoService.java:122)
at reactor.core.publisher.MonoCallable.call(MonoCallable.java:69)
at
reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:228)
at
io.sentry.spring7.webflux.SentryScheduleHook.lambda$apply$0(SentryScheduleHook.java:41)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:72)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:309)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)`
**Environment**
Drools version: 10.2.0
JVM: Java 24
Execution model: Stateful KieSession
Session source: KieSessionsPool
Rules use `update()`
No use of `delete()`
No use of `modify()`
No use of `insertLogical()`
### Expected behavior
Drools should safely cancel and recreate activations when facts are updated,
without producing an inconsistent internal state.
### Actual behavior
_No response_
### How to Reproduce?
_No response_
### Output of `uname -a` or `ver`
_No response_
### Output of `java -version`
_No response_
### GraalVM version (if different from Java)
_No response_
### Kogito version or git rev (or at least Quarkus version if you are using
Kogito via Quarkus platform BOM)
_No response_
### Build tool (ie. output of `mvnw --version` or `gradlew --version`)
_No response_
### Additional information
_No response_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]