[ https://issues.apache.org/jira/browse/IGNITE-3955?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Tupitsyn updated IGNITE-3955: ----------------------------------- Description: When entry processor is invoked from multiple threads, result set is sometimes empty. This happens with ATOMIC cache, but not with TRANSACTIONAL. To reproduce, paste the following into GridCacheAbstractFullApiSelfTest.java: {code} public void testInvokeAllMultithreaded() throws Exception { final IgniteCache<String, Integer> cache = jcache(); final int threadCnt = 4; final int cnt = 90000; final Set<String> keys = Collections.singleton("myKey"); GridTestUtils.runMultiThreaded(new Runnable() { @Override public void run() { for (int i = 0; i < cnt; i++) { final Map<String, EntryProcessorResult<Integer>> res = cache.invokeAll(keys, new CacheEntryProcessor<String, Integer, Integer>() { @Override public Integer process(MutableEntry<String, Integer> entry, Object... objects) throws EntryProcessorException { Integer val = entry.getValue(); if (val == null) val = 0; val++; entry.setValue(val); return val; } }); assertEquals(1, res.size()); } } }, threadCnt, "testInvokeAllMultithreaded"); assertEquals(cnt*threadCnt, cache.get("myKey")); } {code} Run this test as part of GridCacheAtomicFullApiSelfTest.java. was: When entry processor is invoked from multiple threads, result set is sometimes empty. This happens with ATOMIC cache, but not with TRANSACTIONAL. To reproduce, paste the following into GridCacheAbstractFullApiSelfTest.java: {code} public void testInvokeAllMultithreaded() throws Exception { final IgniteCache<String, Integer> cache = jcache(); final int threadCnt = 4; final int cnt = 90000; final Set<String> keys = Collections.singleton("myKey"); GridTestUtils.runMultiThreaded(new Runnable() { @Override public void run() { for (int i = 0; i < cnt; i++) { final Map<String, EntryProcessorResult<Integer>> res = cache.invokeAll(keys, new CacheEntryProcessor<String, Integer, Integer>() { @Override public Integer process(MutableEntry<String, Integer> entry, Object... objects) throws EntryProcessorException { Integer val = entry.getValue(); if (val == null) val = 0; val++; entry.setValue(val); return val; } }); assertEquals(1, res.size()); } } }, threadCnt, "testInvokeAllMultithreaded"); assertEquals(cnt*threadCnt, (long)cache.get("myKey")); } {code} Run this test as part of GridCacheAtomicFullApiSelfTest.java. > IgniteCache.invokeAll returns empty result set in ATOMIC cache > -------------------------------------------------------------- > > Key: IGNITE-3955 > URL: https://issues.apache.org/jira/browse/IGNITE-3955 > Project: Ignite > Issue Type: Bug > Components: cache > Affects Versions: 1.7 > Reporter: Pavel Tupitsyn > Fix For: 1.8 > > > When entry processor is invoked from multiple threads, result set is > sometimes empty. > This happens with ATOMIC cache, but not with TRANSACTIONAL. > To reproduce, paste the following into GridCacheAbstractFullApiSelfTest.java: > {code} > public void testInvokeAllMultithreaded() throws Exception { > final IgniteCache<String, Integer> cache = jcache(); > final int threadCnt = 4; > final int cnt = 90000; > final Set<String> keys = Collections.singleton("myKey"); > GridTestUtils.runMultiThreaded(new Runnable() { > @Override public void run() { > for (int i = 0; i < cnt; i++) { > final Map<String, EntryProcessorResult<Integer>> res = > cache.invokeAll(keys, new CacheEntryProcessor<String, > Integer, Integer>() { > @Override > public Integer process(MutableEntry<String, > Integer> entry, > Object... objects) throws > EntryProcessorException { > Integer val = entry.getValue(); > if (val == null) > val = 0; > val++; > entry.setValue(val); > return val; > } > }); > assertEquals(1, res.size()); > } > } > }, threadCnt, "testInvokeAllMultithreaded"); > assertEquals(cnt*threadCnt, cache.get("myKey")); > } > {code} > Run this test as part of GridCacheAtomicFullApiSelfTest.java. -- This message was sent by Atlassian JIRA (v6.3.4#6332)