You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by mikle-a <an...@inbox.ru> on 2020/02/03 14:26:42 UTC

Different data regions on nodes

Hi there!

Is it allowed to have different data regions on server nodes?

Example definition

For instance, I want to have the following cluster:
1) server node #1 with data region "region1"
2) server node #2 with data regions "region1" and "region2"
3) server node #3 with data regions "region1" and "region2" and local cache
"testCache" consuming "region2"

Example as code:



Scenario

Then I sequentially do the following:
1) Run Server1
2) Run Server2 and await servers to form cluster - Topology snapshot [...
servers=2 ...]
3) Run Server3 - after that step, Server1 is halted by itself with following
errors:

class org.apache.ignite.IgniteCheckedException: Requested DataRegion is not
configured: region2
	at
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.dataRegion(IgniteCacheDatabaseSharedManager.java:688)
	at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.startCacheGroup(GridCacheProcessor.java:2224)
	at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStart(GridCacheProcessor.java:2146)
	at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.startReceivedCaches(GridCacheProcessor.java:2070)
	at
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:762)
	at
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:2681)
	at
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2553)
	at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
	at java.lang.Thread.run(Thread.java:748)

SEVERE: JVM will be halted immediately due to the failure:
[failureCtx=FailureContext [type=SYSTEM_WORKER_TERMINATION, err=class
o.a.i.IgniteCheckedException: Requested DataRegion is not configured:
region2]]

So the question is how to make it work? What am I doing wrong?

Thanks in advance.



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Re: Different data regions on nodes

Posted by mikle-a <an...@inbox.ru>.
Example as code:

package com.test.ignite.dataregions;

import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;

public class DifferentDataRegions {

    public static class Server1 {
        public static void main(String[] args) {
            final DataRegionConfiguration region1Config = new
DataRegionConfiguration();
            region1Config.setName("region1");

            final DataStorageConfiguration storageConfiguration = new
DataStorageConfiguration();
            storageConfiguration.setDataRegionConfigurations(region1Config);

            final IgniteConfiguration igniteConfig = new
IgniteConfiguration()
                    .setIgniteInstanceName("server1")
                    .setDataStorageConfiguration(storageConfiguration);

            final Ignite server1 = Ignition.start(igniteConfig);
        }
    }

    public static class Server2 {
        public static void main(String[] args) {
            final DataRegionConfiguration region1Config = new
DataRegionConfiguration();
            region1Config.setName("region1");

            final DataRegionConfiguration region2Config = new
DataRegionConfiguration();
            region2Config.setName("region2");

            final DataStorageConfiguration storageConfiguration = new
DataStorageConfiguration();
            storageConfiguration.setDataRegionConfigurations(region1Config,
region2Config);

            final IgniteConfiguration config = new IgniteConfiguration()
                    .setIgniteInstanceName("server2")
                    .setDataStorageConfiguration(storageConfiguration);

            final Ignite server2 = Ignition.start(config);
        }
    }

    public static class Server3 {
        public static void main(String[] args) {
            final DataRegionConfiguration region2Config = new
DataRegionConfiguration();
            region2Config.setName("region2");

            final DataStorageConfiguration storageConfiguration = new
DataStorageConfiguration();
            storageConfiguration.setDataRegionConfigurations(region2Config);

            final CacheConfiguration<String, String> cacheConfig = new
CacheConfiguration<>();
            cacheConfig.setName("testCache");
            cacheConfig.setDataRegionName(region2Config.getName());
            cacheConfig.setCacheMode(CacheMode.LOCAL);

            final IgniteConfiguration config = new IgniteConfiguration()
                    .setIgniteInstanceName("server3")
                    .setDataStorageConfiguration(storageConfiguration)
                    .setCacheConfiguration(cacheConfig);

            final Ignite server3 = Ignition.start(config);
        }
    }
}



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Re: Different data regions on nodes

Posted by mikle-a <an...@inbox.ru>.
Have found that it could be solved with node filters and attributes:

mark server with special custom attribute:
new IgniteConfiguration().setUserAttributes(Collections.singletonMap("role",
"hasRegion"))

specify node filter for the cache, which selects only servers with custom
attribute mentioned above:
new CacheConfiguration<>().setNodeFilter((IgnitePredicate<ClusterNode>)
clusterNode ->
                   
clusterNode.attributes().get("role").equals("hasRegion2"));

Is it proper way to solve this problem?



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/