[ 
https://issues.apache.org/jira/browse/HBASE-6760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14268955#comment-14268955
 ] 

Cosmin Lehene commented on HBASE-6760:
--------------------------------------

[~adityakishore], based on [~enis]'s comment in master this seems as the 
intended behavior:

{code}
    // If LoadBalancer did not generate any plans, it means the cluster is 
already balanced.
    // Return true indicating a success.
    return true;
{code}

Also there's no more balancerRan variable.

Also I believe {{LoadBalancer.balanceCluster(assignments);}} should be named 
{{computeBalancePlans}} or something as it's the {{AssignmentManager}} that 
does the actual balancing...

> HMaster.balance() returns 'true' even if rebalancing plan is empty and the 
> balancer does not run
> ------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-6760
>                 URL: https://issues.apache.org/jira/browse/HBASE-6760
>             Project: HBase
>          Issue Type: Bug
>          Components: master
>            Reporter: Aditya Kishore
>            Assignee: Aditya Kishore
>            Priority: Minor
>
> The issue seems to exists due to oversight during the rewrite. In line 1289, 
> the variable 'plans' is created as a 'new ArrayList<RegionPlan>()' and then 
> in line 1298, balancerRan is calculated as (plans != null) which for obvious 
> reason, will always return true.
> {code:title=HMaster.java (trunk:1383496)}
> ....
> 1289        List<RegionPlan> plans = new ArrayList<RegionPlan>();
> 1290        //Give the balancer the current cluster state.
> 1291        this.balancer.setClusterStatus(getClusterStatus());
> 1292        for (Map<ServerName, List<HRegionInfo>> assignments : 
> assignmentsByTable.values()) {
> 1293          List<RegionPlan> partialPlans = 
> this.balancer.balanceCluster(assignments);
> 1294          if (partialPlans != null) plans.addAll(partialPlans);
> 1295        }
> 1296        int rpCount = 0;  // number of RegionPlans balanced so far
> 1297        long totalRegPlanExecTime = 0;
> 1298        balancerRan = plans != null;
> 1299        if (plans != null && !plans.isEmpty()) {
> ....
> {code}
> A simple fix is to initialize 'balancerRan' to 'false', remove "balancerRan = 
> plans != null" and add "balancerRan = true" after "if (plans != null && 
> !plans.isEmpty()) {".
> However, a question remains that should we call "this.cpHost.postBalance();" 
> if the balancer did not run at this point?
> I'll attach the patch shortly if I get a confirmation on this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to