Aditya Kishore created HBASE-6760:
-------------------------------------
Summary: 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira