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

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

GitHub user akalash opened a pull request:

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

    IGNITE-7845 fix checking atomicLong in IgniteClientDataStructuresTest…

    …#testAtomicLong.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gridgain/apache-ignite ignite-7845

Alternatively you can review and apply these changes as the patch at:

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

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #3606
    
----
commit 514de7920e5ee7c7d3d83d1687de71d664e72028
Author: Anton Kalashnikov <kaa.dev@...>
Date:   2018-03-06T10:22:37Z

    IGNITE-7845 fix checking atomicLong in 
IgniteClientDataStructuresTest#testAtomicLong.

----


> 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
>
> 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