Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1082249) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -1343,13 +1334,13 @@ * @throws InterruptedException * @throws IOException */ - public void assignUserRegions(List regions, List servers) throws IOException, InterruptedException { + public void assignUserRegions(HRegionInfo[] regions, List servers) throws IOException, InterruptedException { if (regions == null) return; Map> bulkPlan = null; // Generate a round-robin bulk assignment plan bulkPlan = LoadBalancer.roundRobinAssignment(regions, servers); - LOG.info("Bulk assigning " + regions.size() + " region(s) round-robin across " + + LOG.info("Bulk assigning " + regions.length + " region(s) round-robin across " + servers.size() + " server(s)"); // Use fixed count thread pool assigning. BulkAssigner ba = new BulkStartupAssigner(this.master, bulkPlan, this); @@ -1385,7 +1376,7 @@ bulkPlan = LoadBalancer.retainAssignment(allRegions, servers); } else { // assign regions in round-robin fashion - assignUserRegions(new ArrayList(allRegions.keySet()), servers); + assignUserRegions(allRegions.keySet().toArray(new HRegionInfo[allRegions.size()]), servers); return; } LOG.info("Bulk assigning " + allRegions.size() + " region(s) across " + Index: src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1082249) +++ src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -866,7 +866,7 @@ // 5. Trigger immediate assignment of the regions in round-robin fashion List servers = serverManager.getOnlineServersList(); try { - this.assignmentManager.assignUserRegions(Arrays.asList(newRegions), servers); + this.assignmentManager.assignUserRegions(newRegions, servers); } catch (InterruptedException ie) { LOG.error("Caught " + ie + " during round-robin assignment"); throw new IOException(ie); Index: src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (revision 1082249) +++ src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (working copy) @@ -392,13 +392,13 @@ * assignment is possible (ie. no regions or no servers) */ public static Map> roundRobinAssignment( - List regions, List servers) { - if(regions.size() == 0 || servers.size() == 0) { + HRegionInfo[] regions, List servers) { + if(regions.length == 0 || servers.size() == 0) { return null; } Map> assignments = new TreeMap>(); - int numRegions = regions.size(); + int numRegions = regions.length; int numServers = servers.size(); int max = (int)Math.ceil((float)numRegions/numServers); int serverIdx = 0; @@ -410,7 +410,7 @@ HServerInfo server = servers.get((j+serverIdx) % numServers); List serverRegions = new ArrayList(max); for (int i=regionIdx; i regions = randomRegions(mock[0]); List servers = randomServers(mock[1], 0); Map> assignments = - LoadBalancer.roundRobinAssignment(regions, servers); + LoadBalancer.roundRobinAssignment(regions.toArray(new HRegionInfo[regions.size()]), servers); float average = (float)regions.size()/servers.size(); int min = (int)Math.floor(average); int max = (int)Math.ceil(average);