[ https://issues.apache.org/jira/browse/IGNITE-8092?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16444034#comment-16444034 ]
ASF GitHub Bot commented on IGNITE-8092: ---------------------------------------- GitHub user xtern opened a pull request: https://github.com/apache/ignite/pull/3876 IGNITE-8092 Put hang on destroy. You can merge this pull request into a Git repository by running: $ git pull https://github.com/xtern/ignite IGNITE-8092 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/ignite/pull/3876.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 #3876 ---- commit 14c62b87992013faf849d9d39f4a7bf9f0bdd715 Author: pereslegin-pa <xxtern@...> Date: 2018-04-19T13:06:59Z IGNITE-8092 Put hang on destroy. ---- > 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)