From cbf390422b988b0fd4466c36bc8e4c767903e63c Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Wed, 19 Jul 2017 15:46:08 -0700 Subject: [PATCH] HBASE-18330 NPE in ReplicationZKLockCleanerChore --- .../hadoop/hbase/replication/ReplicationPeersZKImpl.java | 3 +++ .../hbase/replication/ReplicationQueuesClientZKImpl.java | 2 +- .../hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java | 3 +++ .../hbase/replication/regionserver/DumpReplicationQueues.java | 3 +++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java index 02fe2f13b1a..751e45441f8 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java @@ -520,6 +520,9 @@ public class ReplicationPeersZKImpl extends ReplicationStateZKBase implements Re if (queuesClient == null) return; try { List replicators = queuesClient.getListOfReplicators(); + if (replicators == null || replicators.isEmpty()) { + return; + } for (String replicator : replicators) { List queueIds = queuesClient.getAllQueues(replicator); for (String queueId : queueIds) { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java index 050437353e0..0115b6f8127 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java @@ -98,7 +98,7 @@ public class ReplicationQueuesClientZKImpl extends ReplicationStateZKBase implem for (int retry = 0; ; retry++) { int v0 = getQueuesZNodeCversion(); List rss = getListOfReplicators(); - if (rss == null) { + if (rss == null || rss.isEmpty()) { LOG.debug("Didn't find any region server that replicates, won't prevent any deletions."); return ImmutableSet.of(); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java index dafc4f8f820..6d8962e9234 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java @@ -77,6 +77,9 @@ public class ReplicationZKNodeCleaner { Set peerIds = new HashSet<>(this.replicationPeers.getAllPeerIds()); try { List replicators = this.queuesClient.getListOfReplicators(); + if (replicators == null || replicators.isEmpty()) { + return undeletedQueues; + } for (String replicator : replicators) { List queueIds = this.queuesClient.getAllQueues(replicator); for (String queueId : queueIds) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java index 2bedbfd17b9..4bda75be366 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java @@ -323,6 +323,9 @@ public class DumpReplicationQueues extends Configured implements Tool { // Loops each peer on each RS and dumps the queues try { List regionservers = queuesClient.getListOfReplicators(); + if (regionservers == null || regionservers.isEmpty()) { + return sb.toString(); + } for (String regionserver : regionservers) { List queueIds = queuesClient.getAllQueues(regionserver); replicationQueues.init(regionserver);