You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2017/08/02 00:30:57 UTC
hbase git commit: HBASE-18480 The cost of BaseLoadBalancer.cluster is
changed even if the rollback is done
Repository: hbase
Updated Branches:
refs/heads/branch-1.2 6cadd1def -> 5f6cca996
HBASE-18480 The cost of BaseLoadBalancer.cluster is changed even if the rollback is done
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5f6cca99
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5f6cca99
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5f6cca99
Branch: refs/heads/branch-1.2
Commit: 5f6cca9967f5d77b46d1dda493b290e2935933c9
Parents: 6cadd1d
Author: Chia-Ping Tsai <ch...@gmail.com>
Authored: Wed Aug 2 08:30:29 2017 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Wed Aug 2 08:30:29 2017 +0800
----------------------------------------------------------------------
.../hbase/master/balancer/BaseLoadBalancer.java | 1 +
.../master/balancer/StochasticLoadBalancer.java | 11 +++++++---
.../balancer/TestStochasticLoadBalancer.java | 21 ++++++++++++++++++++
3 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/5f6cca99/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 1eda305..842c41c 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
@@ -650,6 +650,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
} else if (oldServer >= 0 && (numRegionsPerServerPerTable[oldServer][tableIndex] + 1)
== numMaxRegionsPerTable[tableIndex]) {
//recompute maxRegionsPerTable since the previous value was coming from the old server
+ numMaxRegionsPerTable[tableIndex] = 0;
for (int serverIndex = 0 ; serverIndex < numRegionsPerServerPerTable.length; serverIndex++) {
if (numRegionsPerServerPerTable[serverIndex][tableIndex] > numMaxRegionsPerTable[tableIndex]) {
numMaxRegionsPerTable[tableIndex] = numRegionsPerServerPerTable[serverIndex][tableIndex];
http://git-wip-us.apache.org/repos/asf/hbase/blob/5f6cca99/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
index 2ba3733..00c6451 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collection;
@@ -215,6 +216,12 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
return false;
}
+ @VisibleForTesting
+ Cluster.Action nextAction(Cluster cluster) {
+ return candidateGenerators[(RANDOM.nextInt(candidateGenerators.length))]
+ .generate(cluster);
+ }
+
/**
* Given the cluster state this will try and approach an optimal balance. This
* should always approach the optimal state given enough steps.
@@ -266,9 +273,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
long step;
for (step = 0; step < computedMaxSteps; step++) {
- int generatorIdx = RANDOM.nextInt(candidateGenerators.length);
- CandidateGenerator p = candidateGenerators[generatorIdx];
- Cluster.Action action = p.generate(cluster);
+ Cluster.Action action = nextAction(cluster);
if (action.type == Type.NULL) {
continue;
http://git-wip-us.apache.org/repos/asf/hbase/blob/5f6cca99/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java
index 7ee9fa5..8ddb6b9 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java
@@ -149,6 +149,27 @@ public class TestStochasticLoadBalancer extends BalancerTestBase {
}
@Test
+ public void testCostAfterUndoAction() {
+ final int runs = 10;
+ loadBalancer.setConf(conf);
+ for (int[] mockCluster : clusterStateMocks) {
+ BaseLoadBalancer.Cluster cluster = mockCluster(mockCluster);
+ loadBalancer.initCosts(cluster);
+ for (int i = 0; i != runs; ++i) {
+ final double expectedCost = loadBalancer.computeCost(cluster, Double.MAX_VALUE);
+ Cluster.Action action = loadBalancer.nextAction(cluster);
+ cluster.doAction(action);
+ loadBalancer.updateCostsWithAction(cluster, action);
+ Cluster.Action undoAction = action.undoAction();
+ cluster.doAction(undoAction);
+ loadBalancer.updateCostsWithAction(cluster, undoAction);
+ final double actualCost = loadBalancer.computeCost(cluster, Double.MAX_VALUE);
+ assertEquals(expectedCost, actualCost, 0);
+ }
+ }
+ }
+
+ @Test
public void testTableSkewCost() {
Configuration conf = HBaseConfiguration.create();
StochasticLoadBalancer.CostFunction