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 <[email protected]>:
> 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/
>