Repository: hbase
Updated Branches:
  refs/heads/branch-2 1e7804634 -> ea7d51e12


HBASE-18109: Assign system tables first
This issue adds comments and a sort so system tables are queued first
(which will ensure they go out first). This should be good enough
along w/ existing scheduling mechanisms to ensure system/meta get
assigned first.

Signed-off-by: Michael Stack <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ea7d51e1
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ea7d51e1
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ea7d51e1

Branch: refs/heads/branch-2
Commit: ea7d51e1291bf3c6d5d6ef977f9abcea79c04a3e
Parents: 1e78046
Author: Yi Liang <[email protected]>
Authored: Wed Jun 7 12:37:41 2017 -0700
Committer: Michael Stack <[email protected]>
Committed: Thu Jun 8 13:26:42 2017 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/client/TableDescriptor.java    |  3 +++
 .../master/assignment/AssignmentManager.java    | 23 +++++++++++++++++++-
 .../procedure/MasterProcedureScheduler.java     |  4 +++-
 .../master/procedure/ServerCrashProcedure.java  |  5 +++--
 4 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/ea7d51e1/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
index fb78256..33e896c 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
@@ -161,6 +161,9 @@ public interface TableDescriptor {
    */
   long getMemStoreFlushSize();
 
+  // TODO: Currently this is used RPC scheduling only. Make it more generic 
than this; allow it
+  // to also be priority when scheduling procedures that pertain to this table 
scheduling first
+  // those tables with the highest priority (From Yi Liang over on 
HBASE-18109).
   int getPriority();
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea7d51e1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
index c10111f..a7fb743 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
@@ -1169,7 +1169,7 @@ public class AssignmentManager implements ServerListener {
 
     // assign offline regions
     st = System.currentTimeMillis();
-    for (HRegionInfo regionInfo: regionsToAssign) {
+    for (HRegionInfo regionInfo: getOrderedRegions(regionsToAssign)) {
       master.getMasterProcedureExecutor().submitProcedure(
         createAssignProcedure(regionInfo, false));
     }
@@ -1277,6 +1277,27 @@ public class AssignmentManager implements ServerListener 
{
     return new Pair<Integer, Integer>(ritCount, states.size());
   }
 
+  /**
+   * Used when assign regions, this method will put system regions in
+   * front of user regions
+   * @param regions
+   * @return A list of regions with system regions at front
+   */
+  public List<HRegionInfo> getOrderedRegions(
+      final List<HRegionInfo> regions) {
+    if (regions == null) return Collections.emptyList();
+
+    List<HRegionInfo> systemList = new ArrayList<>();
+    List<HRegionInfo> userList = new ArrayList<>();
+    for (HRegionInfo hri : regions) {
+      if (hri.isSystemTable()) systemList.add(hri);
+      else userList.add(hri);
+    }
+    // Append userList to systemList
+    systemList.addAll(userList);
+    return systemList;
+  }
+
   // 
============================================================================================
   //  TODO: Region State In Transition
   // 
============================================================================================

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea7d51e1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
index 1410748..575fa80 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
@@ -121,7 +121,9 @@ public class MasterProcedureScheduler extends 
AbstractProcedureScheduler {
   /**
    * Table priority is used when scheduling procedures from {@link 
#tableRunQueue}. A TableQueue
    * with priority 2 will get its procedures scheduled at twice the rate as 
compared to
-   * TableQueue with priority 1.
+   * TableQueue with priority 1. This should be enough to ensure system/meta 
get assigned out
+   * before user-space tables. HBASE-18109 is where we conclude what is here 
is good enough.
+   * Lets open new issue if we find it not enough.
    */
   private static class TablePriorities {
     final int metaTablePriority;

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea7d51e1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
index e0f0dbe..c6cd861 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
@@ -186,8 +186,9 @@ implements ServerProcedureInterface {
               "; cycles=" + this.cycles);
           }
           handleRIT(env, regionsOnCrashedServer);
-          addChildProcedure(env.getAssignmentManager().
-              createAssignProcedures(regionsOnCrashedServer, true));
+          AssignmentManager am = env.getAssignmentManager();
+          addChildProcedure(am.
+              
createAssignProcedures(am.getOrderedRegions(regionsOnCrashedServer), true));
         }
         setNextState(ServerCrashState.SERVER_CRASH_FINISH);
         break;

Reply via email to