You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jv...@apache.org on 2011/07/08 20:30:52 UTC

svn commit: r1144418 - in /hive/trunk/serde/src: java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java

Author: jvs
Date: Fri Jul  8 18:30:52 2011
New Revision: 1144418

URL: http://svn.apache.org/viewvc?rev=1144418&view=rev
Log:
HIVE-2045.  TCTLSeparatedProtocol.SimpleTransportTokenizer.nextToken() throws
Null Pointer Exception in some cases.  (Chinna Rao Lalam via jvs)


Modified:
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java?rev=1144418&r1=1144417&r2=1144418&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/TCTLSeparatedProtocol.java Fri Jul  8 18:30:52 2011
@@ -219,10 +219,17 @@ public class TCTLSeparatedProtocol exten
       this.trans = trans;
       this.separator = separator;
       buf = new byte[buffer_length];
+    }
+
+    private void initialize() {
       // do not fill tokenizer until user requests since filling it could read
       // in data
       // not meant for this instantiation.
-      fillTokenizer();
+      try {
+        fillTokenizer();
+      } catch (Exception e) {
+        LOG.warn("Unable to initialize tokenizer", e);
+      }
     }
 
     private boolean fillTokenizer() {
@@ -244,9 +251,8 @@ public class TCTLSeparatedProtocol exten
           tokenizer = new StringTokenizer("", separator, true);
           return false;
         }
-        e.printStackTrace();
         tokenizer = null;
-        return false;
+        throw new RuntimeException(e);
       }
       return true;
     }
@@ -364,6 +370,7 @@ public class TCTLSeparatedProtocol exten
     nullText = new Text(nullString);
     transportTokenizer = new SimpleTransportTokenizer(innerTransport,
         rowSeparator, bufferSize);
+    transportTokenizer.initialize();
   }
 
   /**

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java?rev=1144418&r1=1144417&r2=1144418&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java Fri Jul  8 18:30:52 2011
@@ -30,6 +30,8 @@ import org.apache.thrift.protocol.TList;
 import org.apache.thrift.protocol.TMap;
 import org.apache.thrift.protocol.TStruct;
 import org.apache.thrift.transport.TMemoryBuffer;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
 
 /**
  * TestTCTLSeparatedProtocol.
@@ -474,4 +476,36 @@ public class TestTCTLSeparatedProtocol e
     assertTrue(ret1 == 0);
   }
 
+  public void testShouldThrowRunTimeExceptionIfUnableToInitializeTokenizer() throws Exception {
+    TCTLSeparatedProtocol separatedProtocol = new TCTLSeparatedProtocol(new TTransport() {
+      @Override
+      public void close() {
+      }
+
+      @Override
+      public boolean isOpen() {
+        return false;
+      }
+
+      @Override
+      public void open() throws TTransportException {
+      }
+
+      @Override
+      public int read(byte[] buf, int off, int len) throws TTransportException {
+        throw new TTransportException();
+      }
+
+      @Override
+      public void write(byte[] buf, int off, int len) throws TTransportException {
+      }
+    });
+    separatedProtocol.initialize(null, new Properties());
+    try {
+      separatedProtocol.readStructBegin();
+      fail("Runtime Exception is expected if the intialization of tokenizer failed.");
+    } catch (Exception e) {
+      assertTrue(e.getCause() instanceof TTransportException);
+    }
+  }
 }