[
https://issues.apache.org/jira/browse/PHOENIX-8010?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18120653#comment-18120653
]
Xavier Fernandis commented on PHOENIX-8010:
-------------------------------------------
h3. *Stack trace*
xfernand@WM-H5XX6Y07V6 59954-phoenix % python3 ./bin/sqlline.py
2026-09-29T13:14:43,118 WARN [main] impl.MetricsConfig: Cannot locate
configuration: tried
hadoop-metrics2-phoenix.properties,hadoop-metrics2.properties
2026-09-29T13:14:43,174 WARN [main] util.NativeCodeLoader: Unable to load
native-hadoop library for your platform... using builtin-java classes where
applicable
2026-09-29T13:14:43,235 WARN [main] impl.MetricsSystemImpl: Phoenix metrics
system already initialized!
2026-09-29T13:14:43,349 WARN [main] client.ZKConnectionRegistry:
ZKConnectionRegistry is deprecated. See
https://hbase.apache.org/book.html#client.rpcconnectionregistry
sqlline version 1.9.0
0: jdbc:phoenix:> CREATE TABLE users (id INTEGER NOT NULL PRIMARY KEY, name
VARCHAR);
. . . . . . . . > UPSERT INTO users VALUES (5, 'e');
. . . . . . . . > SELECT * FROM users WHERE id = 5 LIMIT 5 OFFSET 0;
No rows affected (0.678 seconds)
1 row affected (0.02 seconds)
org.apache.hadoop.hbase.DoNotRetryIOException:
org.apache.hadoop.hbase.DoNotRetryIOException:
USERS,,1790668034952.69aee508a9784b9651f42254e187be11.: Cannot read the array
length because "first" is null
at
org.apache.phoenix.util.ClientUtil.createIOException(ClientUtil.java:180)
at
org.apache.phoenix.util.ClientUtil.throwIOException(ClientUtil.java:188)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:237)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.nextRaw(BaseScannerRegionObserver.java:265)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3462)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3733)
at
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45708)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:444)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:105)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:85)
Caused by: java.lang.NullPointerException: Cannot read the array length because
"first" is null
at org.apache.phoenix.util.ByteUtil.concat(ByteUtil.java:290)
at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getOffsetScanner(NonAggregateRegionScannerFactory.java:385)
at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getRegionScanner(NonAggregateRegionScannerFactory.java:186)
at
org.apache.phoenix.coprocessor.ScanRegionObserver.doPostScannerOpen(ScanRegionObserver.java:178)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:218)
... 8 more
at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at
org.apache.hadoop.hbase.ipc.RemoteWithExtrasException.instantiateException(RemoteWithExtrasException.java:110)
at
org.apache.hadoop.hbase.ipc.RemoteWithExtrasException.unwrapRemoteException(RemoteWithExtrasException.java:100)
at
org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.makeIOExceptionOfException(ProtobufUtil.java:398)
at
org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.handleRemoteException(ProtobufUtil.java:386)
at
org.apache.hadoop.hbase.client.ScannerCallable.openScanner(ScannerCallable.java:377)
at
org.apache.hadoop.hbase.client.ScannerCallable.rpcCall(ScannerCallable.java:261)
at
org.apache.hadoop.hbase.client.ScannerCallable.rpcCall(ScannerCallable.java:62)
at
org.apache.hadoop.hbase.client.RegionServerCallable.call(RegionServerCallable.java:131)
at
org.apache.hadoop.hbase.client.RpcRetryingCallerImpl.callWithoutRetries(RpcRetryingCallerImpl.java:206)
at
org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:438)
at
org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:406)
at
org.apache.hadoop.hbase.client.RpcRetryingCallerImpl.callWithRetries(RpcRetryingCallerImpl.java:104)
at
org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:74)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:842)
Caused by:
org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.DoNotRetryIOException):
org.apache.hadoop.hbase.DoNotRetryIOException:
USERS,,1790668034952.69aee508a9784b9651f42254e187be11.: Cannot read the array
length because "first" is null
at
org.apache.phoenix.util.ClientUtil.createIOException(ClientUtil.java:180)
at
org.apache.phoenix.util.ClientUtil.throwIOException(ClientUtil.java:188)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:237)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.nextRaw(BaseScannerRegionObserver.java:265)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3462)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3733)
at
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45708)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:444)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:105)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:85)
{color:#FF0000}*Caused by: java.lang.NullPointerException: Cannot read the
array length because "first" is null*{color}
{color:#FF0000} *at
org.apache.phoenix.util.ByteUtil.concat(ByteUtil.java:290)*{color}
{color:#FF0000} *at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getOffsetScanner(NonAggregateRegionScannerFactory.java:385)*{color}
{color:#FF0000} *at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getRegionScanner(NonAggregateRegionScannerFactory.java:186)*{color}
{color:#FF0000} *at
org.apache.phoenix.coprocessor.ScanRegionObserver.doPostScannerOpen(ScanRegionObserver.java:178)*{color}
{color:#FF0000} *at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:218)*{color}
{color:#FF0000} *... 8 more*{color}
at
org.apache.hadoop.hbase.ipc.AbstractRpcClient.onCallFinished(AbstractRpcClient.java:392)
at
org.apache.hadoop.hbase.ipc.AbstractRpcClient.access$100(AbstractRpcClient.java:94)
at
org.apache.hadoop.hbase.ipc.AbstractRpcClient$3.run(AbstractRpcClient.java:430)
at
org.apache.hadoop.hbase.ipc.AbstractRpcClient$3.run(AbstractRpcClient.java:425)
at org.apache.hadoop.hbase.ipc.Call.callComplete(Call.java:116)
at org.apache.hadoop.hbase.ipc.Call.setException(Call.java:131)
at
org.apache.hadoop.hbase.ipc.RpcConnection.readResponse(RpcConnection.java:457)
at
org.apache.hadoop.hbase.ipc.NettyRpcDuplexHandler.readResponse(NettyRpcDuplexHandler.java:125)
at
org.apache.hadoop.hbase.ipc.NettyRpcDuplexHandler.channelRead(NettyRpcDuplexHandler.java:140)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
org.apache.hbase.thirdparty.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361)
at
org.apache.hbase.thirdparty.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
org.apache.hbase.thirdparty.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:289)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
org.apache.hbase.thirdparty.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at
org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
org.apache.hbase.thirdparty.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at
org.apache.hbase.thirdparty.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:171)
at
org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
at
org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
at
org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
at
org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at
org.apache.hbase.thirdparty.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at
org.apache.hbase.thirdparty.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
org.apache.hbase.thirdparty.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
... 1 more
2026-09-29T13:17:15,673 ERROR [main] iterate.TableResultIterator: Error while
scanning table USERS;hconnection-0x153cd6bb , scan
\{"totalColumns":2,"maxResultSize":"-1","caching":2147483647,"includeStopRow":false,"consistency":"STRONG","maxVersions":1,"mvccReadPoint":"-1","includeStartRow":true,"stopRow":"\\x80\\x00\\x00\\x06","limit":-1,"timeRange":["0","9223372036854775807"],"loadColumnFamiliesOnDemand":true,"startRow":"\\x80\\x00\\x00\\x05","targetReplicaId":-1,"batch":-1,"families":{"0":["\\x00\\x00\\x00\\x00","\\x80\\x0B"]},"priority":-1,"filter":"PageFilter
5","storeOffset":0,"queryMetricsEnabled":false,"needCursorResult":false,"storeLimit":-1,"cacheBlocks":true,"readType":"PREAD","allowPartialResults":false,"reversed":false}
Error: org.apache.hadoop.hbase.DoNotRetryIOException:
USERS,,1790668034952.69aee508a9784b9651f42254e187be11.: Cannot read the array
length because "first" is null
at
org.apache.phoenix.util.ClientUtil.createIOException(ClientUtil.java:180)
at
org.apache.phoenix.util.ClientUtil.throwIOException(ClientUtil.java:188)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:237)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.nextRaw(BaseScannerRegionObserver.java:265)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3462)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3733)
at
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45708)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:444)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:105)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:85)
Caused by: java.lang.NullPointerException: Cannot read the array length because
"first" is null
at org.apache.phoenix.util.ByteUtil.concat(ByteUtil.java:290)
at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getOffsetScanner(NonAggregateRegionScannerFactory.java:385)
at
org.apache.phoenix.iterate.NonAggregateRegionScannerFactory.getRegionScanner(NonAggregateRegionScannerFactory.java:186)
at
org.apache.phoenix.coprocessor.ScanRegionObserver.doPostScannerOpen(ScanRegionObserver.java:178)
at
org.apache.phoenix.coprocessor.BaseScannerRegionObserver$RegionScannerHolder.overrideDelegate(BaseScannerRegionObserver.java:218)
... 8 more (state=08000,code=101)
0: jdbc:phoenix:> SELECT * FROM users WHERE id = 5 LIMIT 5;
+----+------+
| ID | NAME |
+----+------+
| 5 | e |
+----+------+
1 row selected (0.019 seconds)
0: jdbc:phoenix:> SELECT * FROM users;
+----+------+
| ID | NAME |
+----+------+
| 5 | e |
+----+------+
1 row selected (0.009 seconds)
0: jdbc:phoenix:>
> NPE in NonAggregateRegionScannerFactory.getOffsetScanner() for point-lookup
> queries with OFFSET
> -----------------------------------------------------------------------------------------------
>
> Key: PHOENIX-8010
> URL: https://issues.apache.org/jira/browse/PHOENIX-8010
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.2.2, 5.3.2
> Environment: h2. Environment
> * Reproduced on Phoenix branch-5.3.0 with HBase 2.6.4.
> * Code path is byte-identical across all 5.x branches and master; HBase
> version is irrelevant.
> Reporter: Xavier Fernandis
> Assignee: Xavier Fernandis
> Priority: Major
>
> h2. Root cause
> The crash is in {{getOffsetScanner(...)}} in:
> {{phoenix-core-server/src/main/java/org/apache/phoenix/iterate/NonAggregateRegionScannerFactory.java}}
> {code:java}
> byte[] prevScanStartRowKey =
> scan.getAttribute(BaseScannerRegionObserverConstants.SCAN_ACTUAL_START_ROW);
> // If the region has moved after server has returned dummy or valid row to
> client,
> // prevScanStartRowKey would be different from actual scan start rowkey.
> // ...
> if (
> Bytes.compareTo(prevScanStartRowKey, initStartRowKey) != 0 && Bytes
> .compareTo(ByteUtil.concat(prevScanStartRowKey, ByteUtil.ZERO_BYTE),
> initStartRowKey) != 0
> ) {
> iterator.setRowCountToOffset();
> }{code}
> {{ }}
> {{prevScanStartRowKey}} is the value of the {{SCAN_ACTUAL_START_ROW}} . On
> the first RPC of a point-lookup query this attribute was never set on the
> client, so it is {{{}null{}}}.
> * {{org.apache.hadoop.hbase.util.Bytes.compareTo(byte[], byte[])}} is
> null-tolerant, so the first comparison does *not* throw.
> * {{org.apache.phoenix.util.ByteUtil.concat(byte[] first, byte[]... rest)}}
> is *not* null-tolerant. It dereferences {{first.length}} immediately, so
> {{concat(null, ByteUtil.ZERO_BYTE)}} throws.
> Offending line in:
> {{phoenix-core-client/src/main/java/org/apache/phoenix/util/ByteUtil.java}}
>
> {code:java}
>
> public static byte[] concat(byte[] first, byte[]... rest) {
> int totalLength = first.length; // <-- NPE when first == null ...
> }
> {code}
>
> Every range / salted / local-index / guide-post-split scan is produced
> through {{{}intersectScan(...){}}}, so those paths always carry the
> attribute. But the *point-lookup fast path* in
> {{{}BaseResultIterators.getParallelScans(byte[], byte[]){}}}:
> {code:java}
> if (!isLocalIndex && scanRanges.isPointLookup() &&
> !scanRanges.useSkipScanFilter()) {
> // builds the scan directly from context.getScan(); never calls
> intersectScan(...)
> // ... and therefore never sets SCAN_ACTUAL_START_ROW
> }
> {code}
> {{ }}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)