Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1311774) +++ 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,16 @@ public boolean isCarryingMeta(ServerName serverName) { return isCarryingRegion(serverName, HRegionInfo.FIRST_META_REGIONINFO); } + /** + * + * @param balancer + * 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. @@ -3106,7 +3116,7 @@ Map>> getAssignmentsByTable() { Map>> result = null; synchronized (this.regions) { - result = new HashMap>>(); + result = new TreeMap>>(); if (!this.master.getConfiguration(). getBoolean("hbase.master.loadbalance.bytable", true)) { result.put("ensemble", getAssignments()); Index: src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1311774) +++ src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -425,9 +425,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, @@ -584,12 +585,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");