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);
+ }
+ }
}