[ https://issues.apache.org/jira/browse/IGNITE-5227?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mikhail Cherkasov updated IGNITE-5227: -------------------------------------- Description: A simple test reproducing this error: {code} /** * @throws Exception if failed. */ public void testBatchUnlock() throws Exception { startGrid(0); grid(0).createCache(new CacheConfiguration<Integer, Integer>(DEFAULT_CACHE_NAME) .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)); try { final CountDownLatch releaseLatch = new CountDownLatch(1); IgniteInternalFuture<Object> fut = GridTestUtils.runAsync(new Callable<Object>() { @Override public Object call() throws Exception { IgniteCache<Object, Object> cache = grid(0).cache(null); Lock lock = cache.lock("key"); try { lock.lock(); releaseLatch.await(); } finally { lock.unlock(); } return null; } }); Map<String, String> putMap = new LinkedHashMap<>(); putMap.put("key", "trigger"); for (int i = 0; i < 10_000; i++) putMap.put("key-" + i, "value"); IgniteCache<Object, Object> asyncCache = grid(0).cache(null).withAsync(); asyncCache.putAll(putMap); IgniteFuture<Object> resFut = asyncCache.future(); Thread.sleep(1000); releaseLatch.countDown(); fut.get(); resFut.get(); } finally { stopAllGrids(); } {code} We should replace a recursive call with a simple iteration over the linked list. was: A simple test reproducing this error: {code} /** * @throws Exception if failed. */ public void testBatchUnlock() throws Exception { startGrid(0); try { final CountDownLatch releaseLatch = new CountDownLatch(1); IgniteInternalFuture<Object> fut = GridTestUtils.runAsync(new Callable<Object>() { @Override public Object call() throws Exception { IgniteCache<Object, Object> cache = grid(0).cache(null); Lock lock = cache.lock("key"); try { lock.lock(); releaseLatch.await(); } finally { lock.unlock(); } return null; } }); Map<String, String> putMap = new LinkedHashMap<>(); putMap.put("key", "trigger"); for (int i = 0; i < 10_000; i++) putMap.put("key-" + i, "value"); IgniteCache<Object, Object> asyncCache = grid(0).cache(null).withAsync(); asyncCache.putAll(putMap); IgniteFuture<Object> resFut = asyncCache.future(); Thread.sleep(1000); releaseLatch.countDown(); fut.get(); resFut.get(); } finally { stopAllGrids(); } {code} We should replace a recursive call with a simple iteration over the linked list. > StackOverflowError in GridCacheMapEntry#checkOwnerChanged() > ----------------------------------------------------------- > > Key: IGNITE-5227 > URL: https://issues.apache.org/jira/browse/IGNITE-5227 > Project: Ignite > Issue Type: Bug > Affects Versions: 1.6 > Reporter: Alexey Goncharuk > Assignee: Mikhail Cherkasov > Priority: Critical > Fix For: 2.1 > > > A simple test reproducing this error: > {code} > /** > * @throws Exception if failed. > */ > public void testBatchUnlock() throws Exception { > startGrid(0); > grid(0).createCache(new CacheConfiguration<Integer, > Integer>(DEFAULT_CACHE_NAME) > .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)); > try { > final CountDownLatch releaseLatch = new CountDownLatch(1); > IgniteInternalFuture<Object> fut = GridTestUtils.runAsync(new > Callable<Object>() { > @Override public Object call() throws Exception { > IgniteCache<Object, Object> cache = grid(0).cache(null); > Lock lock = cache.lock("key"); > try { > lock.lock(); > releaseLatch.await(); > } > finally { > lock.unlock(); > } > return null; > } > }); > Map<String, String> putMap = new LinkedHashMap<>(); > putMap.put("key", "trigger"); > for (int i = 0; i < 10_000; i++) > putMap.put("key-" + i, "value"); > IgniteCache<Object, Object> asyncCache = > grid(0).cache(null).withAsync(); > asyncCache.putAll(putMap); > IgniteFuture<Object> resFut = asyncCache.future(); > Thread.sleep(1000); > releaseLatch.countDown(); > fut.get(); > resFut.get(); > } > finally { > stopAllGrids(); > } > {code} > We should replace a recursive call with a simple iteration over the linked > list. -- This message was sent by Atlassian JIRA (v6.3.15#6346)