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) {