diff options
author | Arnstein Ressem <aressem@gmail.com> | 2016-12-13 22:11:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-13 22:11:42 +0100 |
commit | e217edb78c4e9994b46dd4a2be0d8a6c9efdbeb2 (patch) | |
tree | 0532faeaf0ecd79ddc78c8411b06b88e32fda9de /node-repository | |
parent | 33d11e340e87196cb81a51695d26318c62b1be67 (diff) |
Revert "Always use DNS when resolving hostname"
Diffstat (limited to 'node-repository')
3 files changed, 20 insertions, 54 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index 7fa25d30647..7101b24098d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -17,7 +17,6 @@ import com.yahoo.vespa.hosted.provision.node.filter.NodeFilter; import com.yahoo.vespa.hosted.provision.node.filter.NodeListFilter; import com.yahoo.vespa.hosted.provision.node.filter.StateFilter; import com.yahoo.vespa.hosted.provision.persistence.CuratorDatabaseClient; -import com.yahoo.vespa.hosted.provision.persistence.DnsNameResolver; import com.yahoo.vespa.hosted.provision.persistence.NameResolver; import java.time.Clock; @@ -73,7 +72,7 @@ public class NodeRepository extends AbstractComponent { */ @Inject public NodeRepository(NodeFlavors flavors, Curator curator, Zone zone) { - this(flavors, curator, Clock.systemUTC(), zone, new DnsNameResolver()); + this(flavors, curator, Clock.systemUTC(), zone, new NameResolver() {} /* use default implementation */); } /** diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/DnsNameResolver.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/DnsNameResolver.java deleted file mode 100644 index 71ae3bb6595..00000000000 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/DnsNameResolver.java +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.provision.persistence; - -import com.google.common.collect.ImmutableSet; - -import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.InitialDirContext; -import java.util.Optional; -import java.util.Set; - -/** - * Implementation of a name resolver that always use a DNS server to resolve the given name. The intention is to avoid - * possibly incorrect/incomplete records in /etc/hosts. - * - * @author mpolden - */ -public class DnsNameResolver implements NameResolver { - - private static final String TYPE_A = "A"; - private static final String TYPE_AAAA = "AAAA"; - - /** Resolve IP addresses for given host name */ - @Override - public Set<String> getAllByNameOrThrow(String hostname) { - try { - DirContext ctx = new InitialDirContext(); - Attributes attributes = ctx.getAttributes("dns:/" + hostname, new String[] {TYPE_A, TYPE_AAAA}); - Optional<String> inet4Address = getStringAttribute(attributes, TYPE_A); - Optional<String> inet6Address = getStringAttribute(attributes, TYPE_AAAA); - - ImmutableSet.Builder<String> ipAddresses = ImmutableSet.builder(); - inet4Address.ifPresent(ipAddresses::add); - inet6Address.ifPresent(ipAddresses::add); - return ipAddresses.build(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private static Optional<String> getStringAttribute(Attributes attributes, String key) throws NamingException { - Optional<Attribute> attribute = Optional.ofNullable(attributes.get(key)); - if (attribute.isPresent()) { - return Optional.ofNullable(attribute.get().get()).map(Object::toString); - } - return Optional.empty(); - } -} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NameResolver.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NameResolver.java index ce966942546..9262e8616da 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NameResolver.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NameResolver.java @@ -1,15 +1,32 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.persistence; +import com.google.common.collect.ImmutableSet; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; import java.util.Set; /** - * Interface for a basic name to IP address resolver. + * Interface for a basic name to IP address resolver. Default implementation delegates to + * {@link java.net.InetAddress#getAllByName(String)}. * * @author mpolden */ public interface NameResolver { - Set<String> getAllByNameOrThrow(String hostname); + /** Resolve IP addresses for given host name */ + default Set<String> getAllByNameOrThrow(String hostname) { + try { + ImmutableSet.Builder<String> ipAddresses = ImmutableSet.builder(); + Arrays.stream(InetAddress.getAllByName(hostname)) + .map(InetAddress::getHostAddress) + .forEach(ipAddresses::add); + return ipAddresses.build(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } } |