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/