[ 
https://issues.apache.org/jira/browse/IGNITE-29273?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nikita Amelchev updated IGNITE-29273:
-------------------------------------
    Fix Version/s: 2.20

> Fix node failure on a backup commit that updates a near cache entry during 
> rebalancing
> --------------------------------------------------------------------------------------
>
>                 Key: IGNITE-29273
>                 URL: https://issues.apache.org/jira/browse/IGNITE-29273
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Nikita Amelchev
>            Assignee: Nikita Amelchev
>            Priority: Major
>             Fix For: 2.20
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> `GridCacheNearTxMultiNodeSelfTest#testTxCleanup` logs a critical failure 
> caused by `ClassCastException: GridDhtTxRemote cannot be cast to 
> IgniteTxLocalAdapter` 
> ([TC](https://ci2.ignite.apache.org/buildConfiguration/IgniteTests24Java8_CacheFullApi/9487917?buildTab=log&logView=flowAware&linesState=1181.1252&focusLine=3055))
>  and passes only because the test uses `NoOpFailureHandler`. With the default 
> failure handler, the node is stopped.
> During rebalancing, a former backup leaves the key affinity but keeps owning 
> the partition until rebalancing completes, so it still commits the key 
> updates as a `GridDhtTxRemote`. If the node also holds a near entry for the 
> key, for example after its own transactional write, the commit refreshes the 
> near entry with the expire time and TTL of the committed entry, and 
> `GridCacheMapEntry#expireTime` looks up the current local transaction via 
> `IgniteTxManager#localTx`. The thread transaction context is the remote 
> transaction at that moment, and `localTx` casts it to `IgniteTxLocalAdapter` 
> before the `local()` check. The commit ends with 
> `IgniteTxHeuristicCheckedException` and a `CRITICAL_ERROR`.
> `IgniteTxManager#localTx` checks `local()` before the cast, so a remote 
> transaction commit reads the expire time and TTL from the entry itself.
> `GridCacheNearTxMultiNodeSelfTest#testTxCleanup` now checks that no critical 
> failure occurred. The scenario depends on the timing of the late affinity 
> assignment after the cluster start, so the test does not reproduce it in 
> every run.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to