Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Invalid
-
None
-
None
-
None
Description
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.
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()) { ....
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.