You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ryabov Dmitrii (JIRA)" <ji...@apache.org> on 2018/05/14 14:27:00 UTC

[jira] [Commented] (IGNITE-8092) Put operation may hang if cache was destroyed asynchronously.

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

Ryabov Dmitrii commented on IGNITE-8092:
----------------------------------------

Looks good for me.

> Put operation may hang if cache was destroyed asynchronously.
> -------------------------------------------------------------
>
>                 Key: IGNITE-8092
>                 URL: https://issues.apache.org/jira/browse/IGNITE-8092
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: 2.4
>            Reporter: Pavel Pereslegin
>            Assignee: Pavel Pereslegin
>            Priority: Major
>
> If there is more than one cache in the cache group then put operation on cache may hang if it was destroyed asynchronously.
> For now this applies to all cache modes (PARTITIONED/REPLICATED/LOCAL) and to all atomicity modes (ATOMIC/TRANSACTIONAL).
> This problem can not be reproduced if there is only one cache in the cache group.
> Reproducer:
> {code:java}
> public class DestroyCacheTest extends GridCommonAbstractTest {
>     private CacheConfiguration<Integer, Boolean> ccfg(String name, String grp) {
>         return new CacheConfiguration<Integer, Boolean>(name).setCacheMode(CacheMode.PARTITIONED)
>             .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
>             .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
>             .setGroupName(grp);
>     }
>     public void testDestroyAsync() throws Exception {
>         String grpName = "testGroup";
>         try (IgniteEx node = startGrid(0)) {
>             node.createCache(ccfg("cache2", grpName));
>             for (int n = 0; n < 100; n++) {
>                 IgniteCache<Integer, Boolean> cache1 = node.createCache(ccfg("cache1", grpName));
>                 AtomicInteger cntr = new AtomicInteger();
>                 GridTestUtils.runMultiThreadedAsync(() -> {
>                     try {
>                         int key;
>                         while ((key = cntr.getAndIncrement()) < 10_000) {
>                             if (key == 1000)
>                                 cache1.destroy();
>                             cache1.putIfAbsent(key, true);
>                         }
>                     }
>                     catch (Exception ignore) {
>                         log.warning(ignore.getMessage());
>                     }
>                     return null;
>                 }, 6, "put-thread").get();
>             }
>         }
>     }
> }
> {code}
> p.s. for ATOMIC cache additional cache status check in GridCacheGateway#onStopped busy wait resolve this problem.



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