diff --git a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java index eeaedb9012a1..2aaab9a66a7b 100644 --- a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java +++ b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java @@ -61,6 +61,7 @@ import org.drools.core.reteoo.PathEndNode.PathMemSpec; import org.drools.core.reteoo.PathMemory; import org.drools.core.reteoo.QueryElementNode; +import org.drools.core.reteoo.RightInputAdapterNode; import org.drools.core.reteoo.TupleToObjectNode; import org.drools.core.reteoo.RightTuple; import org.drools.core.reteoo.RuntimeComponentFactory; @@ -1225,10 +1226,11 @@ private static void insertPeerRightTuple(TupleImpl lt, InternalWorkingMemory wm, prevLt = lt; lt = lt.getPeer(); } else if (insert) { - BetaMemory bm = (BetaMemory) wm.getNodeMemories().peekNodeMemory(sink); + BetaNode betaNode = ((RightInputAdapterNode)sink).getBetaNode(); + BetaMemory bm = (BetaMemory) wm.getNodeMemories().peekNodeMemory(betaNode); if (bm != null) { prevLt = TupleFactory.createPeer(tton, prevLt); - bm.linkNode((BetaNode) sink, wm); + bm.linkNode(betaNode, wm); bm.getStagedRightTuples().addInsert(prevLt); } } diff --git a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java index eb330e9b994c..516ef2283a28 100644 --- a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java +++ b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java @@ -429,7 +429,7 @@ public TupleSets evalNode(PathMemory pmem, NetworkNode node, long bit, Memory no break; } case NodeTypeEnums.SequenceNode: { - pSequenceNode.doNode((SequenceNode) node, (SequenceNodeMemory) nodeMem, pmem, smem, sink, activationsManager, srcTuples, trgTuples, stagedLeftTuples); + pSequenceNode.doNode((SequenceNode) node, (SequenceNodeMemory) nodeMem, sink, activationsManager.getReteEvaluator(), srcTuples, trgTuples, stagedLeftTuples); break; } case NodeTypeEnums.ConditionalBranchNode: { diff --git a/drools-core/src/main/java/org/drools/core/reteoo/SequenceNode.java b/drools-core/src/main/java/org/drools/core/reteoo/SequenceNode.java index 4b50f00ca64b..f18722143d08 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/SequenceNode.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/SequenceNode.java @@ -20,7 +20,6 @@ import org.drools.base.common.RuleBasePartitionId; import org.drools.base.reteoo.NodeTypeEnums; import org.drools.core.RuleBaseConfiguration; -import org.drools.core.common.ActivationsManager; import org.drools.core.common.InternalFactHandle; import org.drools.core.common.InternalWorkingMemory; import org.drools.core.common.Memory; @@ -464,9 +463,9 @@ public void doNode(SequenceNode node, private void doLeftUpdates(SequenceNode node, TupleSets srcLeftTuples, TupleSets trgLeftTuples, TupleSets stagedLeftTuples, ReteEvaluator reteEvaluator) {} - public void doNode(SequenceNode node, SequenceNodeMemory nodeMem, PathMemory pmem, SegmentMemory smem, LeftTupleSinkNode sink, ActivationsManager activationsManager, TupleSets srcTuples, TupleSets trgTuples, TupleSets stagedLeftTuples) { - - } +// public void doNode(SequenceNode node, SequenceNodeMemory nodeMem, PathMemory pmem, SegmentMemory smem, LeftTupleSinkNode sink, ActivationsManager activationsManager, TupleSets srcTuples, TupleSets trgTuples, TupleSets stagedLeftTuples) { +// +// } private void doLeftDeletes(SequenceNode node, TupleSets srcLeftTuples, TupleSets trgLeftTuples, TupleSets stagedLeftTuples, diff --git a/drools-metric/src/main/java/org/drools/metric/phreak/MetricPhreakNetworkNodeFactoryImpl.java b/drools-metric/src/main/java/org/drools/metric/phreak/MetricPhreakNetworkNodeFactoryImpl.java index 5d3732bff1a7..1ff743ee81eb 100644 --- a/drools-metric/src/main/java/org/drools/metric/phreak/MetricPhreakNetworkNodeFactoryImpl.java +++ b/drools-metric/src/main/java/org/drools/metric/phreak/MetricPhreakNetworkNodeFactoryImpl.java @@ -140,8 +140,7 @@ public PhreakTimerNode createPhreakTimerNode() { public PhreakSequenceNode createPhreakSequenceNode() { if (MetricLogUtils.getInstance().isEnabled()) { - //return new PhreakSequenceNodeMetric(); - throw new UnsupportedOperationException(); + return new PhreakSequenceNodeMetric(); } else { return new PhreakSequenceNode(); } diff --git a/drools-metric/src/main/java/org/drools/metric/phreak/PhreakSequenceNodeMetric.java b/drools-metric/src/main/java/org/drools/metric/phreak/PhreakSequenceNodeMetric.java new file mode 100644 index 000000000000..c0af0271e042 --- /dev/null +++ b/drools-metric/src/main/java/org/drools/metric/phreak/PhreakSequenceNodeMetric.java @@ -0,0 +1,34 @@ +package org.drools.metric.phreak; + +import org.drools.core.common.ReteEvaluator; +import org.drools.core.common.TupleSets; +import org.drools.core.reteoo.AsyncSendNode; +import org.drools.core.reteoo.AsyncSendNode.AsyncSendMemory; +import org.drools.core.reteoo.LeftTupleSink; +import org.drools.core.reteoo.SequenceNode; +import org.drools.core.reteoo.SequenceNode.PhreakSequenceNode; +import org.drools.core.reteoo.SequenceNode.SequenceNodeMemory; +import org.drools.metric.util.MetricLogUtils; + +public class PhreakSequenceNodeMetric extends PhreakSequenceNode { + @Override + public void doNode(SequenceNode node, + SequenceNodeMemory memory, + LeftTupleSink sink, + ReteEvaluator reteEvaluator, + TupleSets srcLeftTuples, + TupleSets trgLeftTuples, + TupleSets stagedLeftTuples) { + + try { + MetricLogUtils.getInstance().startMetrics(node); + + super.doNode(node, memory, + sink, reteEvaluator, + srcLeftTuples, trgLeftTuples, stagedLeftTuples); + + } finally { + MetricLogUtils.getInstance().logAndEndMetrics(); + } + } +}