You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/04/26 19:38:06 UTC

svn commit: r1476313 - in /hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql: exec/PTFUtils.java plan/PTFDesc.java udf/generic/GenericUDFLeadLag.java udf/ptf/TableFunctionEvaluator.java

Author: hashutosh
Date: Fri Apr 26 17:38:05 2013
New Revision: 1476313

URL: http://svn.apache.org/r1476313
Log:
HIVE-4412 : PTFDesc tries serialize transient fields like OIs, etc. (Navis via Ashutosh Chauhan)

Modified:
    hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/exec/PTFUtils.java
    hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/plan/PTFDesc.java
    hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeadLag.java
    hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/TableFunctionEvaluator.java

Modified: hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/exec/PTFUtils.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/exec/PTFUtils.java?rev=1476313&r1=1476312&r2=1476313&view=diff
==============================================================================
--- hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/exec/PTFUtils.java (original)
+++ hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/exec/PTFUtils.java Fri Apr 26 17:38:05 2013
@@ -31,6 +31,7 @@ import java.beans.XMLDecoder;
 import java.beans.XMLEncoder;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -261,25 +262,26 @@ public class PTFUtils {
     }
   }
 
-  public static void makeTransient(Class<?> beanClass, String pdName)
-  {
-    BeanInfo info;
-    try
-    {
-      info = Introspector.getBeanInfo(beanClass);
-      PropertyDescriptor[] propertyDescriptors = info
-          .getPropertyDescriptors();
-      for (int i = 0; i < propertyDescriptors.length; ++i)
-      {
-        PropertyDescriptor pd = propertyDescriptors[i];
-        if (pd.getName().equals(pdName))
-        {
-          pd.setValue("transient", Boolean.TRUE);
+  public static void makeTransient(Class<?> beanClass, String... pdNames) {
+    try {
+      BeanInfo info = Introspector.getBeanInfo(beanClass);
+      PropertyDescriptor[] descs = info.getPropertyDescriptors();
+      if (descs == null) {
+        throw new RuntimeException("Cannot access property descriptor for class " + beanClass);
+      }
+      Map<String, PropertyDescriptor> mapping = new HashMap<String, PropertyDescriptor>();
+      for (PropertyDescriptor desc : descs) {
+        mapping.put(desc.getName(), desc);
+      }
+      for (String pdName : pdNames) {
+        PropertyDescriptor desc = mapping.get(pdName);
+        if (desc == null) {
+          throw new RuntimeException("Property " + pdName + " does not exist in " + beanClass);
         }
+        desc.setValue("transient", Boolean.TRUE);
       }
     }
-    catch (IntrospectionException ie)
-    {
+    catch (IntrospectionException ie) {
       throw new RuntimeException(ie);
     }
   }

Modified: hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/plan/PTFDesc.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/plan/PTFDesc.java?rev=1476313&r1=1476312&r2=1476313&view=diff
==============================================================================
--- hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/plan/PTFDesc.java (original)
+++ hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/plan/PTFDesc.java Fri Apr 26 17:38:05 2013
@@ -255,10 +255,7 @@ public class PTFDesc extends AbstractOpe
     transient TypeCheckCtx typeCheckCtx;
 
     static{
-      PTFUtils.makeTransient(ShapeDetails.class, "serde");
-      PTFUtils.makeTransient(ShapeDetails.class, "OI");
-      PTFUtils.makeTransient(ShapeDetails.class, "rr");
-      PTFUtils.makeTransient(ShapeDetails.class, "typeCheckCtx");
+      PTFUtils.makeTransient(ShapeDetails.class, "OI", "serde", "rr", "typeCheckCtx");
     }
 
     public String getSerdeClassName() {
@@ -588,8 +585,7 @@ public class PTFDesc extends AbstractOpe
     transient ObjectInspector OI;
 
     static{
-      PTFUtils.makeTransient(PTFExpressionDef.class, "exprEvaluator");
-      PTFUtils.makeTransient(PTFExpressionDef.class, "OI");
+      PTFUtils.makeTransient(PTFExpressionDef.class, "exprEvaluator", "OI");
     }
 
     public PTFExpressionDef() {}

Modified: hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeadLag.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeadLag.java?rev=1476313&r1=1476312&r2=1476313&view=diff
==============================================================================
--- hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeadLag.java (original)
+++ hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeadLag.java Fri Apr 26 17:38:05 2013
@@ -37,14 +37,14 @@ public abstract class GenericUDFLeadLag 
 {
 	transient ExprNodeEvaluator exprEvaluator;
 	transient PTFPartitionIterator<Object> pItr;
-	ObjectInspector firstArgOI;
-	ObjectInspector defaultArgOI;
-	Converter defaultValueConverter;
+	transient ObjectInspector firstArgOI;
+	transient ObjectInspector defaultArgOI;
+	transient Converter defaultValueConverter;
 	int amt;
 
 	static{
-		PTFUtils.makeTransient(GenericUDFLeadLag.class, "exprEvaluator");
-		PTFUtils.makeTransient(GenericUDFLeadLag.class, "pItr");
+		PTFUtils.makeTransient(GenericUDFLeadLag.class, "exprEvaluator", "pItr",
+        "firstArgOI", "defaultArgOI", "defaultValueConverter");
 	}
 
 	@Override

Modified: hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/TableFunctionEvaluator.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/TableFunctionEvaluator.java?rev=1476313&r1=1476312&r2=1476313&view=diff
==============================================================================
--- hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/TableFunctionEvaluator.java (original)
+++ hive/branches/branch-0.11/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/TableFunctionEvaluator.java Fri Apr 26 17:38:05 2013
@@ -67,12 +67,9 @@ public abstract class TableFunctionEvalu
   transient protected PTFPartition outputPartition;
 
   static{
-    PTFUtils.makeTransient(TableFunctionEvaluator.class, "OI");
-    PTFUtils.makeTransient(TableFunctionEvaluator.class, "rawInputOI");
-    PTFUtils.makeTransient(TableFunctionEvaluator.class, "outputPartition");
+    PTFUtils.makeTransient(TableFunctionEvaluator.class, "outputOI", "rawInputOI");
   }
 
-
   public StructObjectInspector getOutputOI()
   {
     return OI;