Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 1980F200B27 for ; Wed, 22 Jun 2016 15:17:24 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 18170160A2E; Wed, 22 Jun 2016 13:17:24 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3BA4E160A64 for ; Wed, 22 Jun 2016 15:17:23 +0200 (CEST) Received: (qmail 92380 invoked by uid 500); 22 Jun 2016 13:17:22 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 92322 invoked by uid 99); 22 Jun 2016 13:17:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 22 Jun 2016 13:17:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id E7E43DFEDA; Wed, 22 Jun 2016 13:17:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: vozerov@apache.org To: commits@ignite.apache.org Date: Wed, 22 Jun 2016 13:17:21 -0000 Message-Id: <329401908eeb40919c475ddd2ea3eb16@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/3] ignite git commit: IGNITE-3230 External addresses are not registered in IP finder archived-at: Wed, 22 Jun 2016 13:17:24 -0000 Repository: ignite Updated Branches: refs/heads/ignite-3353 [created] ceac6ee0b 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/82761bd7 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/82761bd7 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/82761bd7 Branch: refs/heads/ignite-3353 Commit: 82761bd7b5c71832f0e5d21abbe32e5deedb0584 Parents: 9881863 Author: Anton Vinogradov Authored: Wed Jun 22 12:13:30 2016 +0300 Committer: Anton Vinogradov Committed: Wed Jun 22 12:13:30 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/82761bd7/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 extAddrs0 = addrRslvr.getExternalAddresses(sockAddr); + Collection 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 resolveAddresses(AddressResolver addrRslvr, + Collection sockAddr) { + if (addrRslvr == null) + return sockAddr; + + Collection 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 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/82761bd7/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/82761bd7/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/82761bd7/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 getExternalAddresses( + InetSocketAddress addr) throws IgniteCheckedException { + Set 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/82761bd7/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);