Hello, Igniters!
If an error occurred during of creation dynamic cache, the CacheAffinitySharedManager#processCacheStartRequests method will try to rollback cache start routine. ``` try { if (startCache) { cctx.cache().prepareCacheStart(req.startCacheConfiguration(), cacheDesc, nearCfg, evts.topologyVersion(), req.disabledAfterStart()); //some code } } catch (IgniteCheckedException e) { U.error(log, "Failed to initialize cache. Will try to rollback cache start routine. " + "[cacheName=" + req.cacheName() + ']', e); cctx.cache().closeCaches(Collections.singleton(req.cacheName()), false); cctx.cache().completeCacheStartFuture(req, false, e); } ``` Assume, that GridDhtPartitionsExchangeFuture will finish without any error because of the exception is just logged. Is this way right? What should return the Ignite#createCache method in this case? I can't check what could return in that case because it just doesn't work this way now. In the further, we're getting the critical error that stops ExchangeWorker in a test environment or stops node in a production environment. Reproducer: ``` package org.apache.ignite.internal.processors.cache; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; public class CreateCacheFreezeTest extends GridCommonAbstractTest { public void test() throws Exception { IgniteEx ignite = startGrid(0); U.registerMBean(ignite.context().config().getMBeanServer(), ignite.name(), "FIRST_CACHE", "org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl", new DummyMBeanImpl(), DummyMBean.class); GridTestUtils.assertThrowsWithCause(() -> { ignite.createCache(new CacheConfiguration<>("FIRST_CACHE")); return 0; }, IgniteCheckedException.class); //The creation of SECOND_CACHE will hang because of ExchangeWorker is stopped assertNotNull(ignite.createCache(new CacheConfiguration<>("SECOND_CACHE"))); } public interface DummyMBean { void noop(); } static class DummyMBeanImpl implements DummyMBean { @Override public void noop() { } } } ``` -- Sent from: http://apache-ignite-developers.2346864.n4.nabble.com/