Author: hashutosh
Date: Tue Aug 31 01:55:04 2010
New Revision: 991056

URL: http://svn.apache.org/viewvc?rev=991056&view=rev
Log:
PIG-1531: Pig gobbles up error messages

Modified:
    hadoop/pig/trunk/CHANGES.txt
    
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigInputFormat.java
    
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/InputOutputFileVisitor.java
    hadoop/pig/trunk/test/org/apache/pig/test/TestInputOutputFileValidator.java

Modified: hadoop/pig/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=991056&r1=991055&r2=991056&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Tue Aug 31 01:55:04 2010
@@ -26,6 +26,8 @@ PIG-1249: Safe-guards against misconfigu
 
 IMPROVEMENTS
 
+PIG-1531: Pig gobbles up error messages (nrai via hashutosh)
+
 PIG-1458: aggregate files for replicated join (rding)
 
 PIG-1205:  Enhance HBaseStorage-- Make it support loading row key and 
implement StoreFunc (zjffdu and dvryaboy)

Modified: 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigInputFormat.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigInputFormat.java?rev=991056&r1=991055&r2=991056&view=diff
==============================================================================
--- 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigInputFormat.java
 (original)
+++ 
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigInputFormat.java
 Tue Aug 31 01:55:04 2010
@@ -276,7 +276,11 @@ public class PigInputFormat extends Inpu
             } catch (Exception e) {
                 int errCode = 2118;
                 String msg = "Unable to create input splits for: " + 
inputs.get(i).getFileName();
-                throw new ExecException(msg, errCode, PigException.BUG, e);
+                if(e.getMessage() !=null && (!e.getMessage().isEmpty()) ){
+                       throw new ExecException(e.getMessage(), errCode, 
PigException.BUG, e);
+                }else{
+                       throw new ExecException(msg, errCode, PigException.BUG, 
e);
+                }
             }
         }
         

Modified: 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/InputOutputFileVisitor.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/InputOutputFileVisitor.java?rev=991056&r1=991055&r2=991056&view=diff
==============================================================================
--- 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/InputOutputFileVisitor.java
 (original)
+++ 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/validators/InputOutputFileVisitor.java
 Tue Aug 31 01:55:04 2010
@@ -24,8 +24,6 @@ import org.apache.pig.PigException;
 import org.apache.pig.ResourceSchema;
 import org.apache.pig.StoreFuncInterface;
 import org.apache.pig.impl.PigContext ;
-import org.apache.pig.impl.logicalLayer.FrontendException;
-import org.apache.pig.impl.logicalLayer.LONative;
 import org.apache.pig.impl.logicalLayer.LOStore;
 import org.apache.pig.impl.logicalLayer.LOVisitor;
 import org.apache.pig.impl.logicalLayer.LogicalOperator;
@@ -37,18 +35,16 @@ import org.apache.pig.impl.plan.PlanVali
 import org.apache.pig.impl.plan.CompilationMessageCollector.MessageType;
 
 /***
- * Visitor for checking input/output files
- * Exceptions in here do not affect later operations
- * so we don't throw any exception but log all of 
- * them in msgCollector.
+ * Visitor for checking output specification
+ * In addition to throwing exception we also log them in msgCollector.
  * 
  * We assume input/output files can exist only in the top level plan.
  *
  */
 public class InputOutputFileVisitor extends LOVisitor {
     
-    private PigContext pigCtx = null ;
-    private CompilationMessageCollector msgCollector = null ;
+    private PigContext pigCtx;
+    private CompilationMessageCollector msgCollector;
     
     public InputOutputFileVisitor(LogicalPlan plan,
                                 CompilationMessageCollector messageCollector,
@@ -58,7 +54,7 @@ public class InputOutputFileVisitor exte
         msgCollector = messageCollector ;
         
     }
-   
+       
     /***
      * The logic here is to delegate the validation of output specification
      * to output format implementation.
@@ -68,36 +64,31 @@ public class InputOutputFileVisitor exte
 
         StoreFuncInterface sf = store.getStoreFunc();
         String outLoc = store.getOutputFile().getFileName();
-        String errMsg = "Unexpected error. Could not validate the output " +
-        "specification for: "+outLoc;
         int errCode = 2116;
-
+        String validationErrStr ="Output Location Validation Failed for: '" + 
outLoc ;
+        Job dummyJob;
+        
         try {
             if(store.getSchema() != null){
                 sf.checkSchema(new ResourceSchema(store.getSchema(), 
store.getSortInfo()));                
             }
-        } catch (FrontendException e) {
-            msgCollector.collect(errMsg, MessageType.Error) ;
-            throw new PlanValidationException(errMsg, errCode, 
pigCtx.getErrorSource(), e);
-        } catch (IOException e) {
-            msgCollector.collect(errMsg, MessageType.Error) ;
-            throw new PlanValidationException(errMsg, errCode, 
pigCtx.getErrorSource(), e);
-        }
-
-        Job dummyJob;
-        
-        try {
             dummyJob = new 
Job(ConfigurationUtil.toConfiguration(pigCtx.getProperties()));
             sf.setStoreLocation(outLoc, dummyJob);
         } catch (IOException ioe) {
-            msgCollector.collect(errMsg, MessageType.Error) ;
-            throw new PlanValidationException(errMsg, errCode, 
pigCtx.getErrorSource(), ioe);
+               if(ioe instanceof PigException){
+                       errCode = ((PigException)ioe).getErrorCode();
+               } 
+               String exceptionMsg = ioe.getMessage();
+               validationErrStr += (exceptionMsg == null) ? "" : " More info 
to follow:\n" +exceptionMsg;
+               msgCollector.collect(validationErrStr, MessageType.Error) ;
+            throw new PlanValidationException(validationErrStr, errCode, 
pigCtx.getErrorSource(), ioe);
         }
+        
+        validationErrStr += " More info to follow:\n";
         try {
             sf.getOutputFormat().checkOutputSpecs(dummyJob);
         } catch (IOException ioe) {
             byte errSrc = pigCtx.getErrorSource();
-            errCode = 0;
             switch(errSrc) {
             case PigException.BUG:
                 errCode = 2002;
@@ -109,13 +100,13 @@ public class InputOutputFileVisitor exte
                 errCode = 4000;
                 break;
             }
-            errMsg = "Output specification '"+outLoc+"' is invalid or already 
exists";
-            msgCollector.collect(errMsg, MessageType.Error) ;
-            throw new PlanValidationException(errMsg, errCode, errSrc, ioe);
+               validationErrStr  += ioe.getMessage();
+               msgCollector.collect(validationErrStr, MessageType.Error) ;
+            throw new PlanValidationException(validationErrStr, errCode, 
errSrc, ioe);
         } catch (InterruptedException ie) {
-            msgCollector.collect(errMsg, MessageType.Error) ;
-            throw new PlanValidationException(errMsg, errCode, 
pigCtx.getErrorSource(), ie);
+               validationErrStr += ie.getMessage();
+               msgCollector.collect(validationErrStr, MessageType.Error) ;
+            throw new PlanValidationException(validationErrStr, errCode, 
pigCtx.getErrorSource(), ie);
         }
     }
-
 }

Modified: 
hadoop/pig/trunk/test/org/apache/pig/test/TestInputOutputFileValidator.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestInputOutputFileValidator.java?rev=991056&r1=991055&r2=991056&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestInputOutputFileValidator.java 
(original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestInputOutputFileValidator.java 
Tue Aug 31 01:55:04 2010
@@ -26,7 +26,6 @@ import org.apache.pig.FuncSpec;
 import org.apache.pig.PigServer;
 import org.apache.pig.backend.datastorage.DataStorage;
 import org.apache.pig.backend.datastorage.ElementDescriptor;
-import org.apache.pig.backend.executionengine.ExecException;
 import org.apache.pig.backend.hadoop.datastorage.ConfigurationUtil;
 import org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil;
 import org.apache.pig.data.Tuple;
@@ -233,6 +232,7 @@ public class TestInputOutputFileValidato
                     pig.store("a", output);
                 } catch (Exception e) {
                     assertEquals(6000, 
LogUtils.getPigException(e).getErrorCode());
+                    
assertTrue(LogUtils.getPigException(e).getMessage().contains("Output Location 
Validation Failed for"));
                     exceptionCaught = true;
                 }
                 if(!exceptionCaught) {


Reply via email to