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/30 17:19:30 UTC

svn commit: r1208488 - in /incubator/accumulo/branches/1.4/src/core/src: main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java

Author: billie
Date: Wed Nov 30 16:19:28 2011
New Revision: 1208488

URL: http://svn.apache.org/viewvc?rev=1208488&view=rev
Log:
ACCUMULO-153 slightly modified patch

Modified:
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java?rev=1208488&r1=1208487&r2=1208488&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java Wed Nov 30 16:19:28 2011
@@ -380,7 +380,7 @@ public abstract class InputFormatBase<K,
    * @deprecated since 1.4, see {@link #addIterator(JobContext, IteratorSetting)}
    */
   public static void setIteratorOption(JobContext job, String iteratorName, String key, String value) {
-    if (value == null)
+    if (iteratorName == null || key == null || value == null)
       return;
     
     String iteratorOptions = job.getConfiguration().get(ITERATORS_OPTIONS);
@@ -943,8 +943,8 @@ public abstract class InputFormatBase<K,
     public AccumuloIteratorOption(String iteratorOption) {
       StringTokenizer tokenizer = new StringTokenizer(iteratorOption, FIELD_SEP);
       this.iteratorName = tokenizer.nextToken();
-      this.key = tokenizer.nextToken();
       try {
+        this.key = URLDecoder.decode(tokenizer.nextToken(), "UTF-8");
         this.value = URLDecoder.decode(tokenizer.nextToken(), "UTF-8");
       } catch (UnsupportedEncodingException e) {
         throw new RuntimeException(e);
@@ -966,7 +966,7 @@ public abstract class InputFormatBase<K,
     @Override
     public String toString() {
       try {
-        return new String(iteratorName + FIELD_SEP + key + FIELD_SEP + URLEncoder.encode(value, "UTF-8"));
+        return new String(iteratorName + FIELD_SEP + URLEncoder.encode(key, "UTF-8") + FIELD_SEP + URLEncoder.encode(value, "UTF-8"));
       } catch (UnsupportedEncodingException e) {
         throw new RuntimeException(e);
       }

Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java?rev=1208488&r1=1208487&r2=1208488&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloInputFormatTest.java Wed Nov 30 16:19:28 2011
@@ -145,6 +145,42 @@ public class AccumuloInputFormatTest {
   }
   
   /**
+   * Test adding iterator options where the keys and values contain both the FIELD_SEPARATOR character (':') and ITERATOR_SEPARATOR (',') characters. There
+   * should be no exceptions thrown when trying to parse these types of option entries.
+   * 
+   * This test makes sure that the expected raw values, as appears in the Job, are equal to what's expected.
+   */
+  @Test
+  public void testIteratorOptionEncoding() throws Throwable {
+    String key = "colon:delimited:key";
+    String value = "comma,delimited,value";
+    IteratorSetting someSetting = new IteratorSetting(1, "iterator", "Iterator.class");
+    someSetting.addOption(key, value);
+    Job job = new Job();
+    AccumuloInputFormat.addIterator(job, someSetting);
+    
+    final String rawConfigOpt = new AccumuloIteratorOption("iterator", key, value).toString();
+    
+    assertEquals(rawConfigOpt, job.getConfiguration().get("AccumuloInputFormat.iterators.options"));
+    
+    List<AccumuloIteratorOption> opts = AccumuloInputFormat.getIteratorOptions(job);
+    assertEquals(1, opts.size());
+    assertEquals(opts.get(0).getKey(), key);
+    assertEquals(opts.get(0).getValue(), value);
+    
+    someSetting.addOption(key + "2", value);
+    someSetting.setPriority(2);
+    someSetting.setName("it2");
+    AccumuloInputFormat.addIterator(job, someSetting);
+    opts = AccumuloInputFormat.getIteratorOptions(job);
+    assertEquals(3, opts.size());
+    for (AccumuloIteratorOption opt : opts) {
+      assertEquals(opt.getKey().substring(0, key.length()), key);
+      assertEquals(opt.getValue(), value);
+    }
+  }
+  
+  /**
    * Test getting iterator settings for multiple iterators set
    */
   @SuppressWarnings("deprecation")