You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by bi...@apache.org on 2011/11/28 22:47:27 UTC

svn commit: r1207638 - in /incubator/accumulo/branches/1.4/src/core/src: main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java

Author: billie
Date: Mon Nov 28 21:47:26 2011
New Revision: 1207638

URL: http://svn.apache.org/viewvc?rev=1207638&view=rev
Log:
ACCUMULO-167 expanded test for SummingArrayCombiner, fixed bug in its initialization

Modified:
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java?rev=1207638&r1=1207637&r2=1207638&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java Mon Nov 28 21:47:26 2011
@@ -43,11 +43,11 @@ import org.apache.hadoop.io.WritableUtil
 public class SummingArrayCombiner extends TypedValueCombiner<List<Long>> {
   private static final String TYPE = "type";
   private static final String CLASS_PREFIX = "class:";
-
+  
   public static enum Type {
     VARNUM, LONG, STRING
   }
-
+  
   @Override
   public List<Long> typedReduce(Key key, Iterator<List<Long>> iter) {
     List<Long> sum = new ArrayList<Long>();
@@ -88,7 +88,7 @@ public class SummingArrayCombiner extend
             type.substring(CLASS_PREFIX.length()), Encoder.class);
         encoder = clazz.newInstance();
         List<Long> testList = encoder.decode(encoder.encode(Arrays.asList(0l, 1l)));
-        if (testList.size() != 3 || testList.get(0) != 0l || testList.get(1) != 1l) {
+        if (testList.size() != 2 || testList.get(0) != 0l || testList.get(1) != 1l) {
           throw new IllegalArgumentException("something wrong with " + type + " -- doesn't encode and decode a List<Long> properly");
         }
       } catch (ClassNotFoundException e) {
@@ -236,7 +236,7 @@ public class SummingArrayCombiner extend
    * @param is
    *          IteratorSetting object to configure.
    * @param encoderClass
-   *          Class<? extends Encoder<Long>> specifying the encoding type.
+   *          Class<? extends Encoder<List<Long>>> specifying the encoding type.
    */
   public static void setEncodingType(IteratorSetting is, Class<? extends Encoder<List<Long>>> encoderClass) {
     is.addOption(TYPE, CLASS_PREFIX + encoderClass.getName());

Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java?rev=1207638&r1=1207637&r2=1207638&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java Mon Nov 28 21:47:26 2011
@@ -370,7 +370,7 @@ public class CombinerTest {
     IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
     LongCombiner.setEncodingType(is, StringEncoder.class);
     Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
-
+    
     List<SortedKeyValueIterator<Key,Value>> sources = new ArrayList<SortedKeyValueIterator<Key,Value>>(3);
     sources.add(new SortedMapIterator(tm1));
     sources.add(new SortedMapIterator(tm2));
@@ -529,7 +529,10 @@ public class CombinerTest {
       assertEquals(a[i], b[i]);
   }
   
-  public static void sumArray(Encoder<List<Long>> encoder, String type) throws IOException {
+  public static void sumArray(Class<? extends Encoder<List<Long>>> encoderClass, String type) throws IOException, InstantiationException,
+      IllegalAccessException {
+    Encoder<List<Long>> encoder = encoderClass.newInstance();
+    
     TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>();
     
     // keys that aggregate
@@ -539,8 +542,38 @@ public class CombinerTest {
     
     Combiner ai = new SummingArrayCombiner();
     
-    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
-    LongCombiner.setEncodingType(is, SummingCombiner.Type.valueOf(type));
+    IteratorSetting is = new IteratorSetting(1, SummingArrayCombiner.class);
+    SummingArrayCombiner.setEncodingType(is, SummingArrayCombiner.Type.valueOf(type));
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
+    
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
+    ai.seek(new Range(), EMPTY_COL_FAMS, false);
+    
+    assertTrue(ai.hasTop());
+    assertEquals(nk(1, 1, 1, 3), ai.getTopKey());
+    assertBytesEqual(encoder.encode(nal(4l, 6l, 5l)), ai.getTopValue().get());
+    
+    ai.next();
+    
+    assertFalse(ai.hasTop());
+    
+    is.clearOptions();
+    SummingArrayCombiner.setEncodingType(is, encoderClass);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
+    
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
+    ai.seek(new Range(), EMPTY_COL_FAMS, false);
+    
+    assertTrue(ai.hasTop());
+    assertEquals(nk(1, 1, 1, 3), ai.getTopKey());
+    assertBytesEqual(encoder.encode(nal(4l, 6l, 5l)), ai.getTopValue().get());
+    
+    ai.next();
+    
+    assertFalse(ai.hasTop());
+    
+    is.clearOptions();
+    SummingArrayCombiner.setEncodingType(is, encoderClass.getName());
     Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
     ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
@@ -556,12 +589,9 @@ public class CombinerTest {
   }
   
   @Test
-  public void sumArrayTest() throws IOException {
-    Encoder<List<Long>> encoder = new SummingArrayCombiner.VarNumArrayEncoder();
-    sumArray(encoder, "VARNUM");
-    encoder = new SummingArrayCombiner.LongArrayEncoder();
-    sumArray(encoder, "LONG");
-    encoder = new SummingArrayCombiner.StringArrayEncoder();
-    sumArray(encoder, "STRING");
+  public void sumArrayTest() throws IOException, InstantiationException, IllegalAccessException {
+    sumArray(SummingArrayCombiner.VarNumArrayEncoder.class, "VARNUM");
+    sumArray(SummingArrayCombiner.LongArrayEncoder.class, "LONG");
+    sumArray(SummingArrayCombiner.StringArrayEncoder.class, "STRING");
   }
 }