You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2018/03/14 16:23:27 UTC

hbase git commit: HBASE-20186 Improve RSGroupBasedLoadBalancer#balanceCluster() to be more efficient when calculating cluster state for each rsgroup

Repository: hbase
Updated Branches:
  refs/heads/master 84ee32c72 -> 37342220b


HBASE-20186 Improve RSGroupBasedLoadBalancer#balanceCluster() to be more efficient when calculating cluster state for each rsgroup

Signed-off-by: tedyu <yu...@gmail.com>


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

Branch: refs/heads/master
Commit: 37342220b4468b868933b1acc0af307cedb80b6e
Parents: 84ee32c
Author: Xiang LI <li...@freewheel.tv>
Authored: Wed Mar 14 01:08:26 2018 +0800
Committer: tedyu <yu...@gmail.com>
Committed: Wed Mar 14 09:23:18 2018 -0700

----------------------------------------------------------------------
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.java | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/37342220/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
index b88158d..9eb048f 100644
--- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
+++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
@@ -129,17 +129,23 @@ public class RSGroupBasedLoadBalancer implements RSGroupableBalancer {
     // for the regions which have been placed according to the region server group assignment
     // into the movement list
     try {
-      List<RSGroupInfo> rsgi = rsGroupInfoManager.listRSGroups();
-      for (RSGroupInfo info: rsgi) {
+      // Record which region servers have been processed,so as to skip them after processed
+      HashSet<ServerName> processedServers = new HashSet<>();
+
+      // For each rsgroup
+      for (RSGroupInfo rsgroup : rsGroupInfoManager.listRSGroups()) {
         Map<ServerName, List<RegionInfo>> groupClusterState = new HashMap<>();
         Map<TableName, Map<ServerName, List<RegionInfo>>> groupClusterLoad = new HashMap<>();
-        for (Address sName : info.getServers()) {
-          for(ServerName curr: clusterState.keySet()) {
-            if(curr.getAddress().equals(sName)) {
-              groupClusterState.put(curr, correctedState.get(curr));
-            }
+        for (ServerName server : clusterState.keySet()) { // for each region server
+          if (!processedServers.contains(server) // server is not processed yet
+              && rsgroup.containsServer(server.getAddress())) { // server belongs to this rsgroup
+            List<RegionInfo> regionsOnServer = correctedState.get(server);
+            groupClusterState.put(server, regionsOnServer);
+
+            processedServers.add(server);
           }
         }
+
         groupClusterLoad.put(HConstants.ENSEMBLE_TABLE_NAME, groupClusterState);
         this.internalBalancer.setClusterLoad(groupClusterLoad);
         List<RegionPlan> groupPlans = this.internalBalancer