summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon@verizonmedia.com>2019-06-10 13:00:34 +0200
committerGitHub <noreply@github.com>2019-06-10 13:00:34 +0200
commitc760fc10a1759e903aef9d2e7d78eae3cce9817f (patch)
tree443d239f4d02363cca6c4b1b985c93cd35c28160
parent32805405a1fcb7259c228c74dd88e0f64c3c9133 (diff)
parent698792947168af683dab12783042fab3dc4f8631 (diff)
Merge pull request #9739 from vespa-engine/hakonhall/use-zoneapi-in-node-admin
Use ZoneApi in node-admin
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java39
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java10
5 files changed, 43 insertions, 26 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 0ff36cd4560..4972a306377 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
@@ -159,7 +159,7 @@ public class StorageMaintainer {
Map<String, String> tags = new LinkedHashMap<>();
tags.put("namespace", "Vespa");
tags.put("role", nodeTypeToRole(context.node().getNodeType()));
- tags.put("zone", String.format("%s.%s", context.zoneId().environment().value(), context.zoneId().region().value()));
+ tags.put("zone", context.zone().getId().value());
context.node().getVespaVersion().ifPresent(version -> tags.put("vespaVersion", version.toFullString()));
if (! isConfigserverLike(context.nodeType())) {
@@ -261,8 +261,8 @@ public class StorageMaintainer {
private Map<String, Object> getCoredumpNodeAttributes(NodeAgentContext context, Optional<Container> container) {
Map<String, String> attributes = new HashMap<>();
attributes.put("hostname", context.node().getHostname());
- attributes.put("region", context.zoneId().region().value());
- attributes.put("environment", context.zoneId().environment().value());
+ attributes.put("region", context.zone().getRegionName().value());
+ attributes.put("environment", context.zone().getEnvironment().value());
attributes.put("flavor", context.node().getFlavor());
attributes.put("kernel_version", System.getProperty("os.version"));
attributes.put("cpu_microcode_version", getMicrocodeVersion());
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 48016d251ef..a7cdd7e655d 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
@@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.vespa.athenz.api.AthenzIdentity;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.node.admin.component.TaskContext;
@@ -37,7 +37,7 @@ public interface NodeAgentContext extends TaskContext {
DockerNetworking dockerNetworking();
- ZoneId zoneId();
+ ZoneApi zone();
String vespaUser();
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 95b72725154..8435fe34770 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
@@ -5,6 +5,7 @@ import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.athenz.api.AthenzIdentity;
import com.yahoo.vespa.athenz.api.AthenzService;
@@ -34,14 +35,14 @@ public class NodeAgentContextImpl implements NodeAgentContext {
private final ContainerName containerName;
private final AthenzIdentity identity;
private final DockerNetworking dockerNetworking;
- private final ZoneId zoneId;
+ private final ZoneApi zone;
private final Path pathToNodeRootOnHost;
private final Path pathToVespaHome;
private final String vespaUser;
private final String vespaUserOnHost;
public NodeAgentContextImpl(NodeSpec node, Acl acl, AthenzIdentity identity,
- DockerNetworking dockerNetworking, ZoneId zoneId,
+ DockerNetworking dockerNetworking, ZoneApi zone,
Path pathToContainerStorage, Path pathToVespaHome,
String vespaUser, String vespaUserOnHost) {
this.node = Objects.requireNonNull(node);
@@ -49,7 +50,7 @@ public class NodeAgentContextImpl implements NodeAgentContext {
this.containerName = ContainerName.fromHostname(node.getHostname());
this.identity = Objects.requireNonNull(identity);
this.dockerNetworking = Objects.requireNonNull(dockerNetworking);
- this.zoneId = Objects.requireNonNull(zoneId);
+ this.zone = Objects.requireNonNull(zone);
this.pathToNodeRootOnHost = Objects.requireNonNull(pathToContainerStorage).resolve(containerName.asString());
this.pathToVespaHome = Objects.requireNonNull(pathToVespaHome);
this.logPrefix = containerName.asString() + ": ";
@@ -83,8 +84,8 @@ public class NodeAgentContextImpl implements NodeAgentContext {
}
@Override
- public ZoneId zoneId() {
- return zoneId;
+ public ZoneApi zone() {
+ return zone;
}
@Override
@@ -147,7 +148,7 @@ public class NodeAgentContextImpl implements NodeAgentContext {
", containerName=" + containerName +
", identity=" + identity +
", dockerNetworking=" + dockerNetworking +
- ", zoneId=" + zoneId +
+ ", zone=" + zone +
", pathToNodeRootOnHost=" + pathToNodeRootOnHost +
", pathToVespaHome=" + pathToVespaHome +
", vespaUser='" + vespaUser + '\'' +
@@ -161,7 +162,7 @@ public class NodeAgentContextImpl implements NodeAgentContext {
private Acl acl;
private AthenzIdentity identity;
private DockerNetworking dockerNetworking;
- private ZoneId zoneId;
+ private ZoneApi zone;
private Path pathToContainerStorage;
private Path pathToVespaHome;
private String vespaUser;
@@ -204,8 +205,8 @@ public class NodeAgentContextImpl implements NodeAgentContext {
return this;
}
- public Builder zoneId(ZoneId zoneId) {
- this.zoneId = zoneId;
+ public Builder zone(ZoneApi zone) {
+ this.zone = zone;
return this;
}
@@ -239,10 +240,22 @@ public class NodeAgentContextImpl implements NodeAgentContext {
Optional.ofNullable(acl).orElse(Acl.EMPTY),
Optional.ofNullable(identity).orElseGet(() -> new AthenzService("domain", "service")),
Optional.ofNullable(dockerNetworking).orElse(DockerNetworking.HOST_NETWORK),
- Optional.ofNullable(zoneId).orElseGet(() -> ZoneId.from(Environment.defaultEnvironment(),
- RegionName.defaultName(),
- CloudName.defaultName(),
- SystemName.defaultSystem())),
+ Optional.ofNullable(zone).orElseGet(() -> new ZoneApi() {
+ @Override
+ public SystemName getSystemName() {
+ return SystemName.defaultSystem();
+ }
+
+ @Override
+ public ZoneId getId() {
+ return ZoneId.defaultId();
+ }
+
+ @Override
+ public CloudName getCloudName() {
+ return CloudName.defaultName();
+ }
+ }),
Optional.ofNullable(pathToContainerStorage).orElseGet(() -> Paths.get("/home/docker")),
Optional.ofNullable(pathToVespaHome).orElseGet(() -> Paths.get("/opt/vespa")),
Optional.ofNullable(vespaUser).orElse("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 a200ff9a805..8c38b1bbd84 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
@@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Environment;
-import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.flags.DoubleFlag;
import com.yahoo.vespa.flags.FetchVector;
@@ -362,7 +362,7 @@ public class NodeAgentImpl implements NodeAgent {
}
private ContainerResources getContainerResources(NodeAgentContext context) {
- double cpuCap = noCpuCap(context.zoneId()) ?
+ double cpuCap = noCpuCap(context.zone()) ?
0 :
context.node().getOwner()
.map(NodeOwner::asApplicationId)
@@ -373,9 +373,9 @@ public class NodeAgentImpl implements NodeAgent {
return ContainerResources.from(cpuCap, context.node().getMinCpuCores(), context.node().getMinMainMemoryAvailableGb());
}
- private boolean noCpuCap(ZoneId zoneId) {
- return zoneId.environment() == Environment.dev
- || (zoneId.system().isCd() && zoneId.environment() != Environment.prod);
+ private boolean noCpuCap(ZoneApi zone) {
+ return zone.getEnvironment() == Environment.dev
+ || (zone.getSystemName().isCd() && zone.getEnvironment() != Environment.prod);
}
private void scheduleDownLoadIfNeeded(NodeSpec node, Optional<Container> container) {
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
index b5640ddb996..36169a2b283 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
@@ -3,11 +3,10 @@ package com.yahoo.vespa.hosted.node.admin.maintenance;
import com.google.common.collect.ImmutableSet;
import com.yahoo.component.Version;
-import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeMembership;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeOwner;
@@ -42,6 +41,7 @@ import static com.yahoo.yolean.Exceptions.uncheck;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
/**
* @author dybis
@@ -152,6 +152,9 @@ public class StorageMaintainerTest {
}
private Path executeAs(NodeType nodeType) {
+ ZoneApi zone = mock(ZoneApi.class);
+ when(zone.getId()).thenReturn(ZoneId.from(Environment.prod, RegionName.from("us-north-1")));
+
NodeSpec nodeSpec = new NodeSpec.Builder()
.hostname("host123-5.test.domain.tld")
.nodeType(nodeType)
@@ -165,7 +168,8 @@ public class StorageMaintainerTest {
.build();
NodeAgentContext context = new NodeAgentContextImpl.Builder(nodeSpec)
.fileSystem(TestFileSystem.create())
- .zoneId(ZoneId.from(Environment.prod, RegionName.from("us-north-1"), CloudName.defaultName(), SystemName.defaultSystem())).build();
+ .zone(zone)
+ .build();
Path path = context.pathOnHostFromPathInNode("/etc/yamas-agent");
uncheck(() -> Files.createDirectories(path));
storageMaintainer.writeMetricsConfig(context);