Tianying Chang created HBASE-7060:
-------------------------------------

             Summary: region load balancing by table does not handle the case 
where a table's region count is less than the number of the RS in the cluter
                 Key: HBASE-7060
                 URL: https://issues.apache.org/jira/browse/HBASE-7060
             Project: HBase
          Issue Type: Bug
          Components: master
    Affects Versions: 0.92.0
            Reporter: Tianying Chang
            Assignee: Tianying Chang




When the table's region count is less than the count of region servers, the 
region balance algorithm will not move the region. For example, the cluster has 
100 RS, the table has 50 regions sitting on one RS, they will not be moved to 
any of the other 99 RS.

This is because the algorithm did not calculate the under-loaded RS correctly. 
This is how the algorithm works with the above example:

avg-regions-per-RS=0.5
min-RS-per-RS=0
max-RS-per-RS=1

when they calculate the under loaded RS, the code is as below. Since 
regionCount=0, which is always >=min, so it will always skip, therefore, no 
underloaded RS are found.

Map<ServerName, Integer> underloadedServers = new HashMap<ServerName, 
Integer>();
for (Map.Entry<ServerAndLoad, List<HRegionInfo>> server:
serversByLoad.entrySet()) {
int regionCount = server.getKey().getLoad();
if (regionCount >= min) { break; }
underloadedServers.put(server.getKey().getServerName(), min - regionCount);
}

Later the function returns since underloaded RS size is 0

if (serverUnerloaded ==0) return regionsToReturn;


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to