diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-08-29 22:57:10 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2018-08-29 23:37:47 +0200 |
commit | 19afff03f1b594b558a19b62352aeb43a8f9b204 (patch) | |
tree | b343881f1af9faae57e27d74ea59e094f13db31f /node-admin | |
parent | 6605ae801f7cd350287b8b4509983955d1494e8e (diff) |
Remove InetAddressResolver, always use IPAddresses
Diffstat (limited to 'node-admin')
8 files changed, 38 insertions, 62 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java index 164ab6b3259..2dd5e5a7e2b 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java @@ -100,8 +100,7 @@ public class DockerAdminComponent implements AdminComponent { DockerOperations dockerOperations = new DockerOperationsImpl( docker, environment.get(), - processExecuter, - new IPAddressesImpl()); + processExecuter); StorageMaintainer storageMaintainer = new StorageMaintainer( dockerOperations, diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/Environment.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/Environment.java index 42729d06891..bc15cddb607 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/Environment.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/Environment.java @@ -8,11 +8,10 @@ import com.yahoo.vespa.athenz.utils.AthenzIdentities; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.config.ConfigServerConfig; -import com.yahoo.vespa.hosted.node.admin.util.InetAddressResolver; +import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddresses; +import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddressesImpl; -import java.net.InetAddress; import java.net.URI; -import java.net.UnknownHostException; import java.nio.file.Path; import java.nio.file.Paths; import java.text.DateFormat; @@ -53,7 +52,7 @@ public class Environment { private final String region; private final String system; private final String parentHostHostname; - private final InetAddressResolver inetAddressResolver; + private final IPAddresses ipAddresses; private final PathResolver pathResolver; private final List<String> logstashNodes; private final Optional<String> coredumpFeedEndpoint; @@ -77,7 +76,7 @@ public class Environment { getEnvironmentVariable(REGION), getEnvironmentVariable(SYSTEM), Defaults.getDefaults().vespaHostname(), - new InetAddressResolver(), + new IPAddressesImpl(), new PathResolver(), getLogstashNodesFromEnvironment(), Optional.of(getEnvironmentVariable(COREDUMP_FEED_ENDPOINT)), @@ -96,7 +95,7 @@ public class Environment { String region, String system, String parentHostHostname, - InetAddressResolver inetAddressResolver, + IPAddresses ipAddresses, PathResolver pathResolver, List<String> logstashNodes, Optional<String> coreDumpFeedEndpoint, @@ -118,7 +117,7 @@ public class Environment { this.region = region; this.system = system; this.parentHostHostname = parentHostHostname; - this.inetAddressResolver = inetAddressResolver; + this.ipAddresses = ipAddresses; this.pathResolver = pathResolver; this.logstashNodes = logstashNodes; this.coredumpFeedEndpoint = coreDumpFeedEndpoint; @@ -168,8 +167,8 @@ public class Environment { return Arrays.asList(logstashNodes.split("[,\\s]+")); } - public InetAddress getInetAddressForHost(String hostname) throws UnknownHostException { - return inetAddressResolver.getInetAddressForHost(hostname); + public IPAddresses getIpAddresses() { + return ipAddresses; } public PathResolver getPathResolver() { @@ -279,7 +278,7 @@ public class Environment { private String region; private String system; private String parentHostHostname; - private InetAddressResolver inetAddressResolver; + private IPAddresses ipAddresses; private PathResolver pathResolver; private List<String> logstashNodes = Collections.emptyList(); private Optional<String> coredumpFeedEndpoint = Optional.empty(); @@ -317,8 +316,8 @@ public class Environment { return this; } - public Builder inetAddressResolver(InetAddressResolver inetAddressResolver) { - this.inetAddressResolver = inetAddressResolver; + public Builder ipAddresses(IPAddresses ipAddresses) { + this.ipAddresses = ipAddresses; return this; } @@ -384,7 +383,7 @@ public class Environment { region, system, parentHostHostname, - Optional.ofNullable(inetAddressResolver).orElseGet(InetAddressResolver::new), + Optional.ofNullable(ipAddresses).orElseGet(IPAddressesImpl::new), Optional.ofNullable(pathResolver).orElseGet(PathResolver::new), logstashNodes, coredumpFeedEndpoint, diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index 1e7df09dbce..03ff1760158 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -51,24 +51,25 @@ public class DockerOperationsImpl implements DockerOperations { private final ProcessExecuter processExecuter; private final String nodeProgram; private final Map<Path, Boolean> directoriesToMount; - private final IPAddresses retriever; - public DockerOperationsImpl(Docker docker, Environment environment, ProcessExecuter processExecuter, IPAddresses retriever) { + public DockerOperationsImpl(Docker docker, Environment environment, ProcessExecuter processExecuter) { this.docker = docker; this.environment = environment; this.processExecuter = processExecuter; - this.retriever = retriever; this.nodeProgram = environment.pathInNodeUnderVespaHome("bin/vespa-nodectl").toString(); this.directoriesToMount = getDirectoriesToMount(environment); } @Override - public void createContainer(ContainerName containerName, final NodeSpec node, ContainerData containerData) { + public void createContainer(ContainerName containerName, NodeSpec node, ContainerData containerData) { PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); logger.info("Creating container " + containerName); try { - InetAddress nodeInetAddress = environment.getInetAddressForHost(node.getHostname()); + // IPv6 - Assume always valid + Inet6Address ipV6Address = environment.getIpAddresses().getIPv6Address(node.getHostname()).orElseThrow( + () -> new RuntimeException("Unable to find a valid IPv6 address for " + node.getHostname() + + ". Missing an AAAA DNS entry?")); String configServers = String.join(",", environment.getConfigServerHostNames()); @@ -105,19 +106,16 @@ public class DockerOperationsImpl implements DockerOperations { } if (!docker.networkNATed()) { - command.withIpAddress(nodeInetAddress); + command.withIpAddress(ipV6Address); command.withNetworkMode(DockerImpl.DOCKER_CUSTOM_MACVLAN_NETWORK_NAME); command.withVolume("/etc/hosts", "/etc/hosts"); } else { - // IPv6 - Assume always valid - Inet6Address ipV6Address = this.retriever.getIPv6Address(node.getHostname()).orElseThrow( - () -> new RuntimeException("Unable to find a valid IPv6 address. Missing an AAAA DNS entry?")); InetAddress ipV6Prefix = InetAddress.getByName(IPV6_NPT_PREFIX); InetAddress ipV6Local = IPAddresses.prefixTranslate(ipV6Address, ipV6Prefix, 8); command.withIpAddress(ipV6Local); // IPv4 - Only present for some containers - Optional<InetAddress> ipV4Local = this.retriever.getIPv4Address(node.getHostname()) + Optional<InetAddress> ipV4Local = environment.getIpAddresses().getIPv4Address(node.getHostname()) .map(ipV4Address -> { InetAddress ipV4Prefix = uncheck(() -> InetAddress.getByName(IPV4_NPT_PREFIX)); return IPAddresses.prefixTranslate(ipV4Address, ipV4Prefix, 2); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/InetAddressResolver.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/InetAddressResolver.java deleted file mode 100644 index 88ac56f4185..00000000000 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/InetAddressResolver.java +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.node.admin.util; - -import java.net.InetAddress; -import java.net.UnknownHostException; - -/** - * @author musum - */ -public class InetAddressResolver { - - public InetAddress getInetAddressForHost(String hostname) throws UnknownHostException { - return InetAddress.getByName(hostname); - } - -} diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java index bb349ac0c49..7ba76b592aa 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java @@ -11,7 +11,6 @@ import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.node.admin.component.Environment; import com.yahoo.vespa.hosted.node.admin.config.ConfigServerConfig; import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData; -import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddressesMock; import org.junit.Test; import org.mockito.InOrder; @@ -43,9 +42,8 @@ public class DockerOperationsImplTest { .build(); private final Docker docker = mock(Docker.class); private final ProcessExecuter processExecuter = mock(ProcessExecuter.class); - private final IPAddressesMock addressesMock = new IPAddressesMock(); private final DockerOperationsImpl dockerOperations - = new DockerOperationsImpl(docker, environment, processExecuter, addressesMock); + = new DockerOperationsImpl(docker, environment, processExecuter); @Test public void processResultFromNodeProgramWhenSuccess() { @@ -112,8 +110,7 @@ public class DockerOperationsImplTest { DockerOperationsImpl dockerOperations = new DockerOperationsImpl( docker, environment, - processExecuter, - addressesMock); + processExecuter); dockerOperations.addEtcHosts(containerData, hostname, Optional.empty(), ipV6Local); verify(containerData, times(1)).addFile( diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java index 6960ce3e3f1..eb4c2c80dfd 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java @@ -1,9 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.collections.Pair; import com.yahoo.concurrent.classlock.ClassLocking; import com.yahoo.config.provision.NodeType; import com.yahoo.metrics.simple.MetricReceiver; +import com.yahoo.system.ProcessExecuter; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; @@ -18,13 +20,10 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdaterImpl; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; import com.yahoo.vespa.hosted.node.admin.component.Environment; -import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddressesImpl; -import com.yahoo.vespa.hosted.node.admin.util.InetAddressResolver; import com.yahoo.vespa.hosted.node.admin.component.PathResolver; +import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddressesMock; import com.yahoo.vespa.hosted.provision.Node; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.file.Path; import java.nio.file.Paths; import java.time.Clock; @@ -32,6 +31,7 @@ import java.time.Duration; import java.util.Optional; import java.util.function.Function; +import static com.yahoo.vespa.hosted.node.admin.task.util.file.IOExceptionUtil.uncheck; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -45,7 +45,7 @@ public class DockerTester implements AutoCloseable { private static final Duration NODE_ADMIN_CONVERGE_STATE_INTERVAL = Duration.ofMillis(10); private static final Path PATH_TO_VESPA_HOME = Paths.get("/opt/vespa"); static final String NODE_PROGRAM = PATH_TO_VESPA_HOME.resolve("bin/vespa-nodectl").toString(); - static final String DOCKER_HOST_HOSTNAME = "host.domain.tld"; + static final String DOCKER_HOST_HOSTNAME = "host.test.yahoo.com"; final CallOrderVerifier callOrderVerifier = new CallOrderVerifier(); final Docker dockerMock = new DockerMock(callOrderVerifier); @@ -56,16 +56,17 @@ public class DockerTester implements AutoCloseable { DockerTester() { - InetAddressResolver inetAddressResolver = mock(InetAddressResolver.class); - try { - when(inetAddressResolver.getInetAddressForHost(any(String.class))).thenReturn(InetAddress.getByName("1.1.1.1")); - } catch (UnknownHostException e) { - throw new RuntimeException(e); - } + IPAddressesMock ipAddresses = new IPAddressesMock(); + ipAddresses.addAddress(DOCKER_HOST_HOSTNAME, "1.1.1.1"); + ipAddresses.addAddress(DOCKER_HOST_HOSTNAME, "f000::"); + for (int i = 1; i < 4; i++) ipAddresses.addAddress("host" + i + ".test.yahoo.com", "f000::" + i); + + ProcessExecuter processExecuter = mock(ProcessExecuter.class); + uncheck(() -> when(processExecuter.exec(any(String[].class))).thenReturn(new Pair<>(0, ""))); Environment environment = new Environment.Builder() .configServerConfig(new ConfigServerConfig(new ConfigServerConfig.Builder())) - .inetAddressResolver(inetAddressResolver) + .ipAddresses(ipAddresses) .region("us-east-1") .environment("prod") .system("main") @@ -84,7 +85,7 @@ public class DockerTester implements AutoCloseable { nodeRepositoryMock.updateNodeRepositoryNode(hostSpec); Clock clock = Clock.systemUTC(); - DockerOperations dockerOperations = new DockerOperationsImpl(dockerMock, environment, null, new IPAddressesImpl()); + DockerOperations dockerOperations = new DockerOperationsImpl(dockerMock, environment, processExecuter); StorageMaintainerMock storageMaintainer = new StorageMaintainerMock(dockerOperations, null, environment, callOrderVerifier, clock); AclMaintainer aclMaintainer = mock(AclMaintainer.class); AthenzCredentialsMaintainer athenzCredentialsMaintainer = mock(AthenzCredentialsMaintainer.class); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java index 6e05fd2a03c..782917ab7c0 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java @@ -23,7 +23,6 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeReposit import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.component.Environment; import com.yahoo.vespa.hosted.node.admin.maintenance.identity.AthenzCredentialsMaintainer; -import com.yahoo.vespa.hosted.node.admin.util.InetAddressResolver; import com.yahoo.vespa.hosted.node.admin.component.PathResolver; import com.yahoo.vespa.hosted.provision.Node; import org.junit.Test; @@ -90,7 +89,6 @@ public class NodeAgentImplTest { .region("us-east-1") .system("main") .parentHostHostname("parent.host.name.yahoo.com") - .inetAddressResolver(new InetAddressResolver()) .pathResolver(pathResolver) .cloud("mycloud") .build(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddressesMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddressesMock.java index 4dec4ece27e..8d4108753c0 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddressesMock.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddressesMock.java @@ -19,7 +19,7 @@ public class IPAddressesMock implements IPAddresses { try { addresses.add(InetAddress.getByName(ip)); } catch (UnknownHostException e) { - e.printStackTrace(); + throw new RuntimeException(e); } otherAddresses.put(hostname, addresses); return this; |