You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by av...@apache.org on 2016/06/21 16:26:54 UTC
[8/8] ignite git commit: IGNITE-3230 External addresses are not
registered in IP finder
IGNITE-3230 External addresses are not registered in IP finder
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/404fa413
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/404fa413
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/404fa413
Branch: refs/heads/ignite-3230
Commit: 404fa4132736fd426ac1b65a511f4a787e0905e3
Parents: 9881863
Author: Anton Vinogradov <av...@apache.org>
Authored: Tue Jun 21 19:26:19 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Tue Jun 21 19:26:19 2016 +0300
----------------------------------------------------------------------
.../ignite/internal/util/IgniteUtils.java | 45 +++++++--
.../ignite/spi/discovery/tcp/ServerImpl.java | 5 +-
.../spi/discovery/tcp/TcpDiscoveryImpl.java | 3 +-
.../cluster/GridAddressResolverSelfTest.java | 97 ++++++++++++++++++++
.../testsuites/IgniteKernalSelfTestSuite.java | 2 +
5 files changed, 140 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/404fa413/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index faf026b..fa18923 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -8655,16 +8655,10 @@ public abstract class IgniteUtils {
InetSocketAddress sockAddr = new InetSocketAddress(addr, port);
if (!sockAddr.isUnresolved()) {
- try {
- Collection<InetSocketAddress> extAddrs0 = addrRslvr.getExternalAddresses(sockAddr);
+ Collection<InetSocketAddress> extAddrs0 = resolveAddress(addrRslvr, sockAddr);
- if (extAddrs0 != null)
- extAddrs.addAll(extAddrs0);
- }
- catch (IgniteCheckedException e) {
- throw new IgniteSpiException("Failed to get mapped external addresses " +
- "[addrRslvr=" + addrRslvr + ", addr=" + addr + ']', e);
- }
+ if (extAddrs0 != null)
+ extAddrs.addAll(extAddrs0);
}
}
@@ -8672,6 +8666,39 @@ public abstract class IgniteUtils {
}
/**
+ * @param addrRslvr Address resolver.
+ * @param sockAddr Addresses.
+ * @return Resolved addresses.
+ */
+ public static Collection<InetSocketAddress> resolveAddresses(AddressResolver addrRslvr,
+ Collection<InetSocketAddress> sockAddr) {
+ if (addrRslvr == null)
+ return sockAddr;
+
+ Collection<InetSocketAddress> resolved = new HashSet<>();
+
+ for (InetSocketAddress address :sockAddr)
+ resolved.addAll(resolveAddress(addrRslvr, address));
+
+ return resolved;
+ }
+
+ /**
+ * @param addrRslvr Address resolver.
+ * @param sockAddr Addresses.
+ * @return Resolved addresses.
+ */
+ private static Collection<InetSocketAddress> resolveAddress(AddressResolver addrRslvr, InetSocketAddress sockAddr) {
+ try {
+ return addrRslvr.getExternalAddresses(sockAddr);
+ }
+ catch (IgniteCheckedException e) {
+ throw new IgniteSpiException("Failed to get mapped external addresses " +
+ "[addrRslvr=" + addrRslvr + ", addr=" + sockAddr + ']', e);
+ }
+ }
+
+ /**
* Returns string representation of node addresses.
*
* @param node Grid node.
http://git-wip-us.apache.org/repos/asf/ignite/blob/404fa413/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index 2ce2e7b..7d4bac5 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -130,10 +130,10 @@ import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessa
import org.jetbrains.annotations.Nullable;
import org.jsr166.ConcurrentHashMap8;
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISCOVERY_HISTORY_SIZE;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_SERVICES_COMPATIBILITY_MODE;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
import static org.apache.ignite.IgniteSystemProperties.getInteger;
import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
@@ -4081,7 +4081,8 @@ class ServerImpl extends TcpDiscoveryImpl {
if (msg.verified() || !ring.hasRemoteNodes() || msg.senderNodeId() != null) {
if (spi.ipFinder.isShared() && !ring.hasRemoteNodes()) {
try {
- spi.ipFinder.unregisterAddresses(locNode.socketAddresses());
+ spi.ipFinder.unregisterAddresses(
+ U.resolveAddresses(spi.getAddressResolver(), locNode.socketAddresses()));
}
catch (IgniteSpiException e) {
U.error(log, "Failed to unregister local node address from IP finder.", e);
http://git-wip-us.apache.org/repos/asf/ignite/blob/404fa413/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
index 41086d1..30b83e5 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
@@ -265,7 +265,8 @@ abstract class TcpDiscoveryImpl {
while (true) {
try {
- spi.ipFinder.initializeLocalAddresses(locNode.socketAddresses());
+ spi.ipFinder.initializeLocalAddresses(
+ U.resolveAddresses(spi.getAddressResolver(), locNode.socketAddresses()));
// Success.
break;
http://git-wip-us.apache.org/repos/asf/ignite/blob/404fa413/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
new file mode 100644
index 0000000..d8fd767
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.internal.processors.cluster;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.configuration.AddressResolver;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.apache.ignite.testframework.junits.common.GridCommonTest;
+
+/**
+ * Address Resolver test.
+ */
+@GridCommonTest(group = "Kernal Self")
+public class GridAddressResolverSelfTest extends GridCommonAbstractTest {
+ /** */
+ private final InetSocketAddress addr0 = new InetSocketAddress("test0.com", 5000);
+
+ /** */
+ private final InetSocketAddress addr1 = new InetSocketAddress("test1.com", 5000);
+
+ /** Ip finder. */
+ private static final TcpDiscoveryVmIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(final String gridName) throws Exception {
+ IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+ TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
+ discoSpi.setIpFinder(IP_FINDER);
+ cfg.setDiscoverySpi(discoSpi);
+
+ cfg.setAddressResolver(new AddressResolver() {
+ @Override public Collection<InetSocketAddress> getExternalAddresses(
+ InetSocketAddress addr) throws IgniteCheckedException {
+ Set<InetSocketAddress> set = new HashSet<>();
+
+ set.add(addr);
+ set.add(gridName.contains("0") ? addr0 : addr1);
+
+ return set;
+ }
+ });
+
+ return cfg;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ super.afterTest();
+
+ stopAllGrids();
+ }
+
+ /** */
+ public void test() throws Exception {
+ startGrid(0);
+
+ assertFalse(IP_FINDER.getRegisteredAddresses().contains(addr1));
+
+ startGrid(1);
+
+ assertTrue(IP_FINDER.getRegisteredAddresses().contains(addr0));
+ assertTrue(IP_FINDER.getRegisteredAddresses().contains(addr1));
+
+ stopGrid(0, true);
+
+ assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ return !IP_FINDER.getRegisteredAddresses().contains(addr0);
+ }
+ }, 70000));
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/404fa413/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
index cfb9f1c..d990b32 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
@@ -46,6 +46,7 @@ import org.apache.ignite.internal.managers.discovery.GridDiscoveryManagerSelfTes
import org.apache.ignite.internal.managers.discovery.IgniteTopologyPrintFormatSelfTest;
import org.apache.ignite.internal.managers.events.GridEventStorageManagerSelfTest;
import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManagerSelfTest;
+import org.apache.ignite.internal.processors.cluster.GridAddressResolverSelfTest;
import org.apache.ignite.internal.processors.cluster.GridUpdateNotifierSelfTest;
import org.apache.ignite.internal.processors.port.GridPortProcessorSelfTest;
import org.apache.ignite.internal.processors.service.GridServiceClientNodeTest;
@@ -120,6 +121,7 @@ public class IgniteKernalSelfTestSuite extends TestSuite {
suite.addTestSuite(GridKernalConcurrentAccessStopSelfTest.class);
suite.addTestSuite(IgniteConcurrentEntryProcessorAccessStopTest.class);
suite.addTestSuite(GridUpdateNotifierSelfTest.class);
+ suite.addTestSuite(GridAddressResolverSelfTest.class);
suite.addTestSuite(IgniteUpdateNotifierPerClusterSettingSelfTest.class);
suite.addTestSuite(GridLocalEventListenerSelfTest.class);
suite.addTestSuite(IgniteTopologyPrintFormatSelfTest.class);