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]

Reply via email to