summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-08-26 15:42:48 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-08-26 15:42:48 +0200
commit46c23316a8c728d7aede2c243ac2823b3938f023 (patch)
tree3d13cd900d0d43e35fe216b4602e4ecc496fb683 /node-admin
parentdcfca464c44b1d1df15c6e87bd1a6bc9d6f28857 (diff)
Use NodeResources & ApplicationId in NodeSpec
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java64
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java131
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java18
-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/NodeAgentImpl.java2
5 files changed, 60 insertions, 161 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java
deleted file mode 100644
index c41e050d534..00000000000
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
-
-import com.yahoo.config.provision.ApplicationId;
-
-/**
- * @author freva
- */
-public class NodeOwner {
- private final String tenant;
- private final String application;
- private final String instance;
-
- public NodeOwner(String tenant, String application, String instance) {
- this.tenant = tenant;
- this.application = application;
- this.instance = instance;
- }
-
- public String tenant() {
- return tenant;
- }
-
- public String application() {
- return application;
- }
-
- public String instance() {
- return instance;
- }
-
- public ApplicationId asApplicationId() {
- return ApplicationId.from(tenant, application, instance);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- NodeOwner owner = (NodeOwner) o;
-
- if (!tenant.equals(owner.tenant)) return false;
- if (!application.equals(owner.application)) return false;
- return instance.equals(owner.instance);
-
- }
-
- @Override
- public int hashCode() {
- int result = tenant.hashCode();
- result = 31 * result + application.hashCode();
- result = 31 * result + instance.hashCode();
- return result;
- }
-
- public String toString() {
- return "Owner {" +
- " tenant = " + tenant +
- " application = " + application +
- " instance = " + instance +
- " }";
- }
-}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
index 6fb6d44bd6f..ef6438360ad 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
@@ -3,7 +3,9 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
import com.fasterxml.jackson.databind.JsonNode;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.DockerImage;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
import java.time.Instant;
@@ -11,6 +13,9 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast;
+import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow;
+
/**
* @author stiankri
*/
@@ -43,15 +48,10 @@ public class NodeSpec {
private final Optional<Boolean> allowedToBeDown;
private final Optional<Boolean> wantToDeprovision;
- private final Optional<NodeOwner> owner;
+ private final Optional<ApplicationId> owner;
private final Optional<NodeMembership> membership;
- private final double vcpus;
- private final double memoryGb;
- private final double diskGb;
-
- private final boolean fastDisk;
- private final double bandwidth;
+ private final NodeResources resources;
private final Set<String> ipAddresses;
private final Set<String> additionalIpAddresses;
@@ -73,7 +73,7 @@ public class NodeSpec {
Optional<Version> currentOsVersion,
Optional<Boolean> allowedToBeDown,
Optional<Boolean> wantToDeprovision,
- Optional<NodeOwner> owner,
+ Optional<ApplicationId> owner,
Optional<NodeMembership> membership,
Optional<Long> wantedRestartGeneration,
Optional<Long> currentRestartGeneration,
@@ -82,11 +82,7 @@ public class NodeSpec {
Optional<Instant> wantedFirmwareCheck,
Optional<Instant> currentFirmwareCheck,
Optional<String> modelName,
- double vcpus,
- double memoryGb,
- double diskGb,
- boolean fastDisk,
- double bandwidth,
+ NodeResources resources,
Set<String> ipAddresses,
Set<String> additionalIpAddresses,
NodeReports reports,
@@ -120,11 +116,7 @@ public class NodeSpec {
this.currentRebootGeneration = currentRebootGeneration;
this.wantedFirmwareCheck = Objects.requireNonNull(wantedFirmwareCheck);
this.currentFirmwareCheck = Objects.requireNonNull(currentFirmwareCheck);
- this.vcpus = vcpus;
- this.memoryGb = memoryGb;
- this.diskGb = diskGb;
- this.fastDisk = fastDisk;
- this.bandwidth = bandwidth;
+ this.resources = Objects.requireNonNull(resources);
this.ipAddresses = Objects.requireNonNull(ipAddresses);
this.additionalIpAddresses = Objects.requireNonNull(additionalIpAddresses);
this.reports = Objects.requireNonNull(reports);
@@ -211,7 +203,7 @@ public class NodeSpec {
return wantToDeprovision;
}
- public Optional<NodeOwner> owner() {
+ public Optional<ApplicationId> owner() {
return owner;
}
@@ -219,24 +211,28 @@ public class NodeSpec {
return membership;
}
+ public NodeResources resources() {
+ return resources;
+ }
+
public double vcpus() {
- return vcpus;
+ return resources.vcpu();
}
public double memoryGb() {
- return memoryGb;
+ return resources.memoryGb();
}
public double diskGb() {
- return diskGb;
+ return resources.diskGb();
}
public boolean isFastDisk() {
- return fastDisk;
+ return resources.diskSpeed() == fast;
}
- public double bandwidth() {
- return bandwidth;
+ public double bandwidthGbps() {
+ return resources.bandwidthGbps();
}
public Set<String> ipAddresses() {
@@ -281,11 +277,7 @@ public class NodeSpec {
Objects.equals(currentRebootGeneration, that.currentRebootGeneration) &&
Objects.equals(wantedFirmwareCheck, that.wantedFirmwareCheck) &&
Objects.equals(currentFirmwareCheck, that.currentFirmwareCheck) &&
- Objects.equals(vcpus, that.vcpus) &&
- Objects.equals(memoryGb, that.memoryGb) &&
- Objects.equals(diskGb, that.diskGb) &&
- Objects.equals(fastDisk, that.fastDisk) &&
- Objects.equals(bandwidth, that.bandwidth) &&
+ Objects.equals(resources, that.resources) &&
Objects.equals(ipAddresses, that.ipAddresses) &&
Objects.equals(additionalIpAddresses, that.additionalIpAddresses) &&
Objects.equals(reports, that.reports) &&
@@ -316,11 +308,7 @@ public class NodeSpec {
currentRebootGeneration,
wantedFirmwareCheck,
currentFirmwareCheck,
- vcpus,
- memoryGb,
- diskGb,
- fastDisk,
- bandwidth,
+ resources,
ipAddresses,
additionalIpAddresses,
reports,
@@ -345,17 +333,13 @@ public class NodeSpec {
+ " wantToDeprovision=" + wantToDeprovision
+ " owner=" + owner
+ " membership=" + membership
- + " vcpus=" + vcpus
+ " wantedRestartGeneration=" + wantedRestartGeneration
+ " currentRestartGeneration=" + currentRestartGeneration
+ " wantedRebootGeneration=" + wantedRebootGeneration
+ " currentRebootGeneration=" + currentRebootGeneration
+ " wantedFirmwareCheck=" + wantedFirmwareCheck
+ " currentFirmwareCheck=" + currentFirmwareCheck
- + " memoryGb=" + memoryGb
- + " diskGb=" + diskGb
- + " fastDisk=" + fastDisk
- + " bandwidth=" + bandwidth
+ + " resources=" + resources
+ " ipAddresses=" + ipAddresses
+ " additionalIpAddresses=" + additionalIpAddresses
+ " reports=" + reports
@@ -377,7 +361,7 @@ public class NodeSpec {
private Optional<Version> currentOsVersion = Optional.empty();
private Optional<Boolean> allowedToBeDown = Optional.empty();
private Optional<Boolean> wantToDeprovision = Optional.empty();
- private Optional<NodeOwner> owner = Optional.empty();
+ private Optional<ApplicationId> owner = Optional.empty();
private Optional<NodeMembership> membership = Optional.empty();
private Optional<Long> wantedRestartGeneration = Optional.empty();
private Optional<Long> currentRestartGeneration = Optional.empty();
@@ -386,11 +370,7 @@ public class NodeSpec {
private Optional<Instant> wantedFirmwareCheck = Optional.empty();
private Optional<Instant> currentFirmwareCheck = Optional.empty();
private Optional<String> modelName = Optional.empty();
- private double vcpus;
- private double memoryGb;
- private double diskGb;
- private boolean fastDisk;
- private double bandwidth;
+ private NodeResources resources = new NodeResources(0, 0, 0, 0, slow);
private Set<String> ipAddresses = Set.of();
private Set<String> additionalIpAddresses = Set.of();
private NodeReports reports = new NodeReports();
@@ -404,11 +384,7 @@ public class NodeSpec {
type(node.type);
flavor(node.flavor);
canonicalFlavor(node.canonicalFlavor);
- vcpus(node.vcpus);
- memoryGb(node.memoryGb);
- diskGb(node.diskGb);
- fastDisk(node.fastDisk);
- bandwidth(node.bandwidth);
+ resources(node.resources);
ipAddresses(node.ipAddresses);
additionalIpAddresses(node.additionalIpAddresses);
wantedRebootGeneration(node.wantedRebootGeneration);
@@ -497,7 +473,7 @@ public class NodeSpec {
return this;
}
- public Builder owner(NodeOwner owner) {
+ public Builder owner(ApplicationId owner) {
this.owner = Optional.of(owner);
return this;
}
@@ -537,29 +513,29 @@ public class NodeSpec {
return this;
}
- public Builder vcpus(double minCpuCores) {
- this.vcpus = minCpuCores;
+ public Builder resources(NodeResources resources) {
+ this.resources = resources;
return this;
}
- public Builder memoryGb(double minMainMemoryAvailableGb) {
- this.memoryGb = minMainMemoryAvailableGb;
- return this;
+ public Builder vcpus(double vcpus) {
+ return resources(resources.withVcpu(vcpus));
}
- public Builder diskGb(double minDiskAvailableGb) {
- this.diskGb = minDiskAvailableGb;
- return this;
+ public Builder memoryGb(double memoryGb) {
+ return resources(resources.withMemoryGb(memoryGb));
+ }
+
+ public Builder diskGb(double diskGb) {
+ return resources(resources.withDiskGb(diskGb));
}
public Builder fastDisk(boolean fastDisk) {
- this.fastDisk = fastDisk;
- return this;
+ return resources(resources.withDiskSpeed(fastDisk ? fast : slow));
}
- public Builder bandwidth(double bandwidth) {
- this.bandwidth = bandwidth;
- return this;
+ public Builder bandwidthGbps(double bandwidthGbps) {
+ return resources(resources.withBandwidthGbps(bandwidthGbps));
}
public Builder ipAddresses(Set<String> ipAddresses) {
@@ -655,7 +631,7 @@ public class NodeSpec {
return wantToDeprovision;
}
- public Optional<NodeOwner> owner() {
+ public Optional<ApplicationId> owner() {
return owner;
}
@@ -679,24 +655,8 @@ public class NodeSpec {
return currentRebootGeneration;
}
- public double vcpus() {
- return vcpus;
- }
-
- public double memoryGb() {
- return memoryGb;
- }
-
- public double diskGb() {
- return diskGb;
- }
-
- public boolean isFastDisk() {
- return fastDisk;
- }
-
- public double bandwidth() {
- return bandwidth;
+ public NodeResources resources() {
+ return resources;
}
public Set<String> ipAddresses() {
@@ -723,8 +683,7 @@ public class NodeSpec {
wantedRestartGeneration, currentRestartGeneration,
wantedRebootGeneration, currentRebootGeneration,
wantedFirmwareCheck, currentFirmwareCheck, modelName,
- vcpus, memoryGb, diskGb,
- fastDisk, bandwidth, ipAddresses, additionalIpAddresses,
+ resources, ipAddresses, additionalIpAddresses,
reports, parentHostname);
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
index fe19b81614d..547aee3518e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
@@ -4,7 +4,9 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.base.Strings;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.DockerImage;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApi;
import com.yahoo.vespa.hosted.node.admin.configserver.HttpException;
@@ -25,6 +27,9 @@ import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast;
+import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow;
+
/**
* @author stiankri, dybis
*/
@@ -161,7 +166,7 @@ public class RealNodeRepository implements NodeRepository {
Optional.ofNullable(node.currentOsVersion).map(Version::fromString),
Optional.ofNullable(node.allowedToBeDown),
Optional.ofNullable(node.wantToDeprovision),
- Optional.ofNullable(node.owner).map(o -> new NodeOwner(o.tenant, o.application, o.instance)),
+ Optional.ofNullable(node.owner).map(o -> ApplicationId.from(o.tenant, o.application, o.instance)),
membership,
Optional.ofNullable(node.restartGeneration),
Optional.ofNullable(node.currentRestartGeneration),
@@ -170,11 +175,12 @@ public class RealNodeRepository implements NodeRepository {
Optional.ofNullable(node.wantedFirmwareCheck).map(Instant::ofEpochMilli),
Optional.ofNullable(node.currentFirmwareCheck).map(Instant::ofEpochMilli),
Optional.ofNullable(node.modelName),
- node.minCpuCores,
- node.minMainMemoryAvailableGb,
- node.minDiskAvailableGb,
- node.fastDisk,
- node.bandwidth,
+ new NodeResources(
+ node.minCpuCores,
+ node.minMainMemoryAvailableGb,
+ node.minDiskAvailableGb,
+ node.bandwidth / 1000,
+ node.fastDisk ? fast : slow),
node.ipAddresses,
node.additionalIpAddresses,
reports,
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 f4355ed3afa..91f4924cefa 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
@@ -141,9 +141,9 @@ public class StorageMaintainer {
context.node().parentHostname().ifPresent(parent -> attributes.put("parent_hostname", parent));
context.node().currentVespaVersion().ifPresent(version -> attributes.put("vespa_version", version.toFullString()));
context.node().owner().ifPresent(owner -> {
- attributes.put("tenant", owner.tenant());
- attributes.put("application", owner.application());
- attributes.put("instance", owner.instance());
+ attributes.put("tenant", owner.tenant().value());
+ attributes.put("application", owner.application().value());
+ attributes.put("instance", owner.instance().value());
});
return Collections.unmodifiableMap(attributes);
}
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 b7e7b97cdd8..161775b0702 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
@@ -14,7 +14,6 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException;
import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes;
-import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeOwner;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState;
@@ -345,7 +344,6 @@ public class NodeAgentImpl implements NodeAgent {
double cpuCap = noCpuCap(context.zone()) ?
0 :
context.node().owner()
- .map(NodeOwner::asApplicationId)
.map(appId -> containerCpuCap.with(FetchVector.Dimension.APPLICATION_ID, appId.serializedForm()))
.orElse(containerCpuCap)
.with(FetchVector.Dimension.HOSTNAME, context.node().hostname())