SAMOA-48: Fix double processing of last even in FilterProcessor
diff --git a/samoa-api/src/main/java/org/apache/samoa/learners/InstanceContent.java b/samoa-api/src/main/java/org/apache/samoa/learners/InstanceContent.java
index 7a49985..c4e6b84 100644
--- a/samoa-api/src/main/java/org/apache/samoa/learners/InstanceContent.java
+++ b/samoa-api/src/main/java/org/apache/samoa/learners/InstanceContent.java
@@ -25,6 +25,7 @@
*/
import net.jcip.annotations.Immutable;
+
import org.apache.samoa.core.SerializableInstance;
import org.apache.samoa.instances.Instance;
@@ -61,7 +62,7 @@
* the is training
*/
public InstanceContent(long index, Instance instance,
- boolean isTraining, boolean isTesting) {
+ boolean isTraining, boolean isTesting) {
if (instance != null) {
this.instance = new SerializableInstance(instance);
}
@@ -192,6 +193,11 @@
this.isLast = isLast;
}
-
-
+ @Override
+ public String toString() {
+ return String
+ .format(
+ "InstanceContent [instanceIndex=%s, classifierIndex=%s, evaluationIndex=%s, instance=%s, isTraining=%s, isTesting=%s, isLast=%s]",
+ instanceIndex, classifierIndex, evaluationIndex, instance, isTraining, isTesting, isLast);
+ }
}
diff --git a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/ensemble/PredictionCombinerProcessor.java b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/ensemble/PredictionCombinerProcessor.java
index 8e10094..92a209b 100644
--- a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/ensemble/PredictionCombinerProcessor.java
+++ b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/ensemble/PredictionCombinerProcessor.java
@@ -105,7 +105,6 @@
int instanceIndex = (int) inEvent.getInstanceIndex();
addStatisticsForInstanceReceived(instanceIndex, inEvent.getClassifierIndex(), prediction, 1);
-
if (hasAllVotesArrivedInstance(instanceIndex)) {
DoubleVector combinedVote = this.mapVotesforInstanceReceived.get(instanceIndex);
if (combinedVote == null) {
diff --git a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/FilterProcessor.java b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/FilterProcessor.java
index a55b813..2c81fd0 100644
--- a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/FilterProcessor.java
+++ b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/FilterProcessor.java
@@ -78,7 +78,7 @@
this.waitingInstances++;
if (this.waitingInstances == this.batchSize || instanceContentEvent.isLastEvent()) {
// Send Instances
- InstancesContentEvent outputEvent = new InstancesContentEvent(instanceContentEvent);
+ InstancesContentEvent outputEvent = new InstancesContentEvent();
while (!this.contentEventList.isEmpty()) {
InstanceContentEvent ice = this.contentEventList.remove(0);
outputEvent.add(ice.getInstanceContent());
diff --git a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/ModelAggregatorProcessor.java b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/ModelAggregatorProcessor.java
index ce2d4c4..cad40a7 100644
--- a/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/ModelAggregatorProcessor.java
+++ b/samoa-api/src/main/java/org/apache/samoa/learners/classifiers/trees/ModelAggregatorProcessor.java
@@ -20,6 +20,8 @@
* #L%
*/
+import static org.apache.samoa.moa.core.Utils.maxIndex;
+
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@@ -39,7 +41,6 @@
import org.apache.samoa.instances.Instances;
import org.apache.samoa.instances.InstancesHeader;
import org.apache.samoa.learners.InstanceContent;
-import org.apache.samoa.learners.InstanceContentEvent;
import org.apache.samoa.learners.InstancesContentEvent;
import org.apache.samoa.learners.ResultContentEvent;
import org.apache.samoa.moa.classifiers.core.AttributeSplitSuggestion;
@@ -50,8 +51,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.samoa.moa.core.Utils.maxIndex;
-
/**
* Model Aggegator Processor consists of the decision tree model. It connects to local-statistic PI via attribute stream
* and control stream. Model-aggregator PI sends the split instances via attribute stream and it sends control messages