diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-08-26 15:42:48 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-08-26 15:42:48 +0200 |
commit | 46c23316a8c728d7aede2c243ac2823b3938f023 (patch) | |
tree | 3d13cd900d0d43e35fe216b4602e4ecc496fb683 /node-admin/src/main | |
parent | dcfca464c44b1d1df15c6e87bd1a6bc9d6f28857 (diff) |
Use NodeResources & ApplicationId in NodeSpec
Diffstat (limited to 'node-admin/src/main')
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()) |