Pavel Pereslegin created IGNITE-8092:
----------------------------------------
Summary: 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
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)