[ 
https://issues.apache.org/jira/browse/HBASE-22739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16951599#comment-16951599
 ] 

Michael Stack commented on HBASE-22739:
---------------------------------------

HBASE-23173 is duplicate of this. Has a PR that just  addresses the AIOBE.  
Code has been same for long time so perturbed by some recent commit? Why it is 
happening would necessitate spending time in balancer. The removeRegion is used 
in a good few places. Meantime my cluster won't balance. I don't have RSGroup 
enabled. Does have replicas enabled..

> ArrayIndexOutOfBoundsException when balance
> -------------------------------------------
>
>                 Key: HBASE-22739
>                 URL: https://issues.apache.org/jira/browse/HBASE-22739
>             Project: HBase
>          Issue Type: Bug
>          Components: Balancer
>            Reporter: casuallc
>            Priority: Major
>             Fix For: 2.1.1
>
>
>  
> {code:java}
> 2019-07-25 15:19:59,828 ERROR [master/nna:16000.Chore.1] 
> hbase.ScheduledChore: Caught error
> java.lang.ArrayIndexOutOfBoundsException: 3171
> at 
> org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer$Cluster.removeRegion(BaseLoadBalancer.java:873)
> at 
> org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer$Cluster.doAction(BaseLoadBalancer.java:716)
> at 
> org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.balanceCluster(StochasticLoadBalancer.java:407)
> at 
> org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.balanceCluster(StochasticLoadBalancer.java:318)
> at org.apache.hadoop.hbase.master.HMaster.balance(HMaster.java:1650)
> at org.apache.hadoop.hbase.master.HMaster.balance(HMaster.java:1567)
> at 
> org.apache.hadoop.hbase.master.balancer.BalancerChore.chore(BalancerChore.java:49)
> at org.apache.hadoop.hbase.ScheduledChore.run(ScheduledChore.java:186)
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
> at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
> at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
> at 
> org.apache.hadoop.hbase.JitterScheduledThreadPoolExecutorImpl$JitteredRunnableScheduledFuture.run(JitterScheduledThreadPoolExecutorImpl.java:111)
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> {code}
> should check if the regionIndex is valid when removeRegion,
> java: 
> hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
> {code:java}
> int[] removeRegion(int[] regions, int regionIndex) {
>     //TODO: this maybe costly. Consider using linked lists
>     int[] newRegions = new int[regions.length - 1];
>     int i = 0;
>     for (i = 0; i < regions.length; i++) {
>         if (regions[i] == regionIndex) {
>             break;
>         }
>         if (i == regions.length - 1) {
>             return Arrays.copyOf(regions, regions.length);
>         }
>         newRegions[i] = regions[i];
>     }
>     System.arraycopy(regions, i+1, newRegions, i, newRegions.length - i);
>     return newRegions;
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to