You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by rd...@apache.org on 2010/11/16 21:47:19 UTC

svn commit: r1035803 - in /pig/branches/branch-0.8: src/org/apache/pig/tools/pigstats/PigStatsUtil.java test/org/apache/pig/test/TestPigRunner.java

Author: rding
Date: Tue Nov 16 20:47:19 2010
New Revision: 1035803

URL: http://svn.apache.org/viewvc?rev=1035803&view=rev
Log:
PIG-1723: Need to limit the length of Pig counter names

Modified:
    pig/branches/branch-0.8/src/org/apache/pig/tools/pigstats/PigStatsUtil.java
    pig/branches/branch-0.8/test/org/apache/pig/test/TestPigRunner.java

Modified: pig/branches/branch-0.8/src/org/apache/pig/tools/pigstats/PigStatsUtil.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.8/src/org/apache/pig/tools/pigstats/PigStatsUtil.java?rev=1035803&r1=1035802&r2=1035803&view=diff
==============================================================================
--- pig/branches/branch-0.8/src/org/apache/pig/tools/pigstats/PigStatsUtil.java (original)
+++ pig/branches/branch-0.8/src/org/apache/pig/tools/pigstats/PigStatsUtil.java Tue Nov 16 20:47:19 2010
@@ -72,6 +72,10 @@ public abstract class PigStatsUtil {
             = "MultiInputCounters";
     
     private static final Log LOG = LogFactory.getLog(PigStatsUtil.class);
+    
+    // Restrict total string size of a counter name to 64 characters.
+    // Leave 24 characters for prefix string.
+    private static final int COUNTER_NAME_LIMIT = 40;
    
     /**
      * Returns the count for the given counter name in the counter group 
@@ -134,13 +138,18 @@ public abstract class PigStatsUtil {
         } else {
             slash = uri.lastIndexOf(SEPARATOR);
         }
+        String shortName = null;
         if (scolon==-1) {
-            return uri.substring(slash+1);
+            shortName = uri.substring(slash+1);
         }
         if (slash < scolon) {
-            return uri.substring(slash+1, scolon);
+            shortName = uri.substring(slash+1, scolon);
+        }
+        if (shortName != null && shortName.length() > COUNTER_NAME_LIMIT) {
+            shortName = shortName.substring(shortName.length()
+                    - COUNTER_NAME_LIMIT);
         }
-        return null;
+        return shortName;
     }
            
     /**

Modified: pig/branches/branch-0.8/test/org/apache/pig/test/TestPigRunner.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.8/test/org/apache/pig/test/TestPigRunner.java?rev=1035803&r1=1035802&r2=1035803&view=diff
==============================================================================
--- pig/branches/branch-0.8/test/org/apache/pig/test/TestPigRunner.java (original)
+++ pig/branches/branch-0.8/test/org/apache/pig/test/TestPigRunner.java Tue Nov 16 20:47:19 2010
@@ -39,6 +39,7 @@ import org.apache.pig.backend.hadoop.dat
 import org.apache.pig.impl.PigContext;
 import org.apache.pig.impl.io.FileLocalizer;
 import org.apache.pig.newplan.Operator;
+import org.apache.pig.tools.pigstats.InputStats;
 import org.apache.pig.tools.pigstats.JobStats;
 import org.apache.pig.tools.pigstats.OutputStats;
 import org.apache.pig.tools.pigstats.PigProgressNotificationListener;
@@ -428,6 +429,44 @@ public class TestPigRunner {
     }
     
     @Test
+    public void testLongCounterName() throws Exception {
+        // Pig now restricts the string size of its counter name to less than 64 characters.
+        PrintWriter w = new PrintWriter(new FileWriter("myinputfile"));
+        w.println("1\t2\t3");
+        w.println("5\t3\t4");
+        w.println("3\t4\t5");
+        w.println("5\t6\t7");
+        w.println("3\t7\t8");
+        w.close();
+        String longfilename = "longlonglonglonglonglonglonglonglonglonglonglongfilefilefilename";
+        Util.copyFromLocalToCluster(cluster, "myinputfile", longfilename);
+        
+        PrintWriter w1 = new PrintWriter(new FileWriter(PIG_FILE));
+        w1.println("A = load '" + INPUT_FILE + "' as (a0:int, a1:int, a2:int);");
+        w1.println("B = load '" + longfilename + "' as (a0:int, a1:int, a2:int);");
+        w1.println("C = join A by a0, B by a0;");
+        w1.println("store C into '" + OUTPUT_FILE + "';");
+        w1.close();
+        
+        try {
+            String[] args = { PIG_FILE };
+            PigStats stats = PigRunner.run(args, new TestNotificationListener());
+     
+            assertTrue(stats.isSuccessful());
+            
+            assertEquals(1, stats.getNumberJobs());
+            List<InputStats> inputs = stats.getInputStats();
+            assertEquals(2, inputs.size());
+            for (InputStats instats : inputs) {
+                assertEquals(5, instats.getNumberRecords());
+            }
+        } finally {
+            new File(PIG_FILE).delete();
+            Util.deleteFile(cluster, OUTPUT_FILE);
+        }
+    }
+    
+    @Test
     public void testRegisterExternalJar() throws Exception {
         String[] args = { "-Dpig.additional.jars=pig-withouthadoop.jar",
                 "-Dmapred.job.queue.name=default",