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

ASF GitHub Bot commented on IGNITE-7845:
----------------------------------------

Github user asfgit closed the pull request at:

    https://github.com/apache/ignite/pull/3606


> Data race on atomicLong close
> -----------------------------
>
>                 Key: IGNITE-7845
>                 URL: https://issues.apache.org/jira/browse/IGNITE-7845
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Anton Kalashnikov
>            Assignee: Anton Kalashnikov
>            Priority: Major
>              Labels: MakeTeamcityGreenAgain
>             Fix For: 2.5
>
>
> Found by IgniteClientDataStructuresTest.testAtomicLong.
> *Given:*
> IgniteAtomicLong was created e.g. atomicLong = ignite.atomicLong("long1", 1L, 
> true)
> *When:*
> IgniteAtomicLong was closed e.g. atomicLong.close()
> *Then:*
> If you try to get this value again sometimes you will get null 
> IgniteAtomicLong value and sometimes you will get not null IgniteAtomicLong 
> value e.g. ignite.atomicLong("long1", 1L, false) sometimes null, sometimes 
> not null
> But if we will get not null value IgniteAtomicLong and we will call method 
> "get" on it, we will have one of two exception 
> IllegalStateException("Sequence was removed from cache: " + name) if it 
> already marked as deleted, and IgniteException("Failed to find atomic long: " 
> + name) if it sill no marked as deleted but already deleted from cache.
> *Expected:*
> IgniteAtomicLong value always should be null(or not?)
> *Why it's happend:*
> When we close IgniteAtomicLong we removing value from cache in transaction 
> but removing from internal storage(dsMap) happen asynchroniously in 
> DataStructuresEntryListener for all nodes include local node. And when we try 
> get value after close we still sometimes able to get IgniteAtomicLong from 
> internal local storage.
> *Solution(In my opinion):*
> I guess in common case we don't  need call Ignite#atomicLong  every time when 
> we need value, but we should use IgniteAtomicLong object received after first 
> call. And if it is true, we can remove receiving IgniteAtomicLong from local 
> storage(dsMap) - this changes will fix problem



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to