You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mrunit.apache.org by es...@apache.org on 2011/05/27 02:20:26 UTC
svn commit: r1128128 -
/incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java
Author: esammer
Date: Fri May 27 00:20:26 2011
New Revision: 1128128
URL: http://svn.apache.org/viewvc?rev=1128128&view=rev
Log:
MRUNIT-9: Fix failing testDoubleIteration test
Modified:
incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java
Modified: incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java
URL: http://svn.apache.org/viewvc/incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java?rev=1128128&r1=1128127&r2=1128128&view=diff
==============================================================================
--- incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java (original)
+++ incubator/mrunit/trunk/src/main/java/org/apache/hadoop/mrunit/mapreduce/mock/MockReduceContextWrapper.java Fri May 27 00:20:26 2011
@@ -83,13 +83,26 @@ public class MockReduceContextWrapper<KE
private class InspectableIterable implements Iterable<VALUEIN> {
private Iterable<VALUEIN> base;
private VALUEIN lastVal;
+ private boolean used;
public InspectableIterable(final Iterable<VALUEIN> baseCollection) {
this.base = baseCollection;
+ this.used = false;
}
public Iterator<VALUEIN> iterator() {
- return new InspectableIterator(this.base.iterator());
+ /*
+ * The iterator() method is called by the runtime to get an iterator
+ * over an Iteratable. If we always returned a new InspectableIterator,
+ * successive for each loops would pass over the data multiple times
+ * which is not Hadoop's normal behavior.
+ */
+ if (used) {
+ return new NullIterator();
+ } else {
+ used = true;
+ return new InspectableIterator(this.base.iterator());
+ }
}
public VALUEIN getLastVal() {
@@ -119,6 +132,27 @@ public class MockReduceContextWrapper<KE
}
}
+ /*
+ * An iterator implementation that never returns data. This is to preserve
+ * Hadoop's behavior where iterating over the same reducer data more than
+ * once yields no data.
+ */
+ private class NullIterator extends
+ ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.ValueIterator implements
+ Iterator<VALUEIN> {
+
+ public VALUEIN next() {
+ return null;
+ }
+
+ public boolean hasNext() {
+ return false;
+ }
+
+ public void remove() {
+ }
+ }
+
@Override
public boolean nextKey() {
if (inputIter.hasNext()) {