Index: hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditor.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditor.java (revision 1558507) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditor.java (working copy) @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -273,6 +274,23 @@ assertEquals(1, MetaReader.getTableRegions(CT, greaterName).size()); } + @Test + public void testOverwriteAndDelete() + throws IOException, InterruptedException { + TableName tableName = TableName.valueOf("overwriteAndDelete"); + List hris = new ArrayList(1); + hris.add(new HRegionInfo(tableName)); + + MetaEditor.addRegionsToMeta(CT, hris); + assertTrue(MetaReader.tableExists(CT, tableName)); + + MetaEditor.overwriteRegions(CT, hris); + assertTrue(MetaReader.tableExists(CT, tableName)); + + MetaEditor.deleteRegions(CT, hris); + assertFalse(MetaReader.tableExists(CT, tableName)); + } + private static List testGettingTableRegions(final CatalogTracker ct, final TableName name, final int regionCount) throws IOException, InterruptedException { Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1558507) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -1461,6 +1461,16 @@ balancerRan = plans != null; if (plans != null && !plans.isEmpty()) { for (RegionPlan plan: plans) { + ServerName sn = this.assignmentManager.getRegionStates() + .getRegionServerOfRegion(plan.getRegionInfo()); + if (sn == null || !sn.equals(plan.getSource())) { + // assignment of the underlying region may have changed + if (LOG.isDebugEnabled()) { + LOG.debug("skipping balance of " + plan.getRegionInfo() + ", it is not on " + + plan.getSource() + ". Instead it is on " + sn); + } + continue; + } LOG.info("balance " + plan); long balStartTime = System.currentTimeMillis(); //TODO: bulk assign Index: hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java (revision 1558507) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java (working copy) @@ -276,6 +276,9 @@ } putsToMetaTable(catalogTracker, puts); LOG.info("Added " + puts.size()); + if (LOG.isDebugEnabled()) { + LOG.debug("Added " + regionInfos); + } } /**