Matteo Bertozzi created HBASE-13314:
---------------------------------------

             Summary: Fix NPE in HMaster.getClusterStatus()
                 Key: HBASE-13314
                 URL: https://issues.apache.org/jira/browse/HBASE-13314
             Project: HBase
          Issue Type: Bug
            Reporter: Matteo Bertozzi
            Assignee: Matteo Bertozzi
            Priority: Minor


On a test cluster we got a 
{noformat}
java.lang.NullPointerException
  at org.apache.hadoop.hbase.master.HMaster.getClusterStatus(HMaster.java:1742)
  at 
org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.chore(ClusterStatusChore.java:50)
  at org.apache.hadoop.hbase.Chore.run(Chore.java:87)
{noformat}

In HMaster.getClusterStatus() we have a couple of NPE.
listChildrenNoWatch() may return null if the node is not found
{code}
try {
  backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,
   this.zooKeeper.backupMasterAddressesZNode); <--- THIS MAY RETURN NULL
} catch (KeeperException e) {
  LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);
  backupMasterStrings = new ArrayList<String>(0);
}
List<ServerName> backupMasters = new ArrayList<ServerName>(
      backupMasterStrings.size()); <--- WE DON'T CHECK FOR NULL
{code}

then below, we build ClusterStatus with args that may be null
{code}
String clusterId = fileSystemManager != null ?
  fileSystemManager.getClusterId().toString() : null;
Map<String, RegionState> regionsInTransition = assignmentManager != null ?
  assignmentManager.getRegionStates().getRegionsInTransition() : null;
String[] coprocessors = cpHost != null ? getMasterCoprocessors() : null;
Map<ServerName, ServerLoad> onlineServers = null;
Set<ServerName> deadServers = null;
if (serverManager != null) {
  deadServers = serverManager.getDeadServers().copyServerNames();
  onlineServers = serverManager.getOnlineServers();
}
return new ClusterStatus(VersionInfo.getVersion(), clusterId,
  onlineServers, deadServers, serverName, backupMasters,
  regionsInTransition, coprocessors, balancerOn);
{code}
In ClusterStatus equals(), hashCode(), toString() we don't check for nulls



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to