You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "ramkrishna.s.vasudevan (Commented) (JIRA)" <ji...@apache.org> on 2012/02/28 15:55:46 UTC
[jira] [Commented] (HBASE-5482) In 0.90, balancer algo leading to
same region balanced twice and picking same region with Src and Destination
as same RS.
[ https://issues.apache.org/jira/browse/HBASE-5482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13218246#comment-13218246 ]
ramkrishna.s.vasudevan commented on HBASE-5482:
-----------------------------------------------
Checking if the patch similar to this is needed in trunk. Once confirmed will prepare a patch for 0.92.
> In 0.90, balancer algo leading to same region balanced twice and picking same region with Src and Destination as same RS.
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-5482
> URL: https://issues.apache.org/jira/browse/HBASE-5482
> Project: HBase
> Issue Type: Bug
> Components: master
> Affects Versions: 0.90.5
> Reporter: ramkrishna.s.vasudevan
> Assignee: ramkrishna.s.vasudevan
> Fix For: 0.90.7
>
> Attachments: HBASE-5482_1.patch
>
>
> There are possibility of 2 problems
> -> When we populate regionsToMove while iterating the serverinfo in descending manner there is a chance that the same region can be added twice.
> Because in the first loop we do a randomization of the regions.
> Where as when we get we have neededRegions!= 0 we just get the region in the index and add it again . This may lead to have same region in the regionsToMove list.
> -> Another problem is
> when the problem in the first point happens then there is a chance that
> the regionToMove can have the same src and destination and the same region can be picked every 5 mins.
> {code}
> for(Map.Entry<HServerInfo, List<HRegionInfo>> server :
> serversByLoad.descendingMap().entrySet()) {
> BalanceInfo balanceInfo = serverBalanceInfo.get(server.getKey());
> int idx =
> balanceInfo == null ? 0 : balanceInfo.getNextRegionForUnload();
> if (idx >= server.getValue().size()) break;
> HRegionInfo region = server.getValue().get(idx);
> if (region.isMetaRegion()) continue; // Don't move meta regions.
> regionsToMove.add(new RegionPlan(region, server.getKey(), null));
> if(--neededRegions == 0) {
> // No more regions needed, done shedding
> break;
> }
> }
> {code}
> If i have meta and root in the top two loaded region server(totally 3 RS), we just skip the regions in those region server and populate the region from the least loaded RS.
> Then in the next loop we iterate from the least loaded server and populate the destination as also the same server.
> This is leading to a condition where every 5 min balancing happens and also the server is same for src and dest.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira