Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java (revision 1576014) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java (working copy) @@ -930,20 +930,22 @@ for (int j = 0; j < numServers; j++) { // try all servers one by one ServerName serverName = servers.get((j + serverIdx) % numServers); if (!cluster.wouldLowerAvailability(region, serverName)) { - assignments.get(serverName).add(region); + List lst = assignments.get(serverName); + lst.add(region); cluster.doAssignRegion(region, serverName); serverIdx = (j + serverIdx + 1) % numServers; //remain from next server - break; } else { lastFewRegions.add(region); } + break; } } // just sprinkle the rest of the regions on random regionservers. The balanceCluster will // make it optimal later. we can end up with this if numReplicas > numServers. for (HRegionInfo region : lastFewRegions) { int i = RANDOM.nextInt(numServers); - assignments.get(servers.get(i)).add(region); + List lst = assignments.get(servers.get(i)); + lst.add(region); } return assignments; }