diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index f3d4dfb292d3..61b50ffa22a2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -4142,6 +4142,7 @@ public RSGroupInfoManager getRSGroupInfoManager() { */ public CompactionState getCompactionState(final TableName tableName) { CompactionState compactionState = CompactionState.NONE; + List notOnlineRegions = new ArrayList<>(); try { List regions = assignmentManager.getRegionStates().getRegionsOfTable(tableName); for (RegionInfo regionInfo : regions) { @@ -4155,6 +4156,13 @@ public CompactionState getCompactionState(final TableName tableName) { continue; } RegionMetrics regionMetrics = sl.getRegionMetrics().get(regionInfo.getRegionName()); + if (regionMetrics == null) { + String regionName = regionInfo.getRegionNameAsString(); + LOG.error("Can not get compaction details for the region: " + regionName + + " , it may be disabled or in transition."); + notOnlineRegions.add(regionName); + continue; + } if (regionMetrics.getCompactionState() == CompactionState.MAJOR) { if (compactionState == CompactionState.MINOR) { compactionState = CompactionState.MAJOR_AND_MINOR; @@ -4169,6 +4177,9 @@ public CompactionState getCompactionState(final TableName tableName) { } } } + if (notOnlineRegions.size() > 0 && compactionState == CompactionState.NONE) { + compactionState = null; + } } catch (Exception e) { compactionState = null; LOG.error("Exception when get compaction state for " + tableName.getNameAsString(), e);