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

Pavel Pereslegin reassigned IGNITE-8092:
----------------------------------------

    Assignee: Pavel Pereslegin

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

Reply via email to