ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitriy Pavlov (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (IGNITE-7845) Data race on atomicLong close
Date Tue, 06 Mar 2018 13:56:00 GMT

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

Dmitriy Pavlov updated IGNITE-7845:
    Fix Version/s: 2.5

> 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

This message was sent by Atlassian JIRA

View raw message