From ec14327675541b9acd57c6af1cfc0bcbc92c5caa Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Wed, 8 Sep 2021 09:29:19 +0200 Subject: Add real resources to NodeSpec --- .../configserver/noderepository/NodeSpec.java | 28 +++++++++++++++++++--- .../noderepository/RealNodeRepository.java | 19 +++++++++------ .../bindings/NodeRepositoryNode.java | 3 +++ 3 files changed, 40 insertions(+), 10 deletions(-) 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 fa1f8528b31..37932836e06 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 @@ -55,6 +55,7 @@ public class NodeSpec { private final Optional membership; private final NodeResources resources; + private final NodeResources realResources; private final Set ipAddresses; private final Set additionalIpAddresses; @@ -88,6 +89,7 @@ public class NodeSpec { Optional currentFirmwareCheck, Optional modelName, NodeResources resources, + NodeResources realResources, Set ipAddresses, Set additionalIpAddresses, NodeReports reports, @@ -125,6 +127,7 @@ public class NodeSpec { this.wantedFirmwareCheck = Objects.requireNonNull(wantedFirmwareCheck); this.currentFirmwareCheck = Objects.requireNonNull(currentFirmwareCheck); this.resources = Objects.requireNonNull(resources); + this.realResources = Objects.requireNonNull(realResources); this.ipAddresses = Objects.requireNonNull(ipAddresses); this.additionalIpAddresses = Objects.requireNonNull(additionalIpAddresses); this.reports = Objects.requireNonNull(reports); @@ -222,6 +225,10 @@ public class NodeSpec { return resources; } + public NodeResources realResources() { + return realResources; + } + public double vcpu() { return resources.vcpu(); } @@ -297,6 +304,7 @@ public class NodeSpec { Objects.equals(wantedFirmwareCheck, that.wantedFirmwareCheck) && Objects.equals(currentFirmwareCheck, that.currentFirmwareCheck) && Objects.equals(resources, that.resources) && + Objects.equals(realResources, that.realResources) && Objects.equals(ipAddresses, that.ipAddresses) && Objects.equals(additionalIpAddresses, that.additionalIpAddresses) && Objects.equals(reports, that.reports) && @@ -330,6 +338,7 @@ public class NodeSpec { wantedFirmwareCheck, currentFirmwareCheck, resources, + realResources, ipAddresses, additionalIpAddresses, reports, @@ -363,6 +372,7 @@ public class NodeSpec { + " wantedFirmwareCheck=" + wantedFirmwareCheck + " currentFirmwareCheck=" + currentFirmwareCheck + " resources=" + resources + + " realResources=" + realResources + " ipAddresses=" + ipAddresses + " additionalIpAddresses=" + additionalIpAddresses + " reports=" + reports @@ -394,7 +404,8 @@ public class NodeSpec { private Optional wantedFirmwareCheck = Optional.empty(); private Optional currentFirmwareCheck = Optional.empty(); private Optional modelName = Optional.empty(); - private NodeResources resources = new NodeResources(0, 0, 0, 0, slow); + private NodeResources resources = NodeResources.zero(); + private NodeResources realResources = NodeResources.zero(); private Set ipAddresses = Set.of(); private Set additionalIpAddresses = Set.of(); private NodeReports reports = new NodeReports(); @@ -410,6 +421,7 @@ public class NodeSpec { type(node.type); flavor(node.flavor); resources(node.resources); + realResources(node.realResources); ipAddresses(node.ipAddresses); additionalIpAddresses(node.additionalIpAddresses); wantedRebootGeneration(node.wantedRebootGeneration); @@ -538,6 +550,11 @@ public class NodeSpec { return this; } + public Builder realResources(NodeResources realResources) { + this.realResources = realResources; + return this; + } + public Builder vcpu(double vcpu) { return resources(resources.withVcpu(vcpu)); } @@ -681,6 +698,10 @@ public class NodeSpec { return resources; } + public NodeResources realResources() { + return realResources; + } + public Set ipAddresses() { return ipAddresses; } @@ -708,7 +729,7 @@ public class NodeSpec { wantedRestartGeneration, currentRestartGeneration, wantedRebootGeneration, currentRebootGeneration, wantedFirmwareCheck, currentFirmwareCheck, modelName, - resources, ipAddresses, additionalIpAddresses, + resources, realResources, ipAddresses, additionalIpAddresses, reports, parentHostname, archiveUri, exclusiveTo); } @@ -727,7 +748,8 @@ public class NodeSpec { .state(state) .type(NodeType.tenant) .flavor("d-2-8-50") - .resources(new NodeResources(2, 8, 50, 10)); + .resources(new NodeResources(2, 8, 50, 10)) + .realResources(new NodeResources(2, 8, 50, 10)); // Set the required allocated fields if (EnumSet.of(NodeState.active, NodeState.inactive, NodeState.reserved).contains(state)) { 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 8e069ab923b..50c39d5407c 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 @@ -173,13 +173,8 @@ public class RealNodeRepository implements NodeRepository { Optional.ofNullable(node.wantedFirmwareCheck).map(Instant::ofEpochMilli), Optional.ofNullable(node.currentFirmwareCheck).map(Instant::ofEpochMilli), Optional.ofNullable(node.modelName), - new NodeResources( - node.resources.vcpu, - node.resources.memoryGb, - node.resources.diskGb, - node.resources.bandwidthGbps, - diskSpeedFromString(node.resources.diskSpeed), - storageTypeFromString(node.resources.storageType)), + nodeResources(node.resources), + nodeResources(node.realResources), node.ipAddresses, node.additionalIpAddresses, reports, @@ -188,6 +183,16 @@ public class RealNodeRepository implements NodeRepository { Optional.ofNullable(node.exclusiveTo).map(ApplicationId::fromSerializedForm)); } + private static NodeResources nodeResources(NodeRepositoryNode.NodeResources nodeResources) { + return new NodeResources( + nodeResources.vcpu, + nodeResources.memoryGb, + nodeResources.diskGb, + nodeResources.bandwidthGbps, + diskSpeedFromString(nodeResources.diskSpeed), + storageTypeFromString(nodeResources.storageType)); + } + private static NodeResources.DiskSpeed diskSpeedFromString(String diskSpeed) { if (diskSpeed == null) return NodeResources.DiskSpeed.getDefault(); switch (diskSpeed) { diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java index 988bd2a4bf3..86caab9bf51 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java @@ -30,6 +30,8 @@ public class NodeRepositoryNode { public String flavor; @JsonProperty("resources") public NodeResources resources; + @JsonProperty("realResources") + public NodeResources realResources; @JsonProperty("membership") public Membership membership; @JsonProperty("owner") @@ -95,6 +97,7 @@ public class NodeRepositoryNode { ", modelName='" + modelName + '\'' + ", flavor='" + flavor + '\'' + ", resources=" + resources + + ", realResources=" + realResources + ", membership=" + membership + ", owner=" + owner + ", restartGeneration=" + restartGeneration + -- cgit v1.2.3