Index: src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (revision 1188014) +++ src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (working copy) @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.master.handler; import java.io.IOException; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.NavigableMap; @@ -86,7 +87,6 @@ if (eventType.isOnlineSchemaChangeSupported() && this.masterServices. getAssignmentManager().getZKTable(). isEnabledTable(Bytes.toString(tableName))) { - this.masterServices.getAssignmentManager().setRegionsToReopen(hris); if (reOpenAllRegions(hris)) { LOG.info("Completed table operation " + eventType + " on table " + Bytes.toString(tableName)); @@ -108,17 +108,27 @@ TreeMap> serverToRegions = Maps .newTreeMap(); NavigableMap hriHserverMapping = table.getRegionLocations(); - + List reRegions = new ArrayList(); for (HRegionInfo hri : regions) { ServerName rsLocation = hriHserverMapping.get(hri); + + // Skip the offlined split parent region + // See HBASE-4578 for more information. + if (null == rsLocation) { + LOG.info("Skip " + hri); + continue; + } if (!serverToRegions.containsKey(rsLocation)) { LinkedList hriList = Lists.newLinkedList(); serverToRegions.put(rsLocation, hriList); } + reRegions.add(hri); serverToRegions.get(rsLocation).add(hri); } - LOG.info("Reopening " + regions.size() + " regions on " + + LOG.info("Reopening " + reRegions.size() + " regions on " + serverToRegions.size() + " region servers."); + this.masterServices.getAssignmentManager().setRegionsToReopen(reRegions); BulkReOpen bulkReopen = new BulkReOpen(this.server, serverToRegions, this.masterServices.getAssignmentManager()); while (true) {