Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (revision 1506389) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (working copy) @@ -60,7 +60,7 @@ private final AssignmentManager assignmentManager; private final TableLockManager tableLockManager; private final CatalogTracker catalogTracker; - private boolean retainAssignment = false; + private boolean skipTableStateCheck = false; private TableLock tableLock; public EnableTableHandler(Server server, byte [] tableName, @@ -72,7 +72,7 @@ this.catalogTracker = catalogTracker; this.assignmentManager = assignmentManager; this.tableLockManager = tableLockManager; - this.retainAssignment = skipTableStateCheck; + this.skipTableStateCheck = skipTableStateCheck; } public EnableTableHandler prepare() @@ -87,7 +87,7 @@ // Check if table exists if (!MetaReader.tableExists(catalogTracker, this.tableNameStr)) { // retainAssignment is true only during recovery. In normal case it is false - if (!this.retainAssignment) { + if (!this.skipTableStateCheck) { throw new TableNotFoundException(tableNameStr); } try { @@ -103,7 +103,7 @@ // the table at the same time. Ensure only the first request is honored // After that, no other requests can be accepted until the table reaches // DISABLED or ENABLED. - if (!retainAssignment) { + if (!skipTableStateCheck) { try { if (!this.assignmentManager.getZKTable().checkDisabledAndSetEnablingTable (this.tableNameStr)) { @@ -188,7 +188,7 @@ LOG.info("Table '" + this.tableNameStr + "' has " + countOfRegionsInTable + " regions, of which " + regionsCount + " are offline."); BulkEnabler bd = new BulkEnabler(this.server, regions, countOfRegionsInTable, - this.retainAssignment); + true); try { if (bd.bulkAssign()) { done = true; @@ -225,7 +225,7 @@ HRegionInfo hri = regionLocation.getFirst(); ServerName sn = regionLocation.getSecond(); if (!regionStates.isRegionInTransition(hri) && !regionStates.isRegionAssigned(hri)) { - if (this.retainAssignment && sn != null && serverManager.isServerOnline(sn)) { + if (sn != null && serverManager.isServerOnline(sn)) { this.assignmentManager.addPlan(hri.getEncodedName(), new RegionPlan(hri, null, sn)); } regions.add(hri); Index: hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (revision 1506781) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (working copy) @@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.MiniHBaseCluster; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.catalog.CatalogTracker; +import org.apache.hadoop.hbase.catalog.MetaReader; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.exceptions.InvalidFamilyOperationException; import org.apache.hadoop.hbase.exceptions.MasterNotRunningException; @@ -844,12 +845,12 @@ } /** - * Test round-robin assignment on enableTable. + * Test retain assignment on enableTable. * * @throws IOException */ @Test - public void testEnableTableRoundRobinAssignment() throws IOException { + public void testEnableTableRetainAssignment() throws IOException, InterruptedException { byte[] tableName = Bytes.toBytes("testEnableTableAssignment"); byte[][] splitKeys = { new byte[] { 1, 1, 1 }, new byte[] { 2, 2, 2 }, new byte[] { 3, 3, 3 }, new byte[] { 4, 4, 4 }, new byte[] { 5, 5, 5 }, @@ -866,37 +867,15 @@ + "but only found " + regions.size(), expectedRegions, regions.size()); // Disable table. admin.disableTable(tableName); - // Enable table, use round-robin assignment to assign regions. + // Enable table, use retain assignment to assign regions. admin.enableTable(tableName); - + Map regions2 = ht.getRegionLocations(); + // Check the assignment. - HTable metaTable = new HTable(TEST_UTIL.getConfiguration(), - HConstants.META_TABLE_NAME); - List regionInfos = admin.getTableRegions(tableName); - Map serverMap = new HashMap(); - for (HRegionInfo hri : regionInfos) { - Get get = new Get(hri.getRegionName()); - Result result = metaTable.get(get); - String server = Bytes.toString(result.getValue(HConstants.CATALOG_FAMILY, - HConstants.SERVER_QUALIFIER)); - Integer regioncount = serverMap.get(server); - if (regioncount == null) { - regioncount = 0; - } - regioncount++; - serverMap.put(server, regioncount); + assertEquals(regions.size(), regions2.size()); + for (Map.Entry entry : regions.entrySet()) { + assertEquals(regions2.get(entry.getKey()), entry.getValue()); } - metaTable.close(); - List> entryList = new ArrayList>( - serverMap.entrySet()); - Collections.sort(entryList, new Comparator>() { - public int compare(Map.Entry oa, - Map.Entry ob) { - return (oa.getValue() - ob.getValue()); - } - }); - assertTrue(entryList.size() == 3); - assertTrue((entryList.get(2).getValue() - entryList.get(0).getValue()) < 2); } /**