ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Denis Garus <garus....@gmail.com>
Subject Creation of dynamic cache
Date Fri, 03 Aug 2018 11:54:21 GMT
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/

Mime
View raw message