Vaibhav Gumashta created HIVE-8829:
--------------------------------------
Summary: Upgrade to Thrift 0.9.2
Key: HIVE-8829
URL: https://issues.apache.org/jira/browse/HIVE-8829
Project: Hive
Issue Type: Improvement
Affects Versions: 0.15.0
Reporter: Vaibhav Gumashta
Assignee: Vaibhav Gumashta
Apache Thrift 0.9.2 was released recently (https://thrift.apache.org/download).
It has a fix for THRIFT-2660 which can cause HS2 (tcp mode) and Metastore
processes to go OOM on getting a non-thrift request when they use SASL
transport. The reason:
{code}
protected SaslResponse receiveSaslMessage() throws TTransportException {
underlyingTransport.readAll(messageHeader, 0, messageHeader.length);
byte statusByte = messageHeader[0];
byte[] payload = new byte[EncodingUtils.decodeBigEndian(messageHeader,
STATUS_BYTES)];
underlyingTransport.readAll(payload, 0, payload.length);
NegotiationStatus status = NegotiationStatus.byValue(statusByte);
if (status == null) {
sendAndThrowMessage(NegotiationStatus.ERROR, "Invalid status " +
statusByte);
} else if (status == NegotiationStatus.BAD || status ==
NegotiationStatus.ERROR) {
try {
String remoteMessage = new String(payload, "UTF-8");
throw new TTransportException("Peer indicated failure: " +
remoteMessage);
} catch (UnsupportedEncodingException e) {
throw new TTransportException(e);
}
}
{code}
Basically since there are no message format checks / size checks before
creating the byte array, on getting a non-SASL message this creates a huge
byte array from some garbage size.
For HS2, an attempt was made to fix it here: HIVE-6468, which never went in. I
think for 0.15.0 it's best to upgarde to Thrift 0.9.2.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)