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 7306B200C4B for ; Mon, 20 Mar 2017 16:23:06 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 70109160B95; Mon, 20 Mar 2017 15:23:06 +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 C1857160B81 for ; Mon, 20 Mar 2017 16:23:05 +0100 (CET) Received: (qmail 43662 invoked by uid 500); 20 Mar 2017 15:23:00 -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 43325 invoked by uid 99); 20 Mar 2017 15:22:59 -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; Mon, 20 Mar 2017 15:22:59 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 963B2F217C; Mon, 20 Mar 2017 15:22:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ntikhonov@apache.org To: commits@ignite.apache.org Date: Mon, 20 Mar 2017 15:23:09 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [11/13] ignite git commit: ignite-4577 Add non-reachable addresses at the end of addresses list archived-at: Mon, 20 Mar 2017 15:23:06 -0000 ignite-4577 Add non-reachable addresses at the end of addresses list Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7ad8e79f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7ad8e79f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7ad8e79f Branch: refs/heads/ignite-2.0 Commit: 7ad8e79fa1077291c50f2f535ecccde6baee0321 Parents: a30183a Author: Evgenii Zhuravlev Authored: Tue Mar 7 14:32:28 2017 +0300 Committer: Evgenii Zhuravlev Committed: Tue Mar 7 14:41:38 2017 +0300 ---------------------------------------------------------------------- .../ignite/internal/util/IgniteUtils.java | 14 ++++++----- .../communication/tcp/TcpCommunicationSpi.java | 25 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/7ad8e79f/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 3fa3f7b..ba118cb 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 @@ -1810,15 +1810,16 @@ public abstract class IgniteUtils { /** * @param addrs Addresses. + * @return List of reachable addresses. */ - public static List filterReachable(List addrs) { + public static List filterReachable(Collection addrs) { final int reachTimeout = 2000; if (addrs.isEmpty()) return Collections.emptyList(); if (addrs.size() == 1) { - InetAddress addr = addrs.get(0); + InetAddress addr = F.first(addrs); if (reachable(addr, reachTimeout)) return Collections.singletonList(addr); @@ -1834,8 +1835,7 @@ public abstract class IgniteUtils { for (final InetAddress addr : addrs) { futs.add(executor.submit(new Runnable() { - @Override - public void run() { + @Override public void run() { if (reachable(addr, reachTimeout)) { synchronized (res) { res.add(addr); @@ -1848,11 +1848,13 @@ public abstract class IgniteUtils { for (Future fut : futs) { try { fut.get(); - } catch (InterruptedException e) { + } + catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IgniteException("Thread has been interrupted.", e); - } catch (ExecutionException e) { + } + catch (ExecutionException e) { throw new IgniteException(e); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7ad8e79f/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java index 94b7efe..81454f8 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java @@ -2334,6 +2334,31 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter if (isExtAddrsExist) addrs.addAll(extAddrs); + Set allInetAddrs = U.newHashSet(addrs.size()); + + for (InetSocketAddress addr : addrs) + allInetAddrs.add(addr.getAddress()); + + List reachableInetAddrs = U.filterReachable(allInetAddrs); + + if (reachableInetAddrs.size() < allInetAddrs.size()) { + LinkedHashSet addrs0 = U.newLinkedHashSet(addrs.size()); + + for (InetSocketAddress addr : addrs) { + if (reachableInetAddrs.contains(addr.getAddress())) + addrs0.add(addr); + } + for (InetSocketAddress addr : addrs) { + if (!reachableInetAddrs.contains(addr.getAddress())) + addrs0.add(addr); + } + + addrs = addrs0; + } + + if (log.isDebugEnabled()) + log.debug("Addresses to connect for node [rmtNode=" + node.id() + ", addrs=" + addrs.toString() + ']'); + boolean conn = false; GridCommunicationClient client = null; IgniteCheckedException errs = null;