Hello, Slava! Yes, I agree with you. If we get rid of this catch block, everything works well. But, IgniteAbstractDynamicCacheStartFailTest isn't honest enough because it can't expose this failure. We should simulate not only RuntimeException but IgniteCheckedException as well. I want to add a simulation of IgniteCheckedException in during of cache creation to IgniteAbstractDynamicCacheStartFailTest and delete the catch block from CacheAffinitySharedManager#processCacheStartRequests method.
What are your thoughts? вт, 7 авг. 2018 г. в 15:31, Вячеслав Коптилин <slava.kopti...@gmail.com>: > Hello Denis, > > It seems we can just comment out the following catch block: > ``` > 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); > //} > ``` > I think that this exception should be propery handled by > GridDhtPartitionsExchangeFuture#onCacheChangeRequest(boolean crd) method. > (please take a look at this JIRA ticket: > https://issues.apache.org/jira/browse/IGNITE-1094) > > Best regards, > Slava. > > > пт, 3 авг. 2018 г. в 14:54, Denis Garus <garus....@gmail.com>: > > > 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/ > > >