[ https://issues.apache.org/jira/browse/HBASE-22739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Stack resolved HBASE-22739. ----------------------------------- Fix Version/s: (was: 2.1.1) 2.2.3 2.1.8 2.3.0 3.0.0 Hadoop Flags: Reviewed Resolution: Fixed Merged #729. Thanks for patch [~binlijin]. Lets try it. > ArrayIndexOutOfBoundsException when balance > ------------------------------------------- > > Key: HBASE-22739 > URL: https://issues.apache.org/jira/browse/HBASE-22739 > Project: HBase > Issue Type: Bug > Components: Balancer > Reporter: casuallc > Assignee: Lijin Bin > Priority: Major > Fix For: 3.0.0, 2.3.0, 2.1.8, 2.2.3 > > > > {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)