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/05/10 02:48:51 UTC
hbase git commit: HBASE-20545 Improve performance of
BaseLoadBalancer.retainAssignment
Repository: hbase
Updated Branches:
refs/heads/master 32dd633b9 -> a67909d3d
HBASE-20545 Improve performance of BaseLoadBalancer.retainAssignment
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/a67909d3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a67909d3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a67909d3
Branch: refs/heads/master
Commit: a67909d3d64675f5f557e499cdcc8898fd33e31b
Parents: 32dd633
Author: Thiruvel Thirumoolan <th...@oath.com>
Authored: Wed May 9 11:47:48 2018 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Wed May 9 19:48:27 2018 -0700
----------------------------------------------------------------------
.../hbase/master/balancer/BaseLoadBalancer.java | 41 ++++++++++++++------
1 file changed, 29 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/a67909d3/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index 44dfe41..90f4e58 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -1413,6 +1413,9 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
// after the cluster restart.
Set<String> oldHostsNoLongerPresent = Sets.newTreeSet();
+ // If the old servers aren't present, lets assign those regions later.
+ List<RegionInfo> randomAssignRegions = Lists.newArrayList();
+
int numRandomAssignments = 0;
int numRetainedAssigments = 0;
@@ -1426,37 +1429,51 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
localServers = serversByHostname.get(oldServerName.getHostname());
}
if (localServers.isEmpty()) {
- // No servers on the new cluster match up with this hostname,
- // assign randomly.
- ServerName randomServer = randomAssignment(cluster, region, servers);
- assignments.get(randomServer).add(region);
- numRandomAssignments++;
- if (oldServerName != null) oldHostsNoLongerPresent.add(oldServerName.getHostname());
+ // No servers on the new cluster match up with this hostname, assign randomly, later.
+ randomAssignRegions.add(region);
+ if (oldServerName != null) {
+ oldHostsNoLongerPresent.add(oldServerName.getHostname());
+ }
} else if (localServers.size() == 1) {
// the usual case - one new server on same host
ServerName target = localServers.get(0);
assignments.get(target).add(region);
- cluster.doAssignRegion(region, target);
numRetainedAssigments++;
} else {
// multiple new servers in the cluster on this same host
if (localServers.contains(oldServerName)) {
assignments.get(oldServerName).add(region);
- cluster.doAssignRegion(region, oldServerName);
+ numRetainedAssigments++;
} else {
ServerName target = null;
- for (ServerName tmp: localServers) {
+ for (ServerName tmp : localServers) {
if (tmp.getPort() == oldServerName.getPort()) {
target = tmp;
+ assignments.get(tmp).add(region);
+ numRetainedAssigments++;
break;
}
}
if (target == null) {
- target = randomAssignment(cluster, region, localServers);
+ randomAssignRegions.add(region);
}
- assignments.get(target).add(region);
}
- numRetainedAssigments++;
+ }
+ }
+
+ // If servers from prior assignment aren't present, then lets do randomAssignment on regions.
+ if (randomAssignRegions.size() > 0) {
+ for (Map.Entry<ServerName, List<RegionInfo>> entry : assignments.entrySet()) {
+ ServerName sn = entry.getKey();
+ for (RegionInfo region : entry.getValue()) {
+ cluster.doAssignRegion(region, sn);
+ }
+ }
+ for (RegionInfo region : randomAssignRegions) {
+ ServerName target = randomAssignment(cluster, region, servers);
+ assignments.get(target).add(region);
+ cluster.doAssignRegion(region, target);
+ numRandomAssignments++;
}
}