diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2018-11-07 16:54:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-07 16:54:24 +0100 |
commit | cb3ac3a970d519fcb6d53b4ec9eca99c5043925b (patch) | |
tree | 4a3621dbd13391d7b2126d8e71f987d7cc7577c1 /node-admin/src | |
parent | a106d7a01e5bbbc8782c70707d98f25cb78540cd (diff) | |
parent | 1e26fba94d5b9101a9da9296dc0ee3ca103fc538 (diff) |
Merge branch 'master' into freva/fix-reboot-bug
Diffstat (limited to 'node-admin/src')
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()); |