#ignite-1109: add consistentId to IgniteConfiguration.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/4f855867 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/4f855867 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/4f855867 Branch: refs/heads/ignite-1109 Commit: 4f85586738a434b8fa6c23be81c0b2cd8f267703 Parents: 98b6487 Author: ivasilinets <ivasilin...@gridgain.com> Authored: Thu Jul 9 12:29:57 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Thu Jul 9 12:29:57 2015 +0300 ---------------------------------------------------------------------- .../java/org/apache/ignite/IgniteCache.java | 3 +- .../affinity/AffinityNodeHashResolver.java | 6 ++ .../rendezvous/RendezvousAffinityFunction.java | 23 +++++- .../configuration/CacheConfiguration.java | 3 +- .../configuration/IgniteConfiguration.java | 26 +++++++ .../apache/ignite/internal/IgniteKernal.java | 2 + .../ignite/internal/IgniteNodeAttributes.java | 3 + .../processors/cache/GridCacheProcessor.java | 34 +++------ .../processors/cache/IgniteInternalCache.java | 3 +- .../spi/discovery/tcp/TcpDiscoverySpi.java | 3 +- .../tcp/internal/TcpDiscoveryNode.java | 15 +++- ...DiscoveryNodeConfigConsistentIdSelfTest.java | 75 ++++++++++++++++++++ .../IgniteSpiDiscoverySelfTestSuite.java | 1 + 13 files changed, 164 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/IgniteCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java index c8d6d7a..750c71d 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java @@ -34,6 +34,7 @@ import javax.cache.event.*; import javax.cache.expiry.*; import javax.cache.integration.*; import javax.cache.processor.*; +import java.io.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.locks.*; @@ -559,7 +560,7 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS * the left nodes, and that nodes are restarted before * {@link CacheConfiguration#getRebalanceDelay() rebalanceDelay} expires. To place nodes * on the same place in consistent hash ring, use - * {@link RendezvousAffinityFunction#setHashIdResolver(AffinityNodeHashResolver)} to make sure that + * {@link IgniteConfiguration#setConsistentId(Serializable)} to make sure that * a node maps to the same hash ID if re-started. * <p> * See {@link CacheConfiguration#getRebalanceDelay()} for more information on how to configure http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityNodeHashResolver.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityNodeHashResolver.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityNodeHashResolver.java index d00b043..cad4b55 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityNodeHashResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityNodeHashResolver.java @@ -18,6 +18,7 @@ package org.apache.ignite.cache.affinity; import org.apache.ignite.cluster.*; +import org.apache.ignite.configuration.*; import java.io.*; @@ -31,7 +32,11 @@ import java.io.*; * Note that on case clients exist they will query this object from the server and use it for affinity calculation. * Therefore you must ensure that server and clients can marshal and unmarshal this object in portable format, * i.e. all parties have object class(es) configured as portable. + * + * @deprecated Use {@link IgniteConfiguration#setConsistentId(Serializable)} + * instead (refer to its JavaDoc for details). */ +@Deprecated public interface AffinityNodeHashResolver extends Serializable { /** * Resolve alternate hash value for the given Grid node. @@ -39,5 +44,6 @@ public interface AffinityNodeHashResolver extends Serializable { * @param node Grid node. * @return Resolved hash ID. */ + @Deprecated public Object resolve(ClusterNode node); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java index 2b26630..862caa4 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java @@ -20,6 +20,7 @@ package org.apache.ignite.cache.affinity.rendezvous; import org.apache.ignite.*; import org.apache.ignite.cache.affinity.*; import org.apache.ignite.cluster.*; +import org.apache.ignite.configuration.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; @@ -88,7 +89,7 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza private IgniteBiPredicate<ClusterNode, ClusterNode> backupFilter; /** Hash ID resolver. */ - private AffinityNodeHashResolver hashIdRslvr = new AffinityNodeAddressHashResolver(); + private AffinityNodeHashResolver hashIdRslvr = null; /** Ignite instance. */ @IgniteInstanceResource @@ -204,6 +205,7 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza * * @return Hash ID resolver. */ + @Deprecated public AffinityNodeHashResolver getHashIdResolver() { return hashIdRslvr; } @@ -219,7 +221,11 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza * repartitioning. * * @param hashIdRslvr Hash ID resolver. + * + * @deprecated Use {@link IgniteConfiguration#setConsistentId(Serializable)} + * instead (refer to its JavaDoc for details). */ + @Deprecated public void setHashIdResolver(AffinityNodeHashResolver hashIdRslvr) { this.hashIdRslvr = hashIdRslvr; } @@ -273,6 +279,19 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza } /** + * Resolves node hash. + * + * @param node Cluster node; + * @return Node hash. + */ + public Object resolveNodeHash(ClusterNode node) { + if (hashIdRslvr != null) + return hashIdRslvr.resolve(node); + else + return node.consistentId(); + } + + /** * Returns collection of nodes (primary first) for specified partition. */ public List<ClusterNode> assignPartition(int part, List<ClusterNode> nodes, int backups, @@ -285,7 +304,7 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza MessageDigest d = digest.get(); for (ClusterNode node : nodes) { - Object nodeHash = hashIdRslvr.resolve(node); + Object nodeHash = resolveNodeHash(node); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java index 63c7269..183b673 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java @@ -33,6 +33,7 @@ import org.jetbrains.annotations.*; import javax.cache.*; import javax.cache.configuration.*; import javax.cache.expiry.*; +import java.io.*; import java.util.*; /** @@ -1310,7 +1311,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { * For better efficiency user should usually make sure that new nodes get placed on * the same place of consistent hash ring as the left nodes, and that nodes are * restarted before this delay expires. To place nodes on the same place in consistent hash ring, - * use {@link RendezvousAffinityFunction#setHashIdResolver(AffinityNodeHashResolver)} + * use {@link IgniteConfiguration#setConsistentId(Serializable)} * to make sure that a node maps to the same hash ID event if restarted. As an example, * node IP address and port combination may be used in this case. * <p> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java index 2d36c7a..34995e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java @@ -59,6 +59,7 @@ import javax.cache.expiry.*; import javax.cache.integration.*; import javax.cache.processor.*; import javax.management.*; +import java.io.*; import java.lang.management.*; import java.util.*; @@ -400,6 +401,9 @@ public class IgniteConfiguration { /** Cache store session listeners. */ private Factory<CacheStoreSessionListener>[] storeSesLsnrs; + /** Consistent globally unique node ID which survives node restarts. */ + private Serializable consistentId; + /** * Creates valid grid configuration with all default values. */ @@ -491,6 +495,7 @@ public class IgniteConfiguration { utilityCachePoolSize = cfg.getUtilityCacheThreadPoolSize(); waitForSegOnStart = cfg.isWaitForSegmentOnStart(); warmupClos = cfg.getWarmupClosure(); + consistentId = cfg.getConsistentId(); } /** @@ -558,6 +563,27 @@ public class IgniteConfiguration { } /** + * Sets consistent globally unique node ID which survives node restarts. + * + * @param consistentId Node consistent id. + * @return {@code this} for chaining. + */ + public IgniteConfiguration setConsistentId(Serializable consistentId) { + this.consistentId = consistentId; + + return this; + } + + /** + * Gets consistent globally unique node ID which survives node restarts. + * + * @return Node consistent id. + */ + public Serializable getConsistentId() { + return this.consistentId; + } + + /** * Should return any user-defined attributes to be added to this node. These attributes can * then be accessed on nodes by calling {@link ClusterNode#attribute(String)} or * {@link ClusterNode#attributes()} methods. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index d6ddf79..086fa53 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -1167,6 +1167,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { add(ATTR_CONSISTENCY_CHECK_SKIPPED, getBoolean(IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK)); + add(ATTR_NODE_CONSISTENT_ID, cfg.getConsistentId()); + // Build a string from JVM arguments, because parameters with spaces are split. SB jvmArgs = new SB(512); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/internal/IgniteNodeAttributes.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteNodeAttributes.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteNodeAttributes.java index 928db5e..10b8df0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteNodeAttributes.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteNodeAttributes.java @@ -132,6 +132,9 @@ public final class IgniteNodeAttributes { /** Configuration consistency check disabled flag. */ public static final String ATTR_CONSISTENCY_CHECK_SKIPPED = ATTR_PREFIX + ".consistency.check.skipped"; + /** Node consistent id. */ + public static final String ATTR_NODE_CONSISTENT_ID = ATTR_PREFIX + ".consistent.id"; + /** * Enforces singleton. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index de1eac2..485e060 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -159,15 +159,11 @@ public class GridCacheProcessor extends GridProcessorAdapter { if (cfg.getCacheMode() == PARTITIONED) { RendezvousAffinityFunction aff = new RendezvousAffinityFunction(); - aff.setHashIdResolver(new AffinityNodeAddressHashResolver()); - cfg.setAffinity(aff); } else if (cfg.getCacheMode() == REPLICATED) { RendezvousAffinityFunction aff = new RendezvousAffinityFunction(false, 512); - aff.setHashIdResolver(new AffinityNodeAddressHashResolver()); - cfg.setAffinity(aff); cfg.setBackups(Integer.MAX_VALUE); @@ -175,16 +171,6 @@ public class GridCacheProcessor extends GridProcessorAdapter { else cfg.setAffinity(new LocalAffinityFunction()); } - else { - if (cfg.getCacheMode() == PARTITIONED) { - if (cfg.getAffinity() instanceof RendezvousAffinityFunction) { - RendezvousAffinityFunction aff = (RendezvousAffinityFunction)cfg.getAffinity(); - - if (aff.getHashIdResolver() == null) - aff.setHashIdResolver(new AffinityNodeAddressHashResolver()); - } - } - } if (cfg.getCacheMode() == REPLICATED) cfg.setBackups(Integer.MAX_VALUE); @@ -2257,25 +2243,25 @@ public class GridCacheProcessor extends GridProcessorAdapter { if (cfg.getAffinity() instanceof RendezvousAffinityFunction) { RendezvousAffinityFunction aff = (RendezvousAffinityFunction)cfg.getAffinity(); - AffinityNodeHashResolver hashIdRslvr = aff.getHashIdResolver(); - - assert hashIdRslvr != null; - - Object nodeHashObj = hashIdRslvr.resolve(node); + Object nodeHashObj = aff.resolveNodeHash(node); for (ClusterNode topNode : ctx.discovery().allNodes()) { - Object topNodeHashObj = hashIdRslvr.resolve(topNode); + Object topNodeHashObj = aff.resolveNodeHash(topNode); if (nodeHashObj.hashCode() == topNodeHashObj.hashCode()) { + String hashIdRslvrName = ""; + + if (aff.getHashIdResolver() != null) + hashIdRslvrName = ", hashIdResolverClass=" + + aff.getHashIdResolver().getClass().getName(); + String errMsg = "Failed to add node to topology because it has the same hash code for " + "partitioned affinity as one of existing nodes [cacheName=" + U.maskName(cfg.getName()) + - ", hashIdResolverClass=" + hashIdRslvr.getClass().getName() + - ", existingNodeId=" + topNode.id() + ']'; + hashIdRslvrName + ", existingNodeId=" + topNode.id() + ']'; String sndMsg = "Failed to add node to topology because it has the same hash code for " + "partitioned affinity as one of existing nodes [cacheName=" + U.maskName(cfg.getName()) + - ", hashIdResolverClass=" + hashIdRslvr.getClass().getName() + ", existingNodeId=" + - topNode.id() + ']'; + hashIdRslvrName + ", existingNodeId=" + topNode.id() + ']'; return new IgniteNodeValidationResult(topNode.id(), errMsg, sndMsg); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java index 9972f92..5d8d7fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.*; import javax.cache.*; import javax.cache.expiry.*; import javax.cache.processor.*; +import java.io.*; import java.sql.*; import java.util.*; import java.util.Date; @@ -1456,7 +1457,7 @@ public interface IgniteInternalCache<K, V> extends Iterable<Cache.Entry<K, V>> { * the left nodes, and that nodes are restarted before * {@link CacheConfiguration#getRebalanceDelay() rebalanceDelay} expires. To place nodes * on the same place in consistent hash ring, use - * {@link org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction#setHashIdResolver(AffinityNodeHashResolver)} to make sure that + * {@link IgniteConfiguration#setConsistentId(Serializable)} to make sure that * a node maps to the same hash ID if re-started. * <p> * See {@link org.apache.ignite.configuration.CacheConfiguration#getRebalanceDelay()} for more information on how to configure http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 7663fe6..1e2c365 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -849,7 +849,8 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T addrs.get2(), srvPort, metricsProvider, - locNodeVer); + locNodeVer, + ignite.configuration().getConsistentId()); if (addExtAddrAttr) { Collection<InetSocketAddress> extAddrs = addrRslvr == null ? null : http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java index ed954af..065b3c0 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java @@ -131,11 +131,12 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste * @param discPort Port. * @param metricsProvider Metrics provider. * @param ver Version. + * @param consistentId Node consistent id. */ public TcpDiscoveryNode(UUID id, Collection<String> addrs, Collection<String> hostNames, int discPort, - DiscoveryMetricsProvider metricsProvider, IgniteProductVersion ver) + DiscoveryMetricsProvider metricsProvider, IgniteProductVersion ver, Serializable consistentId) { assert id != null; assert !F.isEmpty(addrs); @@ -152,7 +153,12 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste this.discPort = discPort; this.metricsProvider = metricsProvider; this.ver = ver; - consistentId = U.consistentId(sortedAddrs, discPort); + + if (consistentId != null) + this.consistentId = consistentId; + else + this.consistentId = U.consistentId(sortedAddrs, discPort); + metrics = metricsProvider.metrics(); cacheMetrics = metricsProvider.cacheMetrics(); sockAddrs = U.toSocketAddresses(this, discPort); @@ -501,7 +507,10 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste sockAddrs = U.toSocketAddresses(this, discPort); - consistentId = U.consistentId(addrs, discPort); + if (attrs.containsKey(ATTR_NODE_CONSISTENT_ID)) + consistentId = attrs.get(ATTR_NODE_CONSISTENT_ID); + else + consistentId = U.consistentId(addrs, discPort); // Cluster metrics byte[] mtr = U.readByteArray(in); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeConfigConsistentIdSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeConfigConsistentIdSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeConfigConsistentIdSelfTest.java new file mode 100644 index 0000000..4610a2d --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeConfigConsistentIdSelfTest.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.spi.discovery.tcp; + +import org.apache.ignite.configuration.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; +import org.apache.ignite.testframework.junits.common.*; + +import java.io.*; + +/** + * Test for {@link IgniteConfiguration#consistentId}. + */ +public class TcpDiscoveryNodeConfigConsistentIdSelfTest extends GridCommonAbstractTest { + /** IP finder. */ + private TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + + cfg.setLocalHost("0.0.0.0"); + + cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder)); + + cfg.setConsistentId(gridName); + + return cfg; + } + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + startGrids(1); + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + stopAllGrids(); + } + + /** + * @throws Exception If failed. + */ + public void testConsistentId() throws Exception { + Object id0 = grid(0).localNode().consistentId(); + Serializable id1 = grid(0).configuration().getConsistentId(); + + assertEquals(id0, id1); + assertEquals(grid(0).name(), id0); + + for (int i = 0; i < 10; ++i) { + stopAllGrids(); + + startGrids(1); + + assertEquals(id0, grid(0).localNode().consistentId()); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4f855867/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java index 6f59f14..b7014ad 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java @@ -56,6 +56,7 @@ public class IgniteSpiDiscoverySelfTestSuite extends TestSuite { suite.addTest(new TestSuite(TcpClientDiscoverySpiMulticastTest.class)); suite.addTest(new TestSuite(TcpDiscoveryNodeConsistentIdSelfTest.class)); + suite.addTest(new TestSuite(TcpDiscoveryNodeConfigConsistentIdSelfTest.class)); suite.addTest(new TestSuite(TcpDiscoveryRestartTest.class)); suite.addTest(new TestSuite(TcpDiscoveryMultiThreadedTest.class));