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]