You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/08/08 09:26:10 UTC
[hbase] branch branch-2.0 updated: HBASE-22808 HBCK Report showed
the offline regions which belong to disabled table (#465)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new d99dccc HBASE-22808 HBCK Report showed the offline regions which belong to disabled table (#465)
d99dccc is described below
commit d99dccc152a6f38618ad38566dd872c9d2f920e9
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Thu Aug 8 03:57:17 2019 -0500
HBASE-22808 HBCK Report showed the offline regions which belong to disabled table (#465)
Signed-off-by: Stack <st...@apache.org>
---
.../org/apache/hadoop/hbase/master/HbckChore.java | 7 +++++
.../hbase/master/assignment/TestHbckChore.java | 36 +++++++++++++++++++++-
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
index 69a8d53..e2c4008 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
@@ -31,6 +31,7 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.ScheduledChore;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.RegionInfo;
+import org.apache.hadoop.hbase.client.TableState;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.FSUtils;
import org.apache.hadoop.hbase.util.HbckRegionInfo;
@@ -146,6 +147,12 @@ public class HbckChore extends ScheduledChore {
master.getAssignmentManager().getRegionStates().getRegionStates();
for (RegionState regionState : regionStates) {
RegionInfo regionInfo = regionState.getRegion();
+ // Because the inconsistent regions are not absolutely right, only skip the offline regions
+ // which belong to disabled table.
+ if (master.getTableStateManager()
+ .isTableState(regionInfo.getTable(), TableState.State.DISABLED)) {
+ continue;
+ }
HbckRegionInfo.MetaEntry metaEntry =
new HbckRegionInfo.MetaEntry(regionInfo, regionState.getServerName(),
regionState.getStamp());
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
index 7dfe979..eba2fe2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
@@ -33,7 +33,9 @@ import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.RegionInfoBuilder;
+import org.apache.hadoop.hbase.client.TableState;
import org.apache.hadoop.hbase.master.HbckChore;
+import org.apache.hadoop.hbase.master.TableStateManager;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -43,6 +45,7 @@ import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -139,7 +142,7 @@ public class TestHbckChore extends TestAssignmentManagerBase {
assertTrue(reportedRegionServers.contains(locationInMeta));
assertTrue(reportedRegionServers.contains(anotherServer));
- // Reported right region location. Then not in problematic regions.
+ // Reported right region location, then not in inconsistent regions.
am.reportOnlineRegions(anotherServer, Collections.EMPTY_SET);
hbckChore.choreForTesting();
inconsistentRegions = hbckChore.getInconsistentRegions();
@@ -147,6 +150,37 @@ public class TestHbckChore extends TestAssignmentManagerBase {
}
@Test
+ public void testForDisabledTable() throws Exception {
+ TableName tableName = TableName.valueOf("testForDisabledTable");
+ RegionInfo hri = createRegionInfo(tableName, 1);
+ String regionName = hri.getEncodedName();
+ rsDispatcher.setMockRsExecutor(new GoodRsExecutor());
+ Future<byte[]> future = submitProcedure(am.createAssignProcedure(hri));
+ waitOnFuture(future);
+
+ List<ServerName> serverNames = master.getServerManager().getOnlineServersList();
+ assertEquals(NSERVERS, serverNames.size());
+
+ hbckChore.choreForTesting();
+ Map<String, Pair<ServerName, List<ServerName>>> inconsistentRegions =
+ hbckChore.getInconsistentRegions();
+ assertTrue(inconsistentRegions.containsKey(regionName));
+ Pair<ServerName, List<ServerName>> pair = inconsistentRegions.get(regionName);
+ ServerName locationInMeta = pair.getFirst();
+ List<ServerName> reportedRegionServers = pair.getSecond();
+ assertTrue(serverNames.contains(locationInMeta));
+ assertEquals(0, reportedRegionServers.size());
+
+ // Set table state to disabled, then not in inconsistent regions.
+ TableStateManager tableStateManager = master.getTableStateManager();
+ Mockito.when(tableStateManager.isTableState(tableName, TableState.State.DISABLED)).
+ thenReturn(true);
+ hbckChore.choreForTesting();
+ inconsistentRegions = hbckChore.getInconsistentRegions();
+ assertFalse(inconsistentRegions.containsKey(regionName));
+ }
+
+ @Test
public void testOrphanRegionsOnFS() throws Exception {
TableName tableName = TableName.valueOf("testOrphanRegionsOnFS");
RegionInfo regionInfo = RegionInfoBuilder.newBuilder(tableName).build();