aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-08-29 22:57:10 +0200
committerValerij Fredriksen <valerij92@gmail.com>2018-08-29 23:37:47 +0200
commit19afff03f1b594b558a19b62352aeb43a8f9b204 (patch)
treeb343881f1af9faae57e27d74ea59e094f13db31f /node-admin
parent6605ae801f7cd350287b8b4509983955d1494e8e (diff)
Remove InetAddressResolver, always use IPAddresses
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java3
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/Environment.java25
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java18
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/InetAddressResolver.java16
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java7
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java27
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddressesMock.java2
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;