[ https://issues.apache.org/jira/browse/PHOENIX-7589?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
chaijunjie updated PHOENIX-7589: -------------------------------- Summary: IndexOutOfBoundsException thrown when query data with limit and offset (was: IndexOutOfBoundsException thrown when query data with ) > IndexOutOfBoundsException thrown when query data with limit and offset > ----------------------------------------------------------------------- > > Key: PHOENIX-7589 > URL: https://issues.apache.org/jira/browse/PHOENIX-7589 > Project: Phoenix > Issue Type: Bug > Components: core > Affects Versions: 5.2.1 > Reporter: chaijunjie > Priority: Critical > > When query like this: > select * from MY_TABLE where TID between '100' and '110' and BID = '99' and > DATADATE like '19%' limit 5 offset 19947; > The client will throw IndexOutOfBoundsException... > Total data nums is 19950 (between '100' and '110' and BID = '99' and DATADATE > like '19%') > > Only when query data *limit+offset > total* data nums will cause this issue... > The RegionServer log is here: > {code:java} > java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 > at > java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100) > ~[?:?] > at > java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106) > ~[?:?] > at > java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302) > ~[?:?] > at java.base/java.util.Objects.checkIndex(Objects.java:385) ~[?:?] > at java.base/java.util.ArrayList.get(ArrayList.java:427) ~[?:?] > at > org.apache.phoenix.schema.tuple.MultiKeyValueTuple.getKey(MultiKeyValueTuple.java:51) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getOffsetKvWithLastScannedRowKey(NonAggregateRegionScannerFactory.java:460) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.access$000(NonAggregateRegionScannerFactory.java:88) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory$1.next(NonAggregateRegionScannerFactory.java:407) > [phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.BaseRegionScanner.nextRaw(BaseRegionScanner.java:56) > [phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.DelegateRegionScanner.nextRaw(DelegateRegionScanner.java:79) > [phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.DelegateRegionScanner.nextRaw(DelegateRegionScanner.java:79) > [phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.nextRaw(BaseScannerRegionObserver.java:254) > [phoenix-core-5.2.1.jar:?] > at > org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:4179) > [hbase-server-2.6.1.jar:2.6.1] > at > org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:4456) > [hbase-server-2.6.1.jar:2.6.1] > at > org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:44095) > [hbase-protocol-shaded-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:473) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:131) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:112) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:92) > [hbase-server-2.6.1.jar:2.6.1] > 2025-04-25 18:14:32,860 | DEBUG | > RpcServer.default.FPBQ.Fifo.handler=199,queue=19,port=21302 | Unknown > exception type | > org.apache.hadoop.hbase.ipc.MetricsHBaseServer.exception(MetricsHBaseServer.java:159) > org.apache.hadoop.hbase.DoNotRetryIOException: > XG_CLUB_LIST,,1745463662833.1bf6df77c120968bad1086771352ddc5.: Index 0 out of > bounds for length 0 > at > org.apache.phoenix.util.ClientUtil.createIOException(ClientUtil.java:173) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.util.ClientUtil.throwIOException(ClientUtil.java:181) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory$1.next(NonAggregateRegionScannerFactory.java:419) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.BaseRegionScanner.nextRaw(BaseRegionScanner.java:56) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.DelegateRegionScanner.nextRaw(DelegateRegionScanner.java:79) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.DelegateRegionScanner.nextRaw(DelegateRegionScanner.java:79) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.nextRaw(BaseScannerRegionObserver.java:254) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:4179) > ~[hbase-server-2.6.1.jar:2.6.1] > at > org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:4456) > ~[hbase-server-2.6.1.jar:2.6.1] > at > org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:44095) > ~[hbase-protocol-shaded-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:473) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:131) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:112) > [hbase-server-2.6.1.jar:2.6.1] > at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:92) > [hbase-server-2.6.1.jar:2.6.1] > Caused by: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for > length 0 > at > java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100) > ~[?:?] > at > java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106) > ~[?:?] > at > java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302) > ~[?:?] > at java.base/java.util.Objects.checkIndex(Objects.java:385) ~[?:?] > at java.base/java.util.ArrayList.get(ArrayList.java:427) ~[?:?] > at > org.apache.phoenix.schema.tuple.MultiKeyValueTuple.getKey(MultiKeyValueTuple.java:51) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getOffsetKvWithLastScannedRowKey(NonAggregateRegionScannerFactory.java:460) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.access$000(NonAggregateRegionScannerFactory.java:88) > ~[phoenix-core-5.2.1.jar:?] > at > org.apache.phoenix.iterate.NonAggregateRegionScannerFactory$1.next(NonAggregateRegionScannerFactory.java:407) > ~[phoenix-core-5.2.1.jar:?] > {code} > I think the root cause is here: > https://github.com/apache/phoenix/blob/9b4fff566c5f010f5201d40d813b2a7fd6b0ad5b/phoenix-core-server/src/main/java/org/apache/phoenix/iterate/NonAggregateRegionScannerFactory.java#L488 > The tuple is empty, so it's size is 0, and the nextTuple is null, then will > execute getOffsetKvWithLastScannedRowKey, see: > https://github.com/apache/phoenix/blob/9b4fff566c5f010f5201d40d813b2a7fd6b0ad5b/phoenix-core-server/src/main/java/org/apache/phoenix/iterate/NonAggregateRegionScannerFactory.java#L507 > it will call tuple.getKey....but the tuple is empty, then > MultiKeyValueTuple.getKey will throw IndexOutOfBoundsException.... -- This message was sent by Atlassian Jira (v8.20.10#820010)