HBASE-18014 A case of Region remain unassigned when table enabled (Allan Yang)
This commit is contained in:
parent
f81486445c
commit
0a4528225c
|
@ -1587,6 +1587,8 @@ public class AssignmentManager extends ZooKeeperListener {
|
||||||
EventType.RS_ZK_REGION_CLOSED, EventType.M_ZK_REGION_OFFLINE);
|
EventType.RS_ZK_REGION_CLOSED, EventType.M_ZK_REGION_OFFLINE);
|
||||||
}
|
}
|
||||||
replicasToClose.remove(regionInfo);
|
replicasToClose.remove(regionInfo);
|
||||||
|
//Set servername in regionstate to null, see HBASE-18014
|
||||||
|
getRegionStates().updateRegionState(regionInfo, State.OFFLINE, null);
|
||||||
regionOffline(regionInfo);
|
regionOffline(regionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,12 @@ public class TestAdmin2 {
|
||||||
TEST_UTIL.getConfiguration().setInt("hbase.regionserver.metahandler.count", 30);
|
TEST_UTIL.getConfiguration().setInt("hbase.regionserver.metahandler.count", 30);
|
||||||
TEST_UTIL.getConfiguration().setBoolean(
|
TEST_UTIL.getConfiguration().setBoolean(
|
||||||
"hbase.master.enabletable.roundrobin", true);
|
"hbase.master.enabletable.roundrobin", true);
|
||||||
|
//Set a very short keeptime for processedServers, see HBASE-18014
|
||||||
|
TEST_UTIL.getConfiguration().setLong("hbase.master.maximum.logsplit.keeptime", 100);
|
||||||
|
//HBASE-18014, don't Know why @Test (timeout=30000) attribute doesn't work when
|
||||||
|
//calling enableTable.So I have to set the sync wait time to a short time to timeout
|
||||||
|
//the test of testEnableTableAfterprocessedServersCleaned
|
||||||
|
TEST_UTIL.getConfiguration().setInt("hbase.client.sync.wait.timeout.msec", 30000);
|
||||||
TEST_UTIL.startMiniCluster(3);
|
TEST_UTIL.startMiniCluster(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -790,4 +796,33 @@ public class TestAdmin2 {
|
||||||
// Current state should be the original state again
|
// Current state should be the original state again
|
||||||
assertEquals(initialState, admin.isNormalizerEnabled());
|
assertEquals(initialState, admin.isNormalizerEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a UT for HBASE-18014
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Test (timeout=30000)
|
||||||
|
public void testEnableTableAfterprocessedServersCleaned() throws Exception {
|
||||||
|
String TABLENAME = "testEnableTableAfterprocessedServersCleaned";
|
||||||
|
HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();
|
||||||
|
HTableDescriptor hds = new HTableDescriptor(TableName.valueOf(TABLENAME));
|
||||||
|
HColumnDescriptor hcs = new HColumnDescriptor("cf".getBytes());
|
||||||
|
hds.addFamily(hcs);
|
||||||
|
admin.createTable(hds);
|
||||||
|
HRegionServer server = TEST_UTIL.getHBaseCluster().getRegionServer(0);
|
||||||
|
ServerName serverName = server.getServerName();
|
||||||
|
HRegionInfo region = admin.getTableRegions(TableName.valueOf(TABLENAME)).get(0);
|
||||||
|
//move the region to the first server so we can abort this rs
|
||||||
|
admin.move(region.getEncodedNameAsBytes(), Bytes.toBytes(serverName.toString()));
|
||||||
|
TEST_UTIL.waitUntilAllRegionsAssigned(TableName.valueOf(TABLENAME));
|
||||||
|
admin.disableTable(TABLENAME);
|
||||||
|
server.abort("abort");
|
||||||
|
//wait for SSH to handle server shutdown
|
||||||
|
Thread.sleep(5000);
|
||||||
|
//trigger a clean of processedServers
|
||||||
|
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
|
||||||
|
.getRegionStates().logSplit(ServerName.valueOf("fakeServer", 5000, 0));
|
||||||
|
admin.enableTable(TABLENAME);
|
||||||
|
TEST_UTIL.waitUntilAllRegionsAssigned(TableName.valueOf(TABLENAME), 10000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue