[
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)