You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/03/17 21:46:57 UTC

svn commit: r1082686 - in /hbase/trunk: ./ src/main/java/org/apache/hadoop/hbase/master/ src/test/java/org/apache/hadoop/hbase/master/

Author: stack
Date: Thu Mar 17 20:46:57 2011
New Revision: 1082686

URL: http://svn.apache.org/viewvc?rev=1082686&view=rev
Log:
HBASE-3657 reduce copying of HRegionInfo's

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
    hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1082686&r1=1082685&r2=1082686&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Mar 17 20:46:57 2011
@@ -79,6 +79,7 @@ Release 0.91.0 - Unreleased
    HBASE-3440  Clean out load_table.rb and make sure all roads lead to
                completebulkload tool (Vidhyashankar Venkataraman via Stack)
    HBASE-3653  Parallelize Server Requests on HBase Client
+   HBASE-3657  reduce copying of HRegionInfo's (Ted Yu via Stack)
 
   TASK
    HBASE-3559  Move report of split to master OFF the heartbeat channel

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1082686&r1=1082685&r2=1082686&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Thu Mar 17 20:46:57 2011
@@ -1343,13 +1343,13 @@ public class AssignmentManager extends Z
    * @throws InterruptedException
    * @throws IOException
    */
-  public void assignUserRegions(List<HRegionInfo> regions, List<HServerInfo> servers) throws IOException, InterruptedException {
+  public void assignUserRegions(HRegionInfo[] regions, List<HServerInfo> servers) throws IOException, InterruptedException {
     if (regions == null)
       return;
     Map<HServerInfo, List<HRegionInfo>> 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 +1385,7 @@ public class AssignmentManager extends Z
       bulkPlan = LoadBalancer.retainAssignment(allRegions, servers);
     } else {
       // assign regions in round-robin fashion
-      assignUserRegions(new ArrayList<HRegionInfo>(allRegions.keySet()), servers);
+      assignUserRegions(allRegions.keySet().toArray(new HRegionInfo[allRegions.size()]), servers);
       return;
     }
     LOG.info("Bulk assigning " + allRegions.size() + " region(s) across " +

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1082686&r1=1082685&r2=1082686&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Thu Mar 17 20:46:57 2011
@@ -866,7 +866,7 @@ implements HMasterInterface, HMasterRegi
     // 5. Trigger immediate assignment of the regions in round-robin fashion
     List<HServerInfo> 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);

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java?rev=1082686&r1=1082685&r2=1082686&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java Thu Mar 17 20:46:57 2011
@@ -392,13 +392,13 @@ public class LoadBalancer {
    *         assignment is possible (ie. no regions or no servers)
    */
   public static Map<HServerInfo,List<HRegionInfo>> roundRobinAssignment(
-      List<HRegionInfo> regions, List<HServerInfo> servers) {
-    if(regions.size() == 0 || servers.size() == 0) {
+      HRegionInfo[] regions, List<HServerInfo> servers) {
+    if(regions.length == 0 || servers.size() == 0) {
       return null;
     }
     Map<HServerInfo,List<HRegionInfo>> assignments =
       new TreeMap<HServerInfo,List<HRegionInfo>>();
-    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 @@ public class LoadBalancer {
       HServerInfo server = servers.get((j+serverIdx) % numServers);
       List<HRegionInfo> serverRegions = new ArrayList<HRegionInfo>(max);
       for (int i=regionIdx; i<numRegions; i += numServers) {
-        serverRegions.add(regions.get(i % numRegions));
+        serverRegions.add(regions[i % numRegions]);
       }
       assignments.put(server, serverRegions);
       regionIdx++;

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java?rev=1082686&r1=1082685&r2=1082686&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java Thu Mar 17 20:46:57 2011
@@ -276,7 +276,7 @@ public class TestLoadBalancer {
       List<HRegionInfo> regions = randomRegions(mock[0]);
       List<HServerInfo> servers = randomServers(mock[1], 0);
       Map<HServerInfo,List<HRegionInfo>> 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);