hbase git commit: HBASE-18014 A case of Region remain unassigned when table enabled (Allan Yang)
Repository: hbase Updated Branches: refs/heads/branch-1 f81486445 -> 0a4528225 HBASE-18014 A case of Region remain unassigned when table enabled (Allan Yang) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0a452822 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0a452822 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0a452822 Branch: refs/heads/branch-1 Commit: 0a4528225c71cf515b69ab194779107d24de9852 Parents: f814864 Author: Andrew Purtell Authored: Fri May 12 16:59:38 2017 -0700 Committer: Andrew Purtell Committed: Fri May 12 16:59:38 2017 -0700 -- .../hadoop/hbase/master/AssignmentManager.java | 2 ++ .../apache/hadoop/hbase/client/TestAdmin2.java | 35 2 files changed, 37 insertions(+) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/0a452822/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index fe94f42..0a28967 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -1587,6 +1587,8 @@ public class AssignmentManager extends ZooKeeperListener { EventType.RS_ZK_REGION_CLOSED, EventType.M_ZK_REGION_OFFLINE); } replicasToClose.remove(regionInfo); +//Set servername in regionstate to null, see HBASE-18014 +getRegionStates().updateRegionState(regionInfo, State.OFFLINE, null); regionOffline(regionInfo); } http://git-wip-us.apache.org/repos/asf/hbase/blob/0a452822/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java -- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java index 051998b..72f41a76 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java @@ -88,6 +88,12 @@ public class TestAdmin2 { TEST_UTIL.getConfiguration().setInt("hbase.regionserver.metahandler.count", 30); TEST_UTIL.getConfiguration().setBoolean( "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=3) 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", 3); TEST_UTIL.startMiniCluster(3); } @@ -790,4 +796,33 @@ public class TestAdmin2 { // Current state should be the original state again assertEquals(initialState, admin.isNormalizerEnabled()); } + + /** + * a UT for HBASE-18014 + * @throws Exception + */ + @Test (timeout=3) + 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), 1); + } }
hbase git commit: HBASE-18014 A case of Region remain unassigned when table enabled (Allan Yang)
Repository: hbase Updated Branches: refs/heads/branch-1.3 72edf521c -> 36ebe05fc HBASE-18014 A case of Region remain unassigned when table enabled (Allan Yang) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/36ebe05f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/36ebe05f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/36ebe05f Branch: refs/heads/branch-1.3 Commit: 36ebe05fc9013fe27ba0eca410ed11e5c5b112cb Parents: 72edf52 Author: Andrew Purtell Authored: Fri May 12 16:59:38 2017 -0700 Committer: Andrew Purtell Committed: Fri May 12 17:46:12 2017 -0700 -- .../hadoop/hbase/master/AssignmentManager.java | 2 ++ .../apache/hadoop/hbase/client/TestAdmin2.java | 35 2 files changed, 37 insertions(+) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/36ebe05f/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index 1e19397..d247b11 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -1561,6 +1561,8 @@ public class AssignmentManager extends ZooKeeperListener { EventType.RS_ZK_REGION_CLOSED, EventType.M_ZK_REGION_OFFLINE); } replicasToClose.remove(regionInfo); +//Set servername in regionstate to null, see HBASE-18014 +getRegionStates().updateRegionState(regionInfo, State.OFFLINE, null); regionOffline(regionInfo); } http://git-wip-us.apache.org/repos/asf/hbase/blob/36ebe05f/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java -- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java index 051998b..72f41a76 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin2.java @@ -88,6 +88,12 @@ public class TestAdmin2 { TEST_UTIL.getConfiguration().setInt("hbase.regionserver.metahandler.count", 30); TEST_UTIL.getConfiguration().setBoolean( "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=3) 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", 3); TEST_UTIL.startMiniCluster(3); } @@ -790,4 +796,33 @@ public class TestAdmin2 { // Current state should be the original state again assertEquals(initialState, admin.isNormalizerEnabled()); } + + /** + * a UT for HBASE-18014 + * @throws Exception + */ + @Test (timeout=3) + 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), 1); + } }