Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1324881) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -1818,8 +1818,7 @@ if (servers.isEmpty()) return null; - RegionPlan randomPlan = new RegionPlan(state.getRegion(), null, - balancer.randomAssignment(state.getRegion(), servers)); + RegionPlan randomPlan = null; boolean newPlan = false; RegionPlan existingPlan = null; @@ -1837,6 +1836,8 @@ || existingPlan.getDestination() == null || drainingServers.contains(existingPlan.getDestination())) { newPlan = true; + randomPlan = new RegionPlan(state.getRegion(), null, + balancer.randomAssignment(state.getRegion(), servers)); this.regionPlans.put(encodedName, randomPlan); } } @@ -2983,7 +2984,15 @@ public boolean isCarryingMeta(ServerName serverName) { return isCarryingRegion(serverName, HRegionInfo.FIRST_META_REGIONINFO); } + /** + * Set the balancer from the master + * @param balancer to set + */ + public void setBalancer(LoadBalancer balancer) { + this.balancer = balancer; + } + /** * Check if the shutdown server carries the specific region. * We have a bunch of places that store region location * Those values aren't consistent. There is a delay of notification. Index: src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1324881) +++ src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -426,9 +426,10 @@ this, conf.getInt("hbase.master.catalog.timeout", Integer.MAX_VALUE)); this.catalogTracker.start(); + this.balancer = LoadBalancerFactory.getLoadBalancer(conf); this.assignmentManager = new AssignmentManager(this, serverManager, this.catalogTracker, this.executorService, this.metrics); - this.balancer = LoadBalancerFactory.getLoadBalancer(conf); + this.assignmentManager.setBalancer(this.balancer); zooKeeper.registerListenerFirst(assignmentManager); this.regionServerTracker = new RegionServerTracker(zooKeeper, this, @@ -585,12 +586,12 @@ org.apache.hadoop.hbase.catalog.MetaMigrationRemovingHTD. updateMetaWithNewHRI(this); + this.balancer.setMasterServices(this); // Fixup assignment manager status status.setStatus("Starting assignment manager"); this.assignmentManager.joinCluster(onlineServers); this.balancer.setClusterStatus(getClusterStatus()); - this.balancer.setMasterServices(this); // Fixing up missing daughters if any status.setStatus("Fixing up missing daughters");