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

Reply via email to