summaryrefslogtreecommitdiffstats
path: root/node-admin/src
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2018-11-07 16:54:24 +0100
committerGitHub <noreply@github.com>2018-11-07 16:54:24 +0100
commitcb3ac3a970d519fcb6d53b4ec9eca99c5043925b (patch)
tree4a3621dbd13391d7b2126d8e71f987d7cc7577c1 /node-admin/src
parenta106d7a01e5bbbc8782c70707d98f25cb78540cd (diff)
parent1e26fba94d5b9101a9da9296dc0ee3ca103fc538 (diff)
Merge branch 'master' into freva/fix-reboot-bug
Diffstat (limited to 'node-admin/src')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java7
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/ConvergenceException.java9
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java1
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java19
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddresses.java2
6 files changed, 36 insertions, 7 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index 8b8294d530a..faa28d745fe 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -9,12 +9,12 @@ import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.node.admin.component.TaskContext;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations;
+import com.yahoo.vespa.hosted.node.admin.maintenance.coredump.CoredumpHandler;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.task.util.file.FileFinder;
import com.yahoo.vespa.hosted.node.admin.task.util.file.UnixPath;
import com.yahoo.vespa.hosted.node.admin.task.util.process.Terminal;
import com.yahoo.vespa.hosted.node.admin.util.SecretAgentCheckConfig;
-import com.yahoo.vespa.hosted.node.admin.maintenance.coredump.CoredumpHandler;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -96,11 +96,14 @@ public class StorageMaintainer {
if (context.nodeType() != NodeType.config) {
// vespa-health
Path vespaHealthCheckPath = context.pathInNodeUnderVespaHome("libexec/yms/yms_check_vespa_health");
- configs.add(new SecretAgentCheckConfig("vespa-health", 60, vespaHealthCheckPath, "all").withTags(tags));
+ configs.add(new SecretAgentCheckConfig("vespa-health", 60, vespaHealthCheckPath, "all")
+ .withRunAsUser(context.vespaUser())
+ .withTags(tags));
// vespa
Path vespaCheckPath = context.pathInNodeUnderVespaHome("libexec/yms/yms_check_vespa");
SecretAgentCheckConfig vespaSchedule = new SecretAgentCheckConfig("vespa", 60, vespaCheckPath, "all");
+ vespaSchedule.withRunAsUser(context.vespaUser());
if (isConfigserverLike(context.nodeType())) {
Map<String, Object> tagsWithoutNameSpace = new LinkedHashMap<>(tags);
tagsWithoutNameSpace.remove("namespace");
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/ConvergenceException.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/ConvergenceException.java
index 07e16c9b610..8c1663bcf49 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/ConvergenceException.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/ConvergenceException.java
@@ -1,9 +1,18 @@
// 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.nodeadmin;
+/**
+ * Exception specially handled to avoid dumping full stack trace on convergence failure.
+ *
+ * @author hakonhall
+ */
@SuppressWarnings("serial")
public class ConvergenceException extends RuntimeException {
public ConvergenceException(String message) {
super(message);
}
+
+ public ConvergenceException(String message, Throwable t) {
+ super(message, t);
+ }
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
index 2025d422331..58436edbf20 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
@@ -25,6 +25,7 @@ public interface NodeAgentContext extends TaskContext {
ZoneId zoneId();
+ String vespaUser();
/**
* This method is the inverse of {@link #pathInNodeFromPathOnHost(Path)}}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
index d1b5ec77c6a..69947b472f2 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
@@ -33,10 +33,11 @@ public class NodeAgentContextImpl implements NodeAgentContext {
private final ZoneId zoneId;
private final Path pathToNodeRootOnHost;
private final Path pathToVespaHome;
+ private final String vespaUser;
public NodeAgentContextImpl(String hostname, NodeType nodeType, AthenzService identity,
DockerNetworking dockerNetworking, ZoneId zoneId,
- Path pathToContainerStorage, Path pathToVespaHome) {
+ Path pathToContainerStorage, Path pathToVespaHome, String vespaUser) {
this.hostName = HostName.from(Objects.requireNonNull(hostname));
this.containerName = ContainerName.fromHostname(hostname);
this.nodeType = Objects.requireNonNull(nodeType);
@@ -46,6 +47,7 @@ public class NodeAgentContextImpl implements NodeAgentContext {
this.pathToNodeRootOnHost = Objects.requireNonNull(pathToContainerStorage).resolve(containerName.asString());
this.pathToVespaHome = Objects.requireNonNull(pathToVespaHome);
this.logPrefix = containerName.asString() + ": ";
+ this.vespaUser = vespaUser;
}
@Override
@@ -79,6 +81,11 @@ public class NodeAgentContextImpl implements NodeAgentContext {
}
@Override
+ public String vespaUser() {
+ return vespaUser;
+ }
+
+ @Override
public Path pathOnHostFromPathInNode(Path pathInNode) {
if (! pathInNode.isAbsolute())
throw new IllegalArgumentException("Expected an absolute path in the container, got: " + pathInNode);
@@ -130,6 +137,7 @@ public class NodeAgentContextImpl implements NodeAgentContext {
private ZoneId zoneId;
private Path pathToContainerStorage;
private Path pathToVespaHome;
+ private String vespaUser;
public Builder(String hostname) {
this.hostname = hostname;
@@ -165,6 +173,11 @@ public class NodeAgentContextImpl implements NodeAgentContext {
return this;
}
+ public Builder vespaUser(String vespaUser) {
+ this.vespaUser = vespaUser;
+ return this;
+ }
+
public Builder fileSystem(FileSystem fileSystem) {
return pathToContainerStorage(fileSystem.getPath("/home/docker"));
}
@@ -177,8 +190,8 @@ public class NodeAgentContextImpl implements NodeAgentContext {
Optional.ofNullable(dockerNetworking).orElse(DockerNetworking.HOST_NETWORK),
Optional.ofNullable(zoneId).orElseGet(() -> new ZoneId(SystemName.dev, Environment.dev, RegionName.defaultName())),
Optional.ofNullable(pathToContainerStorage).orElseGet(() -> Paths.get("/home/docker")),
- Optional.ofNullable(pathToVespaHome).orElseGet(() -> Paths.get("/opt/vespa"))
- );
+ Optional.ofNullable(pathToVespaHome).orElseGet(() -> Paths.get("/opt/vespa")),
+ Optional.ofNullable(vespaUser).orElseGet(() -> "vespa"));
}
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index 7a6ac75ecb8..da6656ac830 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator;
import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.OrchestratorException;
import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.maintenance.identity.AthenzCredentialsMaintainer;
+import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException;
import com.yahoo.vespa.hosted.node.admin.util.SecretAgentCheckConfig;
import com.yahoo.vespa.hosted.provision.Node;
@@ -435,7 +436,7 @@ public class NodeAgentImpl implements NodeAgent {
} else {
try {
converge();
- } catch (OrchestratorException e) {
+ } catch (OrchestratorException | ConvergenceException e) {
context.log(logger, e.getMessage());
} catch (ContainerNotFoundException e) {
containerState = ABSENT;
@@ -660,7 +661,7 @@ public class NodeAgentImpl implements NodeAgent {
}
String wrappedMetrics = "s:" + params.toString();
- // Push metrics to the metrics proxy in each container - give it maximum 1 seconds to complete
+ // Push metrics to the metrics proxy in each container
String[] command = {"vespa-rpc-invoke", "-t", "2", "tcp/localhost:19091", "setExtraMetrics", wrappedMetrics};
dockerOperations.executeCommandInContainerAsRoot(context, 5L, command);
} catch (DockerExecTimeoutException | JsonProcessingException e) {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddresses.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddresses.java
index 437627c58d9..2f957d31c1b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddresses.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPAddresses.java
@@ -56,6 +56,7 @@ public interface IPAddresses {
default Optional<Inet6Address> getIPv6Address(String hostname) {
List<Inet6Address> ipv6addresses = Stream.of(getAddresses(hostname))
.filter(Inet6Address.class::isInstance)
+ .filter(inetAddress -> !inetAddress.isLoopbackAddress())
.map(Inet6Address.class::cast)
.filter(inetAddress -> !inetAddress.isLinkLocalAddress())
.filter(inetAddress -> !inetAddress.isSiteLocalAddress())
@@ -78,6 +79,7 @@ public interface IPAddresses {
default Optional<Inet4Address> getIPv4Address(String hostname) {
List<Inet4Address> ipv4Addresses = Stream.of(getAddresses(hostname))
.filter(Inet4Address.class::isInstance)
+ .filter(inetAddress -> !inetAddress.isLoopbackAddress())
.map(Inet4Address.class::cast)
.collect(Collectors.toList());