Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id BFBB2200CE6 for ; Wed, 2 Aug 2017 02:42:06 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id BCA751685C8; Wed, 2 Aug 2017 00:42:06 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 0C81E1685C1 for ; Wed, 2 Aug 2017 02:42:05 +0200 (CEST) Received: (qmail 57837 invoked by uid 500); 2 Aug 2017 00:42:05 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 57828 invoked by uid 99); 2 Aug 2017 00:42:05 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Aug 2017 00:42:05 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 143DAE117B; Wed, 2 Aug 2017 00:42:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: chia7712@apache.org To: commits@hbase.apache.org Message-Id: <8982192fa1ac46bfa615dff8478ce9ad@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: hbase git commit: HBASE-18480 The cost of BaseLoadBalancer.cluster is changed even if the rollback is done Date: Wed, 2 Aug 2017 00:42:05 +0000 (UTC) archived-at: Wed, 02 Aug 2017 00:42:06 -0000 Repository: hbase Updated Branches: refs/heads/branch-1 80b85a857 -> a35dc0ddd 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/a35dc0dd Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a35dc0dd Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a35dc0dd Branch: refs/heads/branch-1 Commit: a35dc0dddf4182122dc2fbbc0167f2182495a5ec Parents: 80b85a8 Author: Chia-Ping Tsai Authored: Wed Aug 2 08:41:53 2017 +0800 Committer: Chia-Ping Tsai Committed: Wed Aug 2 08:41:53 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/a35dc0dd/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 3bb12ce..f96f0eb 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 @@ -789,6 +789,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/a35dc0dd/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 0f29a1a..3047d28 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.ArrayList; import java.util.Arrays; @@ -316,6 +317,12 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { return balanceCluster(clusterState); } + @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. @@ -376,9 +383,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/a35dc0dd/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 125db06..ad459c1 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 @@ -279,6 +279,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