Description
The test below reproduces the issue:
public void testClientJoinWhenActivationInProgress() throws Exception { Ignite srv = startGrids(5); srv.active(true); srv.createCaches(Arrays.asList(cacheConfigurations1())); Map<Integer, Integer> cacheData = new LinkedHashMap<>(); for (int i = 1; i <= 100; i++) { for (CacheConfiguration ccfg : cacheConfigurations1()) { srv.cache(ccfg.getName()).put(-i, i); cacheData.put(-i, i); } } stopAllGrids(); srv = startGrids(5); final CountDownLatch clientStartLatch = new CountDownLatch(1); IgniteInternalFuture clStartFut = GridTestUtils.runAsync(new Runnable() { @Override public void run() { try { clientStartLatch.await(); Thread.sleep(10); client = true; Ignite cl = startGrid("client0"); IgniteCache<Object, Object> atomicCache = cl.cache(CACHE_NAME_PREFIX + '0'); IgniteCache<Object, Object> txCache = cl.cache(CACHE_NAME_PREFIX + '1'); assertEquals(100, atomicCache.size()); assertEquals(100, txCache.size()); } catch (Exception e) { log.error("Error occurred", e); } } }, "client-starter-thread"); clientStartLatch.countDown(); srv.active(true); clStartFut.get(); }
Expected behavior: test finishes successfully.
Actual behavior: test hangs on waiting for client start future to complete while "client-started-thread" will be hanging on obtaining a reference to the first cache.