You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2018/09/17 09:12: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=16617270#comment-16617270 ] 

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

Github user xtern closed the pull request at:

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


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