You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2012/03/01 23:58:40 UTC

svn commit: r1295967 - in /pig/trunk: CHANGES.txt src/org/apache/pig/scripting/jython/JythonScriptEngine.java test/org/apache/pig/test/TestScriptLanguage.java

Author: daijy
Date: Thu Mar  1 22:58:40 2012
New Revision: 1295967

URL: http://svn.apache.org/viewvc?rev=1295967&view=rev
Log:
PIG-2559: Embedded pig in python; invoking sys.exit(0) causes script failure

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/scripting/jython/JythonScriptEngine.java
    pig/trunk/test/org/apache/pig/test/TestScriptLanguage.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1295967&r1=1295966&r2=1295967&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu Mar  1 22:58:40 2012
@@ -265,6 +265,8 @@ PIG-2228: support partial aggregation in
 
 BUG FIXES
 
+PIG-2559: Embedded pig in python; invoking sys.exit(0) causes script failure (vivekp via daijy)
+
 PIG-2530: Reusing alias name in nested foreach causes incorrect results (daijy)
 
 PIG-2489: Input Path Globbing{} not working with PigStorageSchema or PigStorage('\t', '-schema') (daijy)

Modified: pig/trunk/src/org/apache/pig/scripting/jython/JythonScriptEngine.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/scripting/jython/JythonScriptEngine.java?rev=1295967&r1=1295966&r2=1295967&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/scripting/jython/JythonScriptEngine.java (original)
+++ pig/trunk/src/org/apache/pig/scripting/jython/JythonScriptEngine.java Thu Mar  1 22:58:40 2012
@@ -44,6 +44,7 @@ import org.python.core.Py;
 import org.python.core.PyException;
 import org.python.core.PyFrame;
 import org.python.core.PyFunction;
+import org.python.core.PyInteger;
 import org.python.core.PyJavaPackage;
 import org.python.core.PyObject;
 import org.python.core.PyString;
@@ -194,6 +195,16 @@ public class JythonScriptEngine extends 
                     }
                 }
             } catch (PyException e) {
+                if (e.match(Py.SystemExit)) {
+                    PyObject value = e.value;
+                    if (PyException.isExceptionInstance(e.value)) {
+                        value = value.__findattr__("code");
+                    }
+                    if (new  PyInteger(0).equals(value)) {
+                        LOG.info("Script invoked sys.exit(0)");
+                        return;
+                    }
+                }
                 String message = "Python Error. " + e;
                 throw new ExecException(message, 1121, e);
             }

Modified: pig/trunk/test/org/apache/pig/test/TestScriptLanguage.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestScriptLanguage.java?rev=1295967&r1=1295966&r2=1295967&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestScriptLanguage.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestScriptLanguage.java Thu Mar  1 22:58:40 2012
@@ -654,5 +654,23 @@ public class TestScriptLanguage {
 		PigStats stats = it.next().get(0);
 		assertTrue(stats.isSuccessful());
 	}
+	
+    @Test
+    public void testPyShouldNotFailScriptIfExitCodeIs0() throws Exception {
+        String[] script = {
+                "#!/usr/bin/python",
+                "from org.apache.pig.scripting import *",
+                "import sys",
+                "if 1 == 2:",
+                "   sys.exit(1)",
+                "else: sys.exit(0)"
+         };
+
+        Util.createLocalInputFile( "testScript.py", script);
+        ScriptEngine scriptEngine = ScriptEngine.getInstance("jython");
+        Map<String, List<PigStats>> statsMap = scriptEngine.run(pigServer.getPigContext(), "testScript.py");
+        assertEquals(0, statsMap.size());        
+
+   }
 
 }