[ https://issues.apache.org/jira/browse/HBASE-19350?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chia-Ping Tsai updated HBASE-19350: ----------------------------------- Description: If the size of RegionsInTransition is zero, the list passed to {{ClusterStatus}} will be null. {code:title=ClusterStatus.java} Set<RegionState> rit = null; if (!proto.getRegionsInTransitionList().isEmpty()) { rit = new HashSet<RegionState>(proto.getRegionsInTransitionList().size()); for (RegionInTransition region : proto.getRegionsInTransitionList()) { RegionState value = RegionState.convert(region.getRegionState()); rit.add(value); } } {code} It causes NPE if someone try to do the for-each work. The HBaseFsckRepair is a real-life example. {code:title=HBaseFsckRepair.java} for (RegionState rs: admin.getClusterStatus().getRegionsInTransition()) { if (rs.getRegion().equals(region)) { inTransition = true; break; } } {code} branch-2/master don't have this issue as the list of RegionsInTransition passed to {{ClusterStatus}} never be null. {code:title=ProtobufUtil.java} List<RegionState> rit = new ArrayList<>(proto.getRegionsInTransitionList().size()); for (RegionInTransition region : proto.getRegionsInTransitionList()) { RegionState value = RegionState.convert(region.getRegionState()); rit.add(value); } {code} was: If the size of RegionsInTransition is zero, the list passed to {{ClusterStatus}} will be null. {code:title=ClusterStatus.java} Set<RegionState> rit = null; if (!proto.getRegionsInTransitionList().isEmpty()) { rit = new HashSet<RegionState>(proto.getRegionsInTransitionList().size()); for (RegionInTransition region : proto.getRegionsInTransitionList()) { RegionState value = RegionState.convert(region.getRegionState()); rit.add(value); } } {code} It causes NPE if someone try to do the for-each work. The HBaseFsckRepair is a real-life example. {code:title=HBaseFsckRepair.java} for (RegionState rs: admin.getClusterStatus().getRegionsInTransition()) { if (rs.getRegion().equals(region)) { inTransition = true; break; } } {code} branch-2/master don't have this issue as the list of RegionsInTransition passed to {{ClusterStatus}} never be null. {code:title=ProtobufUtil.java} List<RegionState> rit = new ArrayList<>(proto.getRegionsInTransitionList().size()); for (RegionInTransition region : proto.getRegionsInTransitionList()) { RegionState value = RegionState.convert(region.getRegionState()); rit.add(value); } {code} However, the patch will be committed to branch-2/master for consistency. > TestMetaWithReplicas is flaky in branch-1 > ----------------------------------------- > > Key: HBASE-19350 > URL: https://issues.apache.org/jira/browse/HBASE-19350 > Project: HBase > Issue Type: Bug > Reporter: Chia-Ping Tsai > Assignee: Chia-Ping Tsai > Fix For: 1.4.0, 2.0.0-beta-1 > > > If the size of RegionsInTransition is zero, the list passed to > {{ClusterStatus}} will be null. > {code:title=ClusterStatus.java} > Set<RegionState> rit = null; > if (!proto.getRegionsInTransitionList().isEmpty()) { > rit = new > HashSet<RegionState>(proto.getRegionsInTransitionList().size()); > for (RegionInTransition region : proto.getRegionsInTransitionList()) { > RegionState value = RegionState.convert(region.getRegionState()); > rit.add(value); > } > } > {code} > It causes NPE if someone try to do the for-each work. The HBaseFsckRepair is > a real-life example. > {code:title=HBaseFsckRepair.java} > for (RegionState rs: > admin.getClusterStatus().getRegionsInTransition()) { > if (rs.getRegion().equals(region)) { > inTransition = true; > break; > } > } > {code} > branch-2/master don't have this issue as the list of RegionsInTransition > passed to {{ClusterStatus}} never be null. > {code:title=ProtobufUtil.java} > List<RegionState> rit = > new ArrayList<>(proto.getRegionsInTransitionList().size()); > for (RegionInTransition region : proto.getRegionsInTransitionList()) { > RegionState value = RegionState.convert(region.getRegionState()); > rit.add(value); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)