This is an automated email from the ASF dual-hosted git repository.
yamer 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 7f71103535 Fix for optaplanner test failures (#6527)
7f71103535 is described below
commit 7f7110353537c05e6b91d4164979ec42be3c0109
Author: Paolo Bizzarri <[email protected]>
AuthorDate: Sat Nov 22 11:05:00 2025 +0100
Fix for optaplanner test failures (#6527)
---
.../org/drools/core/phreak/PhreakExistsNode.java | 4 ++--
.../drools/core/phreak/PhreakNodeOperations.java | 28 ++++++++++++++++++++++
.../java/org/drools/core/phreak/PhreakNotNode.java | 4 ++--
3 files changed, 32 insertions(+), 4 deletions(-)
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakExistsNode.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakExistsNode.java
index 4057e27366..31f93d31f8 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PhreakExistsNode.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PhreakExistsNode.java
@@ -33,8 +33,8 @@ import org.drools.core.reteoo.TupleMemory;
import org.drools.core.util.FastIterator;
import static org.drools.core.phreak.PhreakJoinNode.updateChildLeftTuple;
+import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesExistentialReorderLeftMemory;
import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesExistentialReorderRightMemory;
-import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesReorderLeftMemory;
import static org.drools.core.phreak.PhreakNodeOperations.findLeftTupleBlocker;
import static
org.drools.core.phreak.PhreakNodeOperations.unlinkAndDeleteChildLeftTuple;
import static org.drools.core.phreak.PhreakNodeOperations.useLeftMemory;
@@ -75,7 +75,7 @@ public class PhreakExistsNode {
}
if (srcLeftTuples.getUpdateFirst() != null ) {
- doUpdatesReorderLeftMemory(bm, srcLeftTuples);
+ doUpdatesExistentialReorderLeftMemory(bm, srcLeftTuples);
}
if ( srcRightTuples.getUpdateFirst() != null ) {
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakNodeOperations.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakNodeOperations.java
index cc059077f2..8634768df2 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PhreakNodeOperations.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PhreakNodeOperations.java
@@ -230,6 +230,34 @@ public class PhreakNodeOperations {
}
}
+ public static void doUpdatesExistentialReorderLeftMemory(BetaMemory bm,
+ TupleSets
srcLeftTuples) {
+ TupleMemory ltm = bm.getLeftTupleMemory();
+
+ // sides must first be re-ordered, to ensure iteration integrity
+ for (TupleImpl leftTuple = srcLeftTuples.getUpdateFirst(); leftTuple
!= null; leftTuple = leftTuple.getStagedNext()) {
+ if (leftTuple.getMemory() != null) {
+ ltm.remove(leftTuple);
+ }
+ }
+
+ for (TupleImpl leftTuple = srcLeftTuples.getUpdateFirst(); leftTuple
!= null; leftTuple = leftTuple.getStagedNext()) {
+ RightTuple blocker = leftTuple.getBlocker();
+ if (blocker == null) {
+ ltm.add(leftTuple);
+ for (TupleImpl childLeftTuple = leftTuple.getFirstChild();
childLeftTuple != null;) {
+ TupleImpl childNext = childLeftTuple.getHandleNext();
+ childLeftTuple.reAddRight();
+ childLeftTuple = childNext;
+ }
+ } else if (blocker.getStagedType() != LeftTuple.NONE) {
+ // it's blocker is also being updated, so remove to force it
to start from the beginning
+ blocker.removeBlocked((LeftTuple) leftTuple);
+ }
+ }
+ }
+
+
public static void doUpdatesExistentialReorderRightMemory(BetaMemory bm,
BetaNode
betaNode,
TupleSets
srcRightTuples) {
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakNotNode.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakNotNode.java
index 730de5a669..9851cd2797 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PhreakNotNode.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PhreakNotNode.java
@@ -34,8 +34,8 @@ import org.drools.core.reteoo.TupleMemory;
import org.drools.core.util.FastIterator;
import static org.drools.core.phreak.PhreakJoinNode.updateChildLeftTuple;
+import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesExistentialReorderLeftMemory;
import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesExistentialReorderRightMemory;
-import static
org.drools.core.phreak.PhreakNodeOperations.doUpdatesReorderLeftMemory;
import static org.drools.core.phreak.PhreakNodeOperations.findLeftTupleBlocker;
import static
org.drools.core.phreak.PhreakNodeOperations.unlinkAndDeleteChildLeftTuple;
import static org.drools.core.phreak.PhreakNodeOperations.useLeftMemory;
@@ -80,7 +80,7 @@ public class PhreakNotNode {
if (srcLeftTuples.getUpdateFirst() != null) {
// must happen before right inserts, so it can find left tuples to
block.
- doUpdatesReorderLeftMemory(bm, srcLeftTuples);
+ doUpdatesExistentialReorderLeftMemory(bm, srcLeftTuples);
}
if ( srcRightTuples.getUpdateFirst() != null) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]