| Summary: | NullPointerExceptions when using multiple concurrent KieSessions | ||
|---|---|---|---|
| Product: | [Retired] JBoss BRMS Platform 6 | Reporter: | Mario Fusco <mfusco> |
| Component: | BRE | Assignee: | Mario Fusco <mfusco> |
| Status: | CLOSED EOL | QA Contact: | Marek Winkler <mwinkler> |
| Severity: | urgent | Docs Contact: | |
| Priority: | urgent | ||
| Version: | 6.3.0 | CC: | etirelli, lpetrovi |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2020-03-27 19:13:05 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
Fixed on master by https://github.com/droolsjbpm/drools/compare/89cc437...c94053d |
A number of worker threads is running simultaneously in a thread pool. Each thread is initialised with the same KieContainer from which they extract a KieBase using KieContainer.getKieBase("name"). Each worker thread obtains a KieSession from its KieBase, and then executes a simple loop, taking instructions from a queue, inserting and removing facts based on those instructions, and then firing all rules: kieSession = kieBase.newKieSession(); try { while (true) { work = getItemsFromQueue(); addAndRemoveFacts(kieSession, work); kieSession.fireAllRules(); } } finally { kieSession.dispose(); } This causes the following exceptions: Exception in thread "Worker-1" java.lang.NullPointerException at org.drools.core.reteoo.NodeTypeEnums.isLeftTupleSource(NodeTypeEnums.java:84) at org.drools.core.phreak.SegmentUtilities.updateRiaAndTerminalMemory(SegmentUtilities.java:380) at org.drools.core.phreak.SegmentUtilities.createSegmentMemory(SegmentUtilities.java:171) at org.drools.core.phreak.SegmentUtilities.getQuerySegmentMemory(SegmentUtilities.java:205) at org.drools.core.phreak.SegmentUtilities.processQueryNode(SegmentUtilities.java:192) at org.drools.core.phreak.SegmentUtilities.createSegmentMemory(SegmentUtilities.java:115) at org.drools.core.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:166) at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:63) at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:300) at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73) at org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017) at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288) at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278) at com.X.processRequests(X.java:86) at com.X$$Lambda$104/975722152.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Exception in thread "Worker-6" java.lang.NullPointerException at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:410) at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:416) at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:416) at org.drools.core.reteoo.ObjectTypeNode.checkDirty(ObjectTypeNode.java:274) at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:294) at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73) at org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017) at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288) at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278) at com.X.processRequests(X.java:86) at com.X$$Lambda$162/1410998625.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Exception in thread "Worker-7" java.lang.NullPointerException at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:410) at org.drools.core.reteoo.ObjectTypeNode.checkDirty(ObjectTypeNode.java:274) at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:294) at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78) at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73) at org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017) at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288) at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278) at com.X.processRequests(X.java:86) at com.X$$Lambda$99/1591140286.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)