This is an automated email from the ASF dual-hosted git repository.
pibizza pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 42695821f5 Making ConcurrentNodeMemories use ReteEvaluator internally
(#6490)
42695821f5 is described below
commit 42695821f5781ff1e6a5d0207e75c93456d79f8d
Author: Paolo Bizzarri <[email protected]>
AuthorDate: Fri Oct 17 09:49:04 2025 +0200
Making ConcurrentNodeMemories use ReteEvaluator internally (#6490)
---
.../drools/core/common/ConcurrentNodeMemories.java | 22 +++++++++++-----------
.../java/org/drools/core/common/NodeMemories.java | 5 ++---
.../core/phreak/RuntimeSegmentUtilities.java | 5 ++---
.../session/StatefulKnowledgeSessionImpl.java | 6 +++---
.../impl/sessions/RuleUnitExecutorImpl.java | 4 ++--
.../integrationtests/operators/NotTest.java | 2 +-
.../mvel/integrationtests/phreak/AddRuleTest.java | 8 ++++----
7 files changed, 25 insertions(+), 27 deletions(-)
diff --git
a/drools-core/src/main/java/org/drools/core/common/ConcurrentNodeMemories.java
b/drools-core/src/main/java/org/drools/core/common/ConcurrentNodeMemories.java
index fcd4de631e..54441183d6 100644
---
a/drools-core/src/main/java/org/drools/core/common/ConcurrentNodeMemories.java
+++
b/drools-core/src/main/java/org/drools/core/common/ConcurrentNodeMemories.java
@@ -26,7 +26,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.drools.core.impl.InternalRuleBase;
import org.drools.core.reteoo.SegmentMemory;
-import org.kie.internal.runtime.StatefulKnowledgeSession;
/**
* A concurrent implementation for the node memories interface
@@ -37,9 +36,11 @@ public class ConcurrentNodeMemories implements NodeMemories {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final InternalRuleBase ruleBase;
+ private final ReteEvaluator reteEvaluator;
- public ConcurrentNodeMemories( InternalRuleBase ruleBase) {
+ public ConcurrentNodeMemories( InternalRuleBase ruleBase, ReteEvaluator
reteEvaluator) {
this.ruleBase = ruleBase;
+ this.reteEvaluator = reteEvaluator;
this.memories = new AtomicReferenceArray<>(
this.ruleBase.getMemoryCount() );
}
@@ -53,8 +54,7 @@ public class ConcurrentNodeMemories implements NodeMemories {
this.memories = new AtomicReferenceArray<>(
this.ruleBase.getMemoryCount() );
}
- public void resetAllMemories(StatefulKnowledgeSession session) {
- InternalRuleBase kBase = (InternalRuleBase) session.getKieBase();
+ public void resetAllMemories() {
Set<SegmentMemory> smemSet = new HashSet<>();
for (int i = 0; i < memories.length(); i++) {
@@ -65,14 +65,14 @@ public class ConcurrentNodeMemories implements NodeMemories
{
}
}
- smemSet.forEach(smem -> resetSegmentMemory(session, kBase, smem));
+ smemSet.forEach(smem -> resetSegmentMemory(smem));
}
- private void resetSegmentMemory(StatefulKnowledgeSession session,
InternalRuleBase kBase, SegmentMemory smem) {
+ private void resetSegmentMemory(SegmentMemory smem) {
if (smem != null) {
- smem.reset(kBase.getSegmentPrototype(smem));
+ smem.reset(ruleBase.getSegmentPrototype(smem));
if (smem.isSegmentLinked()) {
- smem.notifyRuleLinkSegment((InternalWorkingMemory) session);
+ smem.notifyRuleLinkSegment(reteEvaluator);
}
}
}
@@ -83,13 +83,13 @@ public class ConcurrentNodeMemories implements NodeMemories
{
* fails the checks, it will move into the critical sessions and re-check
everything
* before effectively doing any change on data structures.
*/
- public Memory getNodeMemory(MemoryFactory node, ReteEvaluator
reteEvaluator) {
+ public Memory getNodeMemory(MemoryFactory node) {
if( node.getMemoryId() >= this.memories.length() ) {
resize( node.getMemoryId() );
}
Memory memory = this.memories.get( node.getMemoryId() );
- return memory != null ? memory : createNodeMemory( node, reteEvaluator
);
+ return memory != null ? memory : createNodeMemory( node );
}
@@ -97,7 +97,7 @@ public class ConcurrentNodeMemories implements NodeMemories {
* Checks if a memory does not exists for the given node and
* creates it.
*/
- private Memory createNodeMemory( MemoryFactory node, ReteEvaluator
reteEvaluator ) {
+ private Memory createNodeMemory( MemoryFactory node ) {
try {
this.lock.readLock().lock();
// need to try again in a synchronized code block to make sure
diff --git a/drools-core/src/main/java/org/drools/core/common/NodeMemories.java
b/drools-core/src/main/java/org/drools/core/common/NodeMemories.java
index eca039a462..ae64b3b0d3 100644
--- a/drools-core/src/main/java/org/drools/core/common/NodeMemories.java
+++ b/drools-core/src/main/java/org/drools/core/common/NodeMemories.java
@@ -21,14 +21,13 @@ package org.drools.core.common;
import org.drools.base.common.NetworkNode;
import org.drools.base.reteoo.NodeTypeEnums;
-import org.kie.internal.runtime.StatefulKnowledgeSession;
/**
* An interface for node memories implementation
*/
public interface NodeMemories {
- <T extends Memory> T getNodeMemory(MemoryFactory<T> node, ReteEvaluator
reteEvaluator);
+ <T extends Memory> T getNodeMemory(MemoryFactory<T> node);
void clearNodeMemory( MemoryFactory node );
@@ -56,5 +55,5 @@ public interface NodeMemories {
*/
int length();
- void resetAllMemories(StatefulKnowledgeSession session);
+ void resetAllMemories();
}
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
b/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
index 87a27be10a..c94a77fc4f 100644
---
a/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
+++
b/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
@@ -176,8 +176,7 @@ public class RuntimeSegmentUtilities {
if (pmem != null) {
RuntimeSegmentUtilities.addSegmentToPathMemory(pmem, smem);
} else {
- pmem =
reteEvaluator.getNodeMemories().getNodeMemory((MemoryFactory<? extends
PathMemory>) endNode,
- reteEvaluator);
+ pmem =
reteEvaluator.getNodeMemories().getNodeMemory((MemoryFactory<? extends
PathMemory>) endNode);
RuntimeSegmentUtilities.addSegmentToPathMemory(pmem, smem); //
this needs to be set before init, to avoid recursion during eager segment
initialisation
pmem.setSegmentMemory(smem.getPos(), smem);
initializePathMemory(reteEvaluator, endNode, pmem);
@@ -199,7 +198,7 @@ public class RuntimeSegmentUtilities {
}
public static PathMemory initializePathMemory(ReteEvaluator reteEvaluator,
PathEndNode pathEndNode) {
- PathMemory pmem =
reteEvaluator.getNodeMemories().getNodeMemory(pathEndNode, reteEvaluator);
+ PathMemory pmem =
reteEvaluator.getNodeMemories().getNodeMemory(pathEndNode);
initializePathMemory(reteEvaluator, pathEndNode, pmem);
return pmem;
}
diff --git
a/drools-kiesession/src/main/java/org/drools/kiesession/session/StatefulKnowledgeSessionImpl.java
b/drools-kiesession/src/main/java/org/drools/kiesession/session/StatefulKnowledgeSessionImpl.java
index 264837b2d2..e8db17285c 100644
---
a/drools-kiesession/src/main/java/org/drools/kiesession/session/StatefulKnowledgeSessionImpl.java
+++
b/drools-kiesession/src/main/java/org/drools/kiesession/session/StatefulKnowledgeSessionImpl.java
@@ -335,7 +335,7 @@ public class StatefulKnowledgeSessionImpl extends
AbstractRuntime
this.lastIdleTimestamp = new AtomicLong(-1);
- this.nodeMemories = new ConcurrentNodeMemories(kBase);
+ this.nodeMemories = new ConcurrentNodeMemories(kBase, this);
registerReceiveNodes(kBase.getReceiveNodes());
RuleBaseConfiguration conf = kBase.getRuleBaseConfiguration();
@@ -836,7 +836,7 @@ public class StatefulKnowledgeSessionImpl extends
AbstractRuntime
public void reset() {
if (nodeMemories != null) {
- nodeMemories.resetAllMemories( this );
+ nodeMemories.resetAllMemories();
}
this.agenda.reset();
@@ -1340,7 +1340,7 @@ public class StatefulKnowledgeSessionImpl extends
AbstractRuntime
* @return The node's memory.
*/
public <T extends Memory> T getNodeMemory(MemoryFactory<T> node) {
- return nodeMemories.getNodeMemory( node, this );
+ return nodeMemories.getNodeMemory( node );
}
public void clearNodeMemory(final MemoryFactory node) {
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/main/java/org/drools/ruleunits/impl/sessions/RuleUnitExecutorImpl.java
b/drools-ruleunits/drools-ruleunits-impl/src/main/java/org/drools/ruleunits/impl/sessions/RuleUnitExecutorImpl.java
index 628779e5c4..ca15e339e2 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/main/java/org/drools/ruleunits/impl/sessions/RuleUnitExecutorImpl.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/main/java/org/drools/ruleunits/impl/sessions/RuleUnitExecutorImpl.java
@@ -127,7 +127,7 @@ public class RuleUnitExecutorImpl implements ReteEvaluator {
this.sessionConfiguration = sessionConfiguration;
this.handleFactory = knowledgeBase.newFactHandleFactory();
- this.nodeMemories = new ConcurrentNodeMemories(ruleBase);
+ this.nodeMemories = new ConcurrentNodeMemories(ruleBase, this);
this.activationsManager = new ActivationsManagerImpl(ruleBase, this,
handleFactory);
this.entryPointsManager =
RuntimeComponentFactory.get().getEntryPointFactory().createEntryPointsManager(ruleBase,
this, handleFactory);
@@ -181,7 +181,7 @@ public class RuleUnitExecutorImpl implements ReteEvaluator {
@Override
public <T extends Memory> T getNodeMemory(MemoryFactory<T> node) {
- return nodeMemories.getNodeMemory( node, this );
+ return nodeMemories.getNodeMemory( node );
}
@Override
diff --git
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/operators/NotTest.java
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/operators/NotTest.java
index 9c9a2d0de5..54d26fe14e 100644
---
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/operators/NotTest.java
+++
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/operators/NotTest.java
@@ -206,7 +206,7 @@ public class NotTest {
StatefulKnowledgeSessionImpl ksessionImpl =
(StatefulKnowledgeSessionImpl) ksession;
NodeMemories nodeMemories =
ksessionImpl.getNodeMemories();
- BetaMemory betaMemory = (BetaMemory)
nodeMemories.getNodeMemory(notNode, ksessionImpl);
+ BetaMemory betaMemory = (BetaMemory)
nodeMemories.getNodeMemory(notNode);
TupleMemory rightTupleMemory =
betaMemory.getRightTupleMemory();
FastIterator<TupleImpl> it = rightTupleMemory.fullFastIterator();
diff --git
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/AddRuleTest.java
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/AddRuleTest.java
index 9fedb5bfe7..bdb1411fac 100644
---
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/AddRuleTest.java
+++
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/AddRuleTest.java
@@ -153,7 +153,7 @@ public class AddRuleTest {
insertAndFlush(wm);
- SegmentMemory smemLian = wm.getNodeMemories().getNodeMemory(lian,
wm).getSegmentMemory();
+ SegmentMemory smemLian =
wm.getNodeMemories().getNodeMemory(lian).getSegmentMemory();
SegmentPrototype smemProto0 = kbase1.getSegmentPrototype(lian);
assertThat(smemLian.getSegmentPrototype()).isSameAs(smemProto0);
@@ -192,7 +192,7 @@ public class AddRuleTest {
insertAndFlush(wm);
- SegmentMemory smem = wm.getNodeMemories().getNodeMemory(lian,
wm).getSegmentMemory();
+ SegmentMemory smem =
wm.getNodeMemories().getNodeMemory(lian).getSegmentMemory();
SegmentPrototype smemProto0 = kbase1.getSegmentPrototype(lian);
assertThat(smem.getSegmentPrototype()).isSameAs(smemProto0);
PathEndNode endNode0 = smemProto0.getPathEndNodes()[0];
@@ -253,7 +253,7 @@ public class AddRuleTest {
insertAndFlush(wm);
wm.fireAllRules();
- SegmentMemory smem = wm.getNodeMemories().getNodeMemory(lian,
wm).getSegmentMemory();
+ SegmentMemory smem =
wm.getNodeMemories().getNodeMemory(lian).getSegmentMemory();
SegmentPrototype smemProto0 = kbase1.getSegmentPrototype(lian);
assertThat(smem.getSegmentPrototype()).isSameAs(smemProto0);
PathEndNode endNode0 = smemProto0.getPathEndNodes()[0];
@@ -319,7 +319,7 @@ public class AddRuleTest {
insertAndFlush(wm);
- SegmentMemory smem = wm.getNodeMemories().getNodeMemory(lian,
wm).getSegmentMemory();
+ SegmentMemory smem =
wm.getNodeMemories().getNodeMemory(lian).getSegmentMemory();
SegmentPrototype smemProto0 = kbase1.getSegmentPrototype(lian);
PathEndNode endNode1 = smemProto0.getPathEndNodes()[1];
assertSegmentsLengthAndPos(endNode1, 2, wm);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]