You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Anton Vinogradov (Jira)" <ji...@apache.org> on 2023/05/15 18:58:00 UTC
[jira] [Comment Edited] (IGNITE-19445) NPE during transaction recovery
[ https://issues.apache.org/jira/browse/IGNITE-19445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17722907#comment-17722907 ]
Anton Vinogradov edited comment on IGNITE-19445 at 5/15/23 6:57 PM:
--------------------------------------------------------------------
Checked that 2 threads may work with the same GridIntList, and it's true.
Typical case:
{noformat}
"sys-stripe-0-#68%dht.TxTest1%@5510" prio=5 tid=0x56 nid=NA sleeping
java.lang.Thread.State: TIMED_WAITING
at org.apache.ignite.internal.util.GridIntList.add(GridIntList.java:189) ==============> ADDITION!
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxStateImpl.addActiveCache(IgniteTxStateImpl.java:260)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalAdapter.addActiveCache(IgniteTxLocalAdapter.java:1365)
at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter.addEntry(GridDhtTxLocalAdapter.java:500)
at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal.prepareAsync(GridDhtTxLocal.java:389)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:652)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:449)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest0(IgniteTxHandler.java:203)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest(IgniteTxHandler.java:177)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.access$000(IgniteTxHandler.java:137)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:225)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:223)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1164)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:605)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:406)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:324)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:112)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:314)
at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1907)
at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1528)
at org.apache.ignite.internal.managers.communication.GridIoManager.access$5300(GridIoManager.java:243)
at org.apache.ignite.internal.managers.communication.GridIoManager$9.execute(GridIoManager.java:1421)
at org.apache.ignite.internal.managers.communication.TraceRunnable.run(TraceRunnable.java:55)
at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:637)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
at java.lang.Thread.run(Thread.java:750)
"sys-#131%dht.TxTest1%@5876" prio=5 tid=0x96 nid=NA runnable
java.lang.Thread.State: RUNNABLE
at org.apache.ignite.internal.util.GridIntList.get(GridIntList.java:277) ==============> GET!
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxStateImpl.storeWriteThrough(IgniteTxStateImpl.java:339)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter.storeWriteThrough(IgniteTxAdapter.java:517)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager$TxRecoveryInitRunnable.run(IgniteTxManager.java:3340)
at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7487)
at org.apache.ignite.internal.processors.closure.GridClosureProcessor$1.body(GridClosureProcessor.java:649)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
{noformat}
was (Author: av):
Checked that 2 threads may work with the same GridIntList, and it's true.
Typilac case:
{noformat}
"sys-stripe-0-#68%dht.TxTest1%@5510" prio=5 tid=0x56 nid=NA sleeping
java.lang.Thread.State: TIMED_WAITING
at org.apache.ignite.internal.util.GridIntList.add(GridIntList.java:189) ==============> ADDITION!
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxStateImpl.addActiveCache(IgniteTxStateImpl.java:260)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalAdapter.addActiveCache(IgniteTxLocalAdapter.java:1365)
at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocalAdapter.addEntry(GridDhtTxLocalAdapter.java:500)
at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal.prepareAsync(GridDhtTxLocal.java:389)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:652)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:449)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest0(IgniteTxHandler.java:203)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest(IgniteTxHandler.java:177)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.access$000(IgniteTxHandler.java:137)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:225)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:223)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1164)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:605)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:406)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:324)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:112)
at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:314)
at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1907)
at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1528)
at org.apache.ignite.internal.managers.communication.GridIoManager.access$5300(GridIoManager.java:243)
at org.apache.ignite.internal.managers.communication.GridIoManager$9.execute(GridIoManager.java:1421)
at org.apache.ignite.internal.managers.communication.TraceRunnable.run(TraceRunnable.java:55)
at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:637)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
at java.lang.Thread.run(Thread.java:750)
"sys-#131%dht.TxTest1%@5876" prio=5 tid=0x96 nid=NA runnable
java.lang.Thread.State: RUNNABLE
at org.apache.ignite.internal.util.GridIntList.get(GridIntList.java:277) ==============> GET!
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxStateImpl.storeWriteThrough(IgniteTxStateImpl.java:339)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter.storeWriteThrough(IgniteTxAdapter.java:517)
at org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager$TxRecoveryInitRunnable.run(IgniteTxManager.java:3340)
at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7487)
at org.apache.ignite.internal.processors.closure.GridClosureProcessor$1.body(GridClosureProcessor.java:649)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
{noformat}
> NPE during transaction recovery
> -------------------------------
>
> Key: IGNITE-19445
> URL: https://issues.apache.org/jira/browse/IGNITE-19445
> Project: Ignite
> Issue Type: Bug
> Reporter: Nikita Amelchev
> Assignee: Nikita Amelchev
> Priority: Major
> Labels: ise
> Attachments: reproducer-19445.patch
>
>
> The transaction can be enlisted during recovery(two different threads). The {{GridIntList}} used in the {{IgniteTxStateImpl}} is not thread safe - it produces NPE:
> {noformat}
> [2023-05-10T12:23:32,438][ERROR][sys-#129%dht.TxRecoveryStoreEnabledTest1%][IgniteTestResources] Critical system error detected. Will be handled accordingly to configured handler [hnd=StopNodeFailureHandler [super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet [SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], failureCtx=FailureContext [type=CRITICAL_ERROR, err=class o.a.i.IgniteCheckedException: null]]
> org.apache.ignite.IgniteCheckedException: null
> at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7929) ~[classes/:?]
> at org.apache.ignite.internal.processors.closure.GridClosureProcessor$1.body(GridClosureProcessor.java:659) [classes/:?]
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) [classes/:?]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_352]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_352]
> at java.lang.Thread.run(Thread.java:750) [?:1.8.0_352]
> Caused by: java.lang.NullPointerException
> at org.apache.ignite.internal.processors.cache.transactions.IgniteTxStateImpl.storeWriteThrough(IgniteTxStateImpl.java:342) ~[classes/:?]
> at org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter.storeWriteThrough(IgniteTxAdapter.java:517) ~[classes/:?]
> at org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager$TxRecoveryInitRunnable.run(IgniteTxManager.java:3341) ~[classes/:?]
> at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7487) ~[classes/:?]
> at org.apache.ignite.internal.processors.closure.GridClosureProcessor$1.body(GridClosureProcessor.java:649) ~[classes/:?]
> ... 4 more
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)