This is an automated email from the ASF dual-hosted git repository.

apurtell pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.4 by this push:
     new 4de3841  HBASE-25854 Remove redundant AM in-memory state changes in 
CatalogJanitor (#3234)
4de3841 is described below

commit 4de3841074615331bf077a75bf11bad12ee80528
Author: Andrew Purtell <[email protected]>
AuthorDate: Thu May 6 09:13:33 2021 -0700

    HBASE-25854 Remove redundant AM in-memory state changes in CatalogJanitor 
(#3234)
    
    In CatalogJanitor we schedule GCRegionProcedure to clean up both
    filesystem and in-memory state after a split, and
    GCMultipleMergedRegionsProcedure to do the same for merges. Both of these
    procedures clean up in-memory state, but CatalogJanitor also does this
    redundantly just after scheduling the procedures. The cleanup should be
    done in only one place. Presumably we are using the procedures to do it in
    a principled way. Remove the redundancy in CatalogJanitor and fix any
    follow on issues, like test failures.
    
    Signed-off-by: Duo Zhang <[email protected]>
    Signed-off-by: Michael Stack <[email protected]>
    Signed-off-by: Viraj Jasani <[email protected]>
---
 .../hadoop/hbase/master/janitor/CatalogJanitor.java | 10 ----------
 .../janitor/TestCatalogJanitorInMemoryStates.java   | 21 +++++++++++++++++++++
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/CatalogJanitor.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/CatalogJanitor.java
index 1674bb0..ef6145b 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/CatalogJanitor.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/CatalogJanitor.java
@@ -279,12 +279,6 @@ public class CatalogJanitor extends ScheduledChore {
         LOG.debug("Submitted procedure {} for merged region {}", 
mergeRegionProcedure,
           mergedRegion);
       }
-      // TODO: The above scheduled GCMultipleMergedRegionsProcedure does the 
below.
-      // Do we need this?
-      for (RegionInfo ri : parents) {
-        
this.services.getAssignmentManager().getRegionStates().deleteRegion(ri);
-        this.services.getServerManager().removeRegion(ri);
-      }
       return true;
     }
     return false;
@@ -355,10 +349,6 @@ public class CatalogJanitor extends ScheduledChore {
       if (LOG.isDebugEnabled()) {
         LOG.debug("Submitted procedure {} for split parent {}", 
gcRegionProcedure, parent);
       }
-      // Remove from in-memory states
-      // TODO: The above scheduled GCRegionProcedure does the below. Do we 
need this?
-      services.getAssignmentManager().getRegionStates().deleteRegion(parent);
-      services.getServerManager().removeRegion(parent);
       return true;
     } else {
       if (LOG.isDebugEnabled()) {
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java
index d5348fd..d608480 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.TableNameTestRule;
+import org.apache.hadoop.hbase.Waiter;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
@@ -43,6 +44,10 @@ import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.hadoop.hbase.master.assignment.AssignmentManager;
+import org.apache.hadoop.hbase.master.assignment.GCRegionProcedure;
+import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
+import org.apache.hadoop.hbase.procedure2.Procedure;
+import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
 import org.apache.hadoop.hbase.testclassification.MasterTests;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -119,6 +124,22 @@ public class TestCatalogJanitorInMemoryStates {
     Result r = MetaMockingUtil.getMetaTableRowResult(parent.getRegion(), null,
       daughters.get(0).getRegion(), daughters.get(1).getRegion());
     CatalogJanitor.cleanParent(master, parent.getRegion(), r);
+
+    // wait for procedures to complete
+    Waiter.waitFor(TEST_UTIL.getConfiguration(), 10 * 1000, new 
Waiter.Predicate<Exception>() {
+      @Override
+      public boolean evaluate() throws Exception {
+        ProcedureExecutor<MasterProcedureEnv> pe = 
master.getMasterProcedureExecutor();
+        for (Procedure<MasterProcedureEnv> proc: pe.getProcedures()) {
+          if (proc.getClass().isAssignableFrom(GCRegionProcedure.class) &&
+              proc.isFinished()) {
+            return true;
+          }          
+        }
+        return false;
+      }
+    });
+
     assertFalse("Parent region should have been removed from RegionStates",
       am.getRegionStates().isRegionInRegionStates(parent.getRegion()));
     assertFalse("Parent region should have been removed from ServerManager",

Reply via email to