This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2.3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.3 by this push:
new 6bf770c HBASE-25323 Fix potential NPE when the zookeeper path of
RegionServerTracker does not exist when start (#2702)
6bf770c is described below
commit 6bf770c1f403aec453cf73bccaf587bf7065462b
Author: Qi Yu <[email protected]>
AuthorDate: Wed Nov 25 15:13:09 2020 +0800
HBASE-25323 Fix potential NPE when the zookeeper path of
RegionServerTracker does not exist when start (#2702)
Signed-off-by: Duo Zhang <[email protected]>
Signed-off-by: Guanghao Zhang <[email protected]>
---
.../hadoop/hbase/master/RegionServerTracker.java | 28 +++++++++++++---------
.../org/apache/hadoop/hbase/zookeeper/ZKUtil.java | 5 ++--
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionServerTracker.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionServerTracker.java
index 9d33a21..336f9dc 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionServerTracker.java
+++
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionServerTracker.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.master;
import java.io.IOException;
import java.io.InterruptedIOException;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -35,6 +36,7 @@ import org.apache.hadoop.hbase.zookeeper.ZKListener;
import org.apache.hadoop.hbase.zookeeper.ZKUtil;
import org.apache.hadoop.hbase.zookeeper.ZKWatcher;
import org.apache.hadoop.hbase.zookeeper.ZNodePaths;
+import
org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;
import org.apache.yetus.audience.InterfaceAudience;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
@@ -129,21 +131,24 @@ public class RegionServerTracker extends ZKListener {
splittingServersFromWALDir.stream().filter(s ->
!deadServersFromPE.contains(s)).
forEach(s -> LOG.error("{} has no matching ServerCrashProcedure", s));
//create ServerNode for all possible live servers from wal directory
- liveServersFromWALDir.stream()
+ liveServersFromWALDir
.forEach(sn ->
server.getAssignmentManager().getRegionStates().getOrCreateServer(sn));
watcher.registerListener(this);
synchronized (this) {
List<String> servers =
ZKUtil.listChildrenAndWatchForNewChildren(watcher,
watcher.getZNodePaths().rsZNode);
- for (String n : servers) {
- Pair<ServerName, RegionServerInfo> pair = getServerInfo(n);
- ServerName serverName = pair.getFirst();
- RegionServerInfo info = pair.getSecond();
- regionServers.add(serverName);
- ServerMetrics serverMetrics = info != null ?
ServerMetricsBuilder.of(serverName,
- VersionInfoUtil.getVersionNumber(info.getVersionInfo()),
- info.getVersionInfo().getVersion()) :
ServerMetricsBuilder.of(serverName);
- serverManager.checkAndRecordNewServer(serverName, serverMetrics);
+ if (null != servers) {
+ for (String n : servers) {
+ Pair<ServerName, RegionServerInfo> pair = getServerInfo(n);
+ ServerName serverName = pair.getFirst();
+ RegionServerInfo info = pair.getSecond();
+ regionServers.add(serverName);
+ ServerMetrics serverMetrics = info != null ?
+ ServerMetricsBuilder.of(serverName,
VersionInfoUtil.getVersionNumber(info.getVersionInfo()),
+ info.getVersionInfo().getVersion()) :
+ ServerMetricsBuilder.of(serverName);
+ serverManager.checkAndRecordNewServer(serverName, serverMetrics);
+ }
}
serverManager.findDeadServersAndProcess(deadServersFromPE,
liveServersFromWALDir);
}
@@ -163,8 +168,9 @@ public class RegionServerTracker extends ZKListener {
server.abort("Unexpected zk exception getting RS nodes", e);
return;
}
- Set<ServerName> servers =
+ Set<ServerName> servers = CollectionUtils.isEmpty(names) ?
Collections.emptySet() :
names.stream().map(ServerName::parseServerName).collect(Collectors.toSet());
+
for (Iterator<ServerName> iter = regionServers.iterator();
iter.hasNext();) {
ServerName sn = iter.next();
if (!servers.contains(sn)) {
diff --git
a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java
b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java
index 19d11d0..981265e 100644
---
a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java
+++
b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java
@@ -447,16 +447,15 @@ public final class ZKUtil {
} catch(KeeperException.NoNodeException ke) {
LOG.debug(zkw.prefix("Unable to list children of znode " + znode + " " +
"because node does not exist (not an error)"));
- return null;
} catch (KeeperException e) {
LOG.warn(zkw.prefix("Unable to list children of znode " + znode + " "),
e);
zkw.keeperException(e);
- return null;
} catch (InterruptedException e) {
LOG.warn(zkw.prefix("Unable to list children of znode " + znode + " "),
e);
zkw.interruptedException(e);
- return null;
}
+
+ return null;
}
/**