This is an automated email from the ASF dual-hosted git repository.

mariofusco 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 b0153814cc [DROOLS-7582] fix fact handles iteration from 
ObjectTypeNode attached to a named entry-point (#5578)
b0153814cc is described below

commit b0153814cc5a50f857da4619fa0ba8ed16fe9a6c
Author: Mario Fusco <[email protected]>
AuthorDate: Wed Nov 8 08:46:06 2023 +0100

    [DROOLS-7582] fix fact handles iteration from ObjectTypeNode attached to a 
named entry-point (#5578)
---
 .../drools/core/common/InternalWorkingMemory.java  |  4 --
 .../java/org/drools/core/common/ReteEvaluator.java |  4 --
 .../org/drools/core/reteoo/ObjectTypeNode.java     |  4 +-
 .../IncrementalCompilationCepTest.java             | 73 +++++++++++++++++++++-
 4 files changed, 73 insertions(+), 12 deletions(-)

diff --git 
a/drools-core/src/main/java/org/drools/core/common/InternalWorkingMemory.java 
b/drools-core/src/main/java/org/drools/core/common/InternalWorkingMemory.java
index cf4594691b..f6e01ce45c 100644
--- 
a/drools-core/src/main/java/org/drools/core/common/InternalWorkingMemory.java
+++ 
b/drools-core/src/main/java/org/drools/core/common/InternalWorkingMemory.java
@@ -49,10 +49,6 @@ public interface InternalWorkingMemory
     
     NodeMemories getNodeMemories();
 
-    default FactHandleClassStore getStoreForClass(Class<?> clazz) {
-        return getObjectStore().getStoreForClass(clazz);
-    }
-
     Lock getLock();
 
     InternalFactHandle getInitialFactHandle();
diff --git 
a/drools-core/src/main/java/org/drools/core/common/ReteEvaluator.java 
b/drools-core/src/main/java/org/drools/core/common/ReteEvaluator.java
index 49503f6303..fc0a6e3df2 100644
--- a/drools-core/src/main/java/org/drools/core/common/ReteEvaluator.java
+++ b/drools-core/src/main/java/org/drools/core/common/ReteEvaluator.java
@@ -100,10 +100,6 @@ public interface ReteEvaluator extends ValueResolver {
         return true;
     }
 
-    default FactHandleClassStore getStoreForClass(Class<?> clazz) {
-        return getDefaultEntryPoint().getObjectStore().getStoreForClass(clazz);
-    }
-
     SessionConfiguration getSessionConfiguration();
 
     RuleSessionConfiguration getRuleSessionConfiguration();
diff --git 
a/drools-core/src/main/java/org/drools/core/reteoo/ObjectTypeNode.java 
b/drools-core/src/main/java/org/drools/core/reteoo/ObjectTypeNode.java
index c86acfd8c5..6a455177f7 100644
--- a/drools-core/src/main/java/org/drools/core/reteoo/ObjectTypeNode.java
+++ b/drools-core/src/main/java/org/drools/core/reteoo/ObjectTypeNode.java
@@ -355,7 +355,7 @@ public class ObjectTypeNode extends ObjectSource implements 
ObjectSink {
         if (InitialFact.class.isAssignableFrom(classType)) {
             sink.assertObject(workingMemory.getInitialFactHandle(), context, 
workingMemory);
         } else {
-            Iterator<InternalFactHandle> it = 
workingMemory.getStoreForClass(classType).iterator();
+            Iterator<InternalFactHandle> it = 
getFactHandlesIterator(workingMemory);
             while (it.hasNext()) {
                 sink.assertObject(it.next(), context, workingMemory);
             }
@@ -366,7 +366,7 @@ public class ObjectTypeNode extends ObjectSource implements 
ObjectSink {
         Class<?> classType = ((ClassObjectType) 
getObjectType()).getClassType();
         return InitialFact.class.isAssignableFrom(classType) ?
                 
Collections.singleton(workingMemory.getInitialFactHandle()).iterator() :
-                workingMemory.getStoreForClass(classType).iterator();
+                
workingMemory.getEntryPoint(((EntryPointNode)source).getEntryPoint().getEntryPointId()).getObjectStore().getStoreForClass(classType).iterator();
     }
 
     /**
diff --git 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/incrementalcompilation/IncrementalCompilationCepTest.java
 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/incrementalcompilation/IncrementalCompilationCepTest.java
index 65f2fdc419..cfe32dd596 100644
--- 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/incrementalcompilation/IncrementalCompilationCepTest.java
+++ 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/incrementalcompilation/IncrementalCompilationCepTest.java
@@ -32,10 +32,10 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.drools.base.base.ClassObjectType;
-import org.drools.kiesession.entrypoints.NamedEntryPoint;
-import org.drools.core.reteoo.ObjectTypeNode;
 import org.drools.base.base.ObjectType;
+import org.drools.core.reteoo.ObjectTypeNode;
 import org.drools.core.time.impl.PseudoClockScheduler;
+import org.drools.kiesession.entrypoints.NamedEntryPoint;
 import org.drools.testcoverage.common.model.ChildEventA;
 import org.drools.testcoverage.common.model.ChildEventB;
 import org.drools.testcoverage.common.model.Message;
@@ -52,6 +52,8 @@ import org.junit.runners.Parameterized;
 import org.kie.api.KieServices;
 import org.kie.api.builder.ReleaseId;
 import org.kie.api.builder.Results;
+import org.kie.api.definition.type.Expires;
+import org.kie.api.definition.type.Key;
 import org.kie.api.definition.type.Role;
 import org.kie.api.marshalling.KieMarshallers;
 import org.kie.api.marshalling.Marshaller;
@@ -61,6 +63,7 @@ import org.kie.api.runtime.KieSessionConfiguration;
 import org.kie.api.runtime.conf.ClockTypeOption;
 import org.kie.api.runtime.conf.TimedRuleExecutionOption;
 import org.kie.api.runtime.conf.TimerJobFactoryOption;
+import org.kie.api.runtime.rule.EntryPoint;
 import org.kie.api.runtime.rule.FactHandle;
 import org.kie.api.time.SessionPseudoClock;
 import org.kie.internal.builder.conf.PropertySpecificOption;
@@ -1106,4 +1109,70 @@ public class IncrementalCompilationCepTest {
 
         kieSession2.dispose();
     }
+
+    @Test
+    public void testIncrementalCompilationWithExpiringEvent() {
+        incrementalCompilationWithExpiringEventFromEntryPoint(false);
+    }
+
+    @Test
+    public void testIncrementalCompilationWithExpiringEventFromEntryPoint() {
+        incrementalCompilationWithExpiringEventFromEntryPoint(true);
+    }
+
+    private void incrementalCompilationWithExpiringEventFromEntryPoint(boolean 
useEntryPoint) {
+        // DROOLS-7582
+        final String drl1 =
+                "import " + ExpiringEvent.class.getCanonicalName() + "\n" +
+                "rule \"Old Rule\" when\n" +
+                "    $e : ExpiringEvent($id : id)\n" + (useEntryPoint ? " from 
entry-point \"events\"" : "\n") +
+                "then\n" +
+                "    System.out.println(\"received event in old rule: \" + 
$id);\n" +
+                "end";
+
+        final String drl2 =
+                "import " + ExpiringEvent.class.getCanonicalName() + "\n" +
+                "rule \"New Rule\" when\n" +
+                "    $e : ExpiringEvent($id : id)\n" + (useEntryPoint ? " from 
entry-point \"events\"" : "\n") +
+                "then\n" +
+                "    System.out.println(\"received event in new rule: \" + 
$id);\n" +
+                "end";
+
+        final KieServices ks = KieServices.Factory.get();
+        final ReleaseId releaseId1 = ks.newReleaseId("org.kie", 
"test-upgrade", "1.0.0");
+        KieUtil.getKieModuleFromDrls(releaseId1, kieBaseTestConfiguration, 
KieSessionTestConfiguration.STATEFUL_PSEUDO,
+                                     new HashMap<>(), drl1);
+        final ReleaseId releaseId2 = ks.newReleaseId("org.kie", 
"test-upgrade", "1.1.0");
+        KieUtil.getKieModuleFromDrls(releaseId2, kieBaseTestConfiguration, 
KieSessionTestConfiguration.STATEFUL_PSEUDO,
+                                     new HashMap<>(), drl2);
+
+        final KieContainer kc = ks.newKieContainer(releaseId1);
+        final KieSession ksession = kc.newKieSession();
+        EntryPoint entryPoint = useEntryPoint ? 
ksession.getEntryPoint("events") : ksession;
+
+        final PseudoClockScheduler clock = ksession.getSessionClock();
+
+        entryPoint.insert(new ExpiringEvent(1));
+        clock.advanceTime(3, TimeUnit.SECONDS);
+        assertThat( ksession.fireAllRules() ).isEqualTo(1);
+
+        kc.updateToVersion(releaseId2);
+
+        clock.advanceTime(3, TimeUnit.SECONDS);
+        assertThat( ksession.fireAllRules() ).isEqualTo(1);
+    }
+
+    @Role(Role.Type.EVENT)
+    @Expires("5s")
+    public static class ExpiringEvent {
+        @Key
+        private int id;
+        public ExpiringEvent(int id) {
+            this.id = id;
+        }
+
+        public int getId() {
+            return id;
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to