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