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:04:13 UTC

[hbase] branch branch-2.2 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.2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.2 by this push:
     new 1a59987  HBASE-22808 HBCK Report showed the offline regions which belong to disabled table (#465)
1a59987 is described below

commit 1a599874e1d7725db63300148a428b3be4dd23cc
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>
---
 .../apache/hadoop/hbase/master/CatalogJanitor.java |  4 +++
 .../org/apache/hadoop/hbase/master/HbckChore.java  |  7 +++++
 .../hbase/master/assignment/TestHbckChore.java     | 36 +++++++++++++++++++++-
 3 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java
index c5cdded..60dd1bf 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java
@@ -702,6 +702,10 @@ public class CatalogJanitor extends ScheduledChore {
         if (sn == null) {
           continue;
         }
+        // skip the offline regions which belong to disabled table.
+        if (isTableDisabled(location.getRegion())) {
+          continue;
+        }
         ServerManager.ServerLiveState state = this.services.getServerManager().
             isServerKnownAndOnline(sn);
         switch (state) {
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 683b596..756e60a 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(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();