[ 
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

        

Reply via email to