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 2019/12/14 03:00:42 UTC
[hive] branch master updated: HIVE-22577 :
StringIndexOutOfBoundsException when getting sessionId from worker node
name (Attila Magyar via Ashutosh Chauhan)
This is an automated email from the ASF dual-hosted git repository.
hashutosh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 701c76e HIVE-22577 : StringIndexOutOfBoundsException when getting sessionId from worker node name (Attila Magyar via Ashutosh Chauhan)
701c76e is described below
commit 701c76e9519fc655fde1e028799ef38d1558d3f2
Author: Attila Magyar <am...@cloudera.com>
AuthorDate: Fri Dec 13 19:00:08 2019 -0800
HIVE-22577 : StringIndexOutOfBoundsException when getting sessionId from worker node name (Attila Magyar via Ashutosh Chauhan)
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>
---
.../apache/hadoop/hive/registry/impl/ZkRegistryBase.java | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/llap-client/src/java/org/apache/hadoop/hive/registry/impl/ZkRegistryBase.java b/llap-client/src/java/org/apache/hadoop/hive/registry/impl/ZkRegistryBase.java
index 5751b8e..d28fd17 100644
--- a/llap-client/src/java/org/apache/hadoop/hive/registry/impl/ZkRegistryBase.java
+++ b/llap-client/src/java/org/apache/hadoop/hive/registry/impl/ZkRegistryBase.java
@@ -456,7 +456,7 @@ public abstract class ZkRegistryBase<InstanceType extends ServiceInstance> {
byte[] data = getWorkerData(childData, workerNodePrefix);
if (data == null) continue;
String nodeName = extractNodeName(childData);
- if (!nodeName.startsWith(workerNodePrefix)) continue;
+ if (!isLlapWorker(nodeName, workerNodePrefix)) continue;
int ephSeqVersion = extractSeqNum(nodeName);
try {
ServiceRecord srv = encoder.fromBytes(childData.getPath(), data);
@@ -474,13 +474,17 @@ public abstract class ZkRegistryBase<InstanceType extends ServiceInstance> {
}
}
+ private static boolean isLlapWorker(String nodeName, String workerNodePrefix) {
+ return nodeName.startsWith(workerNodePrefix) && nodeName.length() > workerNodePrefix.length();
+ }
+
protected abstract InstanceType createServiceInstance(ServiceRecord srv) throws IOException;
protected static byte[] getWorkerData(ChildData childData, String workerNodePrefix) {
if (childData == null) return null;
byte[] data = childData.getData();
if (data == null) return null;
- if (!extractNodeName(childData).startsWith(workerNodePrefix)) return null;
+ if (!isLlapWorker(extractNodeName(childData), workerNodePrefix)) return null;
return data;
}
@@ -496,7 +500,10 @@ public abstract class ZkRegistryBase<InstanceType extends ServiceInstance> {
ChildData childData = event.getData();
if (childData == null) return;
String nodeName = extractNodeName(childData);
- if (!nodeName.startsWith(workerNodePrefix)) return;
+ if (nodeName.equals(workerNodePrefix)) {
+ LOG.warn("Invalid LLAP worker node name: {} was {}", childData.getPath(), event.getType());
+ }
+ if (!isLlapWorker(nodeName, workerNodePrefix)) return;
LOG.info("{} for zknode {}", event.getType(), childData.getPath());
InstanceType instance = extractServiceInstance(event, childData);
if (instance != null) {
@@ -656,7 +663,7 @@ public abstract class ZkRegistryBase<InstanceType extends ServiceInstance> {
private int extractSeqNum(String nodeName) {
// Extract the sequence number of this ephemeral-sequential znode.
- String ephSeqVersionStr = nodeName.substring(workerNodePrefix.length() + 1);
+ String ephSeqVersionStr = nodeName.substring(workerNodePrefix.length());
try {
return Integer.parseInt(ephSeqVersionStr);
} catch (NumberFormatException e) {