[ 
https://issues.apache.org/jira/browse/IGNITE-24810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17936279#comment-17936279
 ] 

Vladislav Pyatkov commented on IGNITE-24810:
--------------------------------------------

Meregd 26a13119705b9b1cd5f8ece1349175ea67193f8e

> NPE when querying system.locks table
> ------------------------------------
>
>                 Key: IGNITE-24810
>                 URL: https://issues.apache.org/jira/browse/IGNITE-24810
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Mirza Aliev
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> Under a specific circumstance (100% reproducible), we can trigger an NPE when 
> we read system.locks table.
> Circumstance: Two transactions running where there is key overlap and one 
> transaction is already waiting on the other to finish.
> i.e. 
> # TX 1 started and performs insert key 1 - 10
> # Before TX1 starts writing to key 5, TX 2 is started and performs insert key 
> 5 - 20.
> # Once TX1 is at key 5, it will have to wait for TX2 to finish since it it 
> holding the lock.
> # Using CLI, querying system.locks table (select count(tx_id) from 
> system.locks;)
> Very corner case situation but maybe some improvements can be made  (e.g. 
> assert)
> Error in CLI
> {noformat}
> sql-cli> select count(tx_id) from system.locks;
> SQL query execution error
> Cannot invoke "org.apache.ignite.internal.tx.LockMode.name()" because the 
> return value of "org.apache.ignite.internal.tx.Lock.lockMode()" is null
> 2025-02-20 15:57:11:872 -0500 
> [INFO][%defaultNode%sql-execution-pool-3][ExchangeServiceImpl] Failed to 
> execute query fragment: traceId=148683a0-0d29-409b-9a1b-74308bf31aca, 
> executionId=ExecutionId [queryId=ffffffff-e5f1-efe3-0000-0000000115b0, 
> executionToken=71284], fragmentId=1
> org.apache.ignite.internal.lang.IgniteInternalException: IGN-CMN-65535 
> TraceId:148683a0-0d29-409b-9a1b-74308bf31aca Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExchangeServiceImpl.sendError(ExchangeServiceImpl.java:115)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.Outbox.sendError(Outbox.java:286)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.Outbox.onError(Outbox.java:183)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:135)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:135)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:370)
>         at 
> org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:78)
>         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: java.lang.NullPointerException: Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.tx.views.LocksViewProvider.lambda$get$2(LocksViewProvider.java:38)
>         at 
> org.apache.ignite.internal.systemview.SystemViewManagerImpl$ScannableView.lambda$new$0(SystemViewManagerImpl.java:265)
>         at 
> org.apache.ignite.internal.util.subscription.TransformingPublisher$SubscriberImpl.onNext(TransformingPublisher.java:52)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.drain(IterableToPublisherAdapter.java:151)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.lambda$request$0(IterableToPublisherAdapter.java:125)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887)
>         at 
> java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2325)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.request(IterableToPublisherAdapter.java:118)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.requestNextBatch(StorageScanNode.java:184)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.push(StorageScanNode.java:158)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.lambda$execute$0(AbstractNode.java:114)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:366)
>         ... 4 more
> 2025-02-20 15:57:11:877 -0500 
> [WARNING][%defaultNode%sql-execution-pool-3][ExecutionContext] Unexpected 
> exception
> java.lang.NullPointerException: Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.tx.views.LocksViewProvider.lambda$get$2(LocksViewProvider.java:38)
>         at 
> org.apache.ignite.internal.systemview.SystemViewManagerImpl$ScannableView.lambda$new$0(SystemViewManagerImpl.java:265)
>         at 
> org.apache.ignite.internal.util.subscription.TransformingPublisher$SubscriberImpl.onNext(TransformingPublisher.java:52)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.drain(IterableToPublisherAdapter.java:151)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.lambda$request$0(IterableToPublisherAdapter.java:125)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887)
>         at 
> java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2325)
>         at 
> org.apache.ignite.internal.util.subscription.IterableToPublisherAdapter$SubscriptionImpl.request(IterableToPublisherAdapter.java:118)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.requestNextBatch(StorageScanNode.java:184)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.push(StorageScanNode.java:158)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.lambda$execute$0(AbstractNode.java:114)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:366)
>         at 
> org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:78)
>         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)
> 2025-02-20 15:57:11:884 -0500 
> [INFO][%defaultNode%sql-execution-pool-3][JdbcQueryEventHandlerImpl] 
> Exception while executing query.
> org.apache.ignite.sql.SqlException: IGN-CMN-65535 
> TraceId:148683a0-0d29-409b-9a1b-74308bf31aca Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.lang.SqlExceptionMapperUtil.mapToPublicSqlException(SqlExceptionMapperUtil.java:65)
>         at 
> org.apache.ignite.internal.sql.engine.exec.TxAwareAsyncCursor.wrapIfNecessary(TxAwareAsyncCursor.java:152)
>         at 
> org.apache.ignite.internal.sql.engine.exec.TxAwareAsyncCursor.handleError(TxAwareAsyncCursor.java:127)
>         at 
> org.apache.ignite.internal.sql.engine.exec.TxAwareAsyncCursor.lambda$requestNextAsync$2(TxAwareAsyncCursor.java:60)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
>         at 
> java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
>         at 
> java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
>         at 
> java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2162)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.lambda$closeAsync$0(AsyncRootNode.java:168)
>         at 
> java.base/java.util.concurrent.ConcurrentLinkedQueue.forEachFrom(ConcurrentLinkedQueue.java:1037)
>         at 
> java.base/java.util.concurrent.ConcurrentLinkedQueue.forEach(ConcurrentLinkedQueue.java:1054)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.closeAsync(AsyncRootNode.java:168)
>         at 
> org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.onError(AsyncRootNode.java:122)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.lambda$onError$2(ExecutionServiceImpl.java:979)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:757)
>         at 
> java.base/java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:735)
>         at 
> java.base/java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2182)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.onError(ExecutionServiceImpl.java:978)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.onMessage(ExecutionServiceImpl.java:672)
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.lambda$start$4(ExecutionServiceImpl.java:322)
>         at 
> org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.onMessageInternal(MessageServiceImpl.java:158)
>         at 
> org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.lambda$onMessage$2(MessageServiceImpl.java:124)
>         at 
> org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:78)
>         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.ignite.lang.IgniteException: IGN-CMN-65535 
> TraceId:148683a0-0d29-409b-9a1b-74308bf31aca Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.sql.engine.util.SqlExceptionMapperProvider.lambda$mappers$1(SqlExceptionMapperProvider.java:50)
>         at 
> org.apache.ignite.internal.lang.IgniteExceptionMapper.map(IgniteExceptionMapper.java:53)
>         at 
> org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.map(IgniteExceptionMapperUtil.java:187)
>         at 
> org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.mapToPublicException(IgniteExceptionMapperUtil.java:117)
>         at 
> org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.mapToPublicException(IgniteExceptionMapperUtil.java:80)
>         at 
> org.apache.ignite.internal.lang.SqlExceptionMapperUtil.mapToPublicSqlException(SqlExceptionMapperUtil.java:55)
>         ... 25 more
> Caused by: 
> org.apache.ignite.internal.sql.engine.exec.RemoteFragmentExecutionException: 
> IGN-CMN-65535 TraceId:148683a0-0d29-409b-9a1b-74308bf31aca Cannot invoke 
> "org.apache.ignite.internal.tx.LockMode.name()" because the return value of 
> "org.apache.ignite.internal.tx.Lock.lockMode()" is null
>         at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.onMessage(ExecutionServiceImpl.java:665)
>         ... 7 more
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to