IGNITE-5225: Fix NPE caused by changes in IGNITE-4577. (cherry picked from commit d463840)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/442aac25 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/442aac25 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/442aac25 Branch: refs/heads/ignite-5232-1.7.2 Commit: 442aac2507210d39b7f30ab8f8d9a3dbe2610cae Parents: 29187ef Author: Andrey V. Mashenkov <[email protected]> Authored: Wed May 24 18:32:11 2017 +0300 Committer: Andrey V. Mashenkov <[email protected]> Committed: Wed May 24 18:32:11 2017 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/util/IgniteUtils.java | 4 ++-- .../spi/communication/tcp/TcpCommunicationSpi.java | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/442aac25/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 ba118cb..ca29adf 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 @@ -1813,11 +1813,11 @@ public abstract class IgniteUtils { * @return List of reachable addresses. */ public static List<InetAddress> filterReachable(Collection<InetAddress> addrs) { - final int reachTimeout = 2000; - if (addrs.isEmpty()) return Collections.emptyList(); + final int reachTimeout = 2000; + if (addrs.size() == 1) { InetAddress addr = F.first(addrs); http://git-wip-us.apache.org/repos/asf/ignite/blob/442aac25/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 81454f8..6dba6b2 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 @@ -2336,22 +2336,27 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter Set<InetAddress> allInetAddrs = U.newHashSet(addrs.size()); - for (InetSocketAddress addr : addrs) - allInetAddrs.add(addr.getAddress()); + for (InetSocketAddress addr : addrs) { + // Skip unresolved as addr.getAddress() can return null. + if(!addr.isUnresolved()) + allInetAddrs.add(addr.getAddress()); + } List<InetAddress> reachableInetAddrs = U.filterReachable(allInetAddrs); if (reachableInetAddrs.size() < allInetAddrs.size()) { LinkedHashSet<InetSocketAddress> addrs0 = U.newLinkedHashSet(addrs.size()); + List<InetSocketAddress> unreachableInetAddr = new ArrayList<>(allInetAddrs.size() - reachableInetAddrs.size()); + for (InetSocketAddress addr : addrs) { if (reachableInetAddrs.contains(addr.getAddress())) addrs0.add(addr); + else + unreachableInetAddr.add(addr); } - for (InetSocketAddress addr : addrs) { - if (!reachableInetAddrs.contains(addr.getAddress())) - addrs0.add(addr); - } + + addrs0.addAll(unreachableInetAddr); addrs = addrs0; }
