[ 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