diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-18 13:02:31 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-24 11:46:06 +0100 |
commit | 1ac1658fed8f5e0c0a77ebed533cfd4e8ad40192 (patch) | |
tree | aa244a9b24a66f162840bc368c040523e9edbf7b | |
parent | c9c43d2dfeb785fbf0baa225cc05723b660a64bf (diff) |
Made firmware checks visible to host admin
4 files changed, 89 insertions, 29 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java index 44bc606f385..3766402defa 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.yahoo.vespa.hosted.dockerapi.DockerImage; +import java.time.Instant; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -15,6 +16,7 @@ public class NodeAttributes { private Optional<DockerImage> dockerImage = Optional.empty(); private Optional<String> vespaVersion = Optional.empty(); private Optional<String> currentOsVersion = Optional.empty(); + private Optional<Instant> currentFirmwareCheck = Optional.empty(); private Optional<String> hardwareDivergence = Optional.empty(); private Optional<String> hardwareFailureDescription = Optional.empty(); private Optional<Boolean> wantToDeprovision = Optional.empty(); @@ -50,6 +52,11 @@ public class NodeAttributes { return this; } + public NodeAttributes withCurrentFirmwareCheck(Instant currentFirmwareCheck) { + this.currentFirmwareCheck = Optional.of(currentFirmwareCheck); + return this; + } + public NodeAttributes withHardwareDivergence(String hardwareDivergence) { this.hardwareDivergence = Optional.of(hardwareDivergence); return this; @@ -86,6 +93,10 @@ public class NodeAttributes { return currentOsVersion; } + public Optional<Instant> getCurrentFirmwareCheck() { + return currentFirmwareCheck; + } + public Optional<String> getHardwareDivergence() { return hardwareDivergence; } @@ -101,7 +112,7 @@ public class NodeAttributes { @Override public int hashCode() { return Objects.hash(restartGeneration, rebootGeneration, dockerImage, vespaVersion, currentOsVersion, - hardwareDivergence, hardwareFailureDescription, wantToDeprovision); + currentFirmwareCheck, hardwareDivergence, hardwareFailureDescription, wantToDeprovision); } @Override @@ -116,6 +127,7 @@ public class NodeAttributes { && Objects.equals(dockerImage, other.dockerImage) && Objects.equals(vespaVersion, other.vespaVersion) && Objects.equals(currentOsVersion, other.currentOsVersion) + && Objects.equals(currentFirmwareCheck, other.currentFirmwareCheck) && Objects.equals(hardwareDivergence, other.hardwareDivergence) && Objects.equals(hardwareFailureDescription, other.hardwareFailureDescription) && Objects.equals(wantToDeprovision, other.wantToDeprovision); @@ -129,6 +141,7 @@ public class NodeAttributes { dockerImage.map(img -> "dockerImage=" + img.asString()), vespaVersion.map(ver -> "vespaVersion=" + ver), currentOsVersion.map(ver -> "currentOsVersion=" + ver), + currentFirmwareCheck.map(at -> "currentFirmwareCheck=" + at), hardwareDivergence.map(hwDivg -> "hardwareDivergence=" + hwDivg), hardwareFailureDescription.map(hwDesc -> "hardwareFailureDescription=" + hwDesc), wantToDeprovision.map(depr -> "wantToDeprovision=" + depr)) 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 c00caef5587..225929db4bd 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 @@ -6,6 +6,7 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.provision.Node; +import java.time.Instant; import java.util.Collections; import java.util.Objects; import java.util.Optional; @@ -36,6 +37,9 @@ public class NodeSpec { private final long wantedRebootGeneration; private final long currentRebootGeneration; + private final Optional<Instant> wantedFirmwareCheck; + private final Optional<Instant> currentFirmwareCheck; + private final Optional<Boolean> allowedToBeDown; private final Optional<Boolean> wantToDeprovision; private final Optional<Owner> owner; @@ -54,34 +58,36 @@ public class NodeSpec { private final Optional<String> parentHostname; public NodeSpec( - final String hostname, - final Optional<DockerImage> wantedDockerImage, - final Optional<DockerImage> currentDockerImage, - final Node.State state, - final NodeType nodeType, - final String flavor, - final String canonicalFlavor, - final Optional<String> wantedVespaVersion, - final Optional<String> vespaVersion, - final Optional<String> wantedOsVersion, - final Optional<String> currentOsVersion, - final Optional<Boolean> allowedToBeDown, - final Optional<Boolean> wantToDeprovision, - final Optional<Owner> owner, - final Optional<Membership> membership, - final Optional<Long> wantedRestartGeneration, - final Optional<Long> currentRestartGeneration, - final long wantedRebootGeneration, - final long currentRebootGeneration, - final double minCpuCores, - final double minMainMemoryAvailableGb, - final double minDiskAvailableGb, - final boolean fastDisk, - final double bandwidth, - final Set<String> ipAddresses, - final Optional<String> hardwareDivergence, - final Optional<String> hardwareFailureDescription, - final Optional<String> parentHostname) { + String hostname, + Optional<DockerImage> wantedDockerImage, + Optional<DockerImage> currentDockerImage, + Node.State state, + NodeType nodeType, + String flavor, + String canonicalFlavor, + Optional<String> wantedVespaVersion, + Optional<String> vespaVersion, + Optional<String> wantedOsVersion, + Optional<String> currentOsVersion, + Optional<Boolean> allowedToBeDown, + Optional<Boolean> wantToDeprovision, + Optional<Owner> owner, + Optional<Membership> membership, + Optional<Long> wantedRestartGeneration, + Optional<Long> currentRestartGeneration, + long wantedRebootGeneration, + long currentRebootGeneration, + Optional<Instant> wantedFirmwareCheck, + Optional<Instant> currentFirmwareCheck, + double minCpuCores, + double minMainMemoryAvailableGb, + double minDiskAvailableGb, + boolean fastDisk, + double bandwidth, + Set<String> ipAddresses, + Optional<String> hardwareDivergence, + Optional<String> hardwareFailureDescription, + Optional<String> parentHostname) { this.hostname = Objects.requireNonNull(hostname); this.wantedDockerImage = Objects.requireNonNull(wantedDockerImage); this.currentDockerImage = Objects.requireNonNull(currentDockerImage); @@ -101,6 +107,8 @@ public class NodeSpec { this.currentRestartGeneration = currentRestartGeneration; this.wantedRebootGeneration = wantedRebootGeneration; this.currentRebootGeneration = currentRebootGeneration; + this.wantedFirmwareCheck = Objects.requireNonNull(wantedFirmwareCheck); + this.currentFirmwareCheck = Objects.requireNonNull(currentFirmwareCheck); this.minCpuCores = minCpuCores; this.minMainMemoryAvailableGb = minMainMemoryAvailableGb; this.minDiskAvailableGb = minDiskAvailableGb; @@ -172,6 +180,14 @@ public class NodeSpec { return currentRebootGeneration; } + public Optional<Instant> getWantedFirmwareCheck() { + return wantedFirmwareCheck; + } + + public Optional<Instant> getCurrentFirmwareCheck() { + return currentFirmwareCheck; + } + public Optional<Boolean> getAllowedToBeDown() { return allowedToBeDown; } @@ -250,6 +266,8 @@ public class NodeSpec { Objects.equals(currentRestartGeneration, that.currentRestartGeneration) && Objects.equals(wantedRebootGeneration, that.wantedRebootGeneration) && Objects.equals(currentRebootGeneration, that.currentRebootGeneration) && + Objects.equals(wantedFirmwareCheck, that.wantedFirmwareCheck) && + Objects.equals(currentFirmwareCheck, that.currentFirmwareCheck) && Objects.equals(minCpuCores, that.minCpuCores) && Objects.equals(minMainMemoryAvailableGb, that.minMainMemoryAvailableGb) && Objects.equals(minDiskAvailableGb, that.minDiskAvailableGb) && @@ -283,6 +301,8 @@ public class NodeSpec { currentRestartGeneration, wantedRebootGeneration, currentRebootGeneration, + wantedFirmwareCheck, + currentFirmwareCheck, minCpuCores, minMainMemoryAvailableGb, minDiskAvailableGb, @@ -317,6 +337,8 @@ public class NodeSpec { + " currentRestartGeneration=" + currentRestartGeneration + " wantedRebootGeneration=" + wantedRebootGeneration + " currentRebootGeneration=" + currentRebootGeneration + + " wantedFirmwareCheck=" + wantedFirmwareCheck + + " currentFirmwareCheck=" + currentFirmwareCheck + " minMainMemoryAvailableGb=" + minMainMemoryAvailableGb + " minDiskAvailableGb=" + minDiskAvailableGb + " fastDisk=" + fastDisk @@ -477,6 +499,8 @@ public class NodeSpec { private Optional<Long> currentRestartGeneration = Optional.empty(); private long wantedRebootGeneration; private long currentRebootGeneration; + private Optional<Instant> wantedFirmwareCheck = Optional.empty(); + private Optional<Instant> currentFirmwareCheck = Optional.empty(); private double minCpuCores; private double minMainMemoryAvailableGb; private double minDiskAvailableGb; @@ -516,6 +540,8 @@ public class NodeSpec { node.membership.ifPresent(this::membership); node.wantedRestartGeneration.ifPresent(this::wantedRestartGeneration); node.currentRestartGeneration.ifPresent(this::currentRestartGeneration); + node.wantedFirmwareCheck.ifPresent(this::wantedFirmwareCheck); + node.currentFirmwareCheck.ifPresent(this::currentFirmwareCheck); node.hardwareDivergence.ifPresent(this::hardwareDivergence); node.hardwareFailureDescription.ifPresent(this::hardwareFailureDescription); node.parentHostname.ifPresent(this::parentHostname); @@ -616,6 +642,16 @@ public class NodeSpec { return this; } + public Builder wantedFirmwareCheck(Instant wantedFirmwareCheck) { + this.wantedFirmwareCheck = Optional.of(wantedFirmwareCheck); + return this; + } + + public Builder currentFirmwareCheck(Instant currentFirmwareCheck) { + this.currentFirmwareCheck = Optional.of(currentFirmwareCheck); + return this; + } + public Builder minCpuCores(double minCpuCores) { this.minCpuCores = minCpuCores; return this; @@ -791,6 +827,7 @@ public class NodeSpec { owner, membership, wantedRestartGeneration, currentRestartGeneration, wantedRebootGeneration, currentRebootGeneration, + wantedFirmwareCheck, currentFirmwareCheck, minCpuCores, minMainMemoryAvailableGb, minDiskAvailableGb, fastDisk, bandwidth, ipAddresses, hardwareDivergence, hardwareFailureDescription, 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 e8efe10e505..9c25687fae8 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 @@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.bindings.*; import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; import com.yahoo.vespa.hosted.provision.Node; +import java.time.Instant; import java.util.Collections; import java.util.List; import java.util.Map; @@ -190,6 +191,8 @@ public class RealNodeRepository implements NodeRepository { Optional.ofNullable(node.currentRestartGeneration), node.rebootGeneration, node.currentRebootGeneration, + Optional.ofNullable(node.wantedFirmwareCheck).map(Instant::ofEpochMilli), + Optional.ofNullable(node.currentFirmwareCheck).map(Instant::ofEpochMilli), node.minCpuCores, node.minMainMemoryAvailableGb, node.minDiskAvailableGb, @@ -220,6 +223,7 @@ public class RealNodeRepository implements NodeRepository { node.currentRebootGeneration = nodeAttributes.getRebootGeneration().orElse(null); node.vespaVersion = nodeAttributes.getVespaVersion().orElse(null); node.currentOsVersion = nodeAttributes.getCurrentOsVersion().orElse(null); + node.currentFirmwareCheck = nodeAttributes.getCurrentFirmwareCheck().map(Instant::toEpochMilli).orElse(null); node.hardwareDivergence = nodeAttributes.getHardwareDivergence().orElse(null); node.hardwareFailureDescription = nodeAttributes.getHardwareFailureDescription().orElse(null); node.wantToDeprovision = nodeAttributes.getWantToDeprovision().orElse(null); 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 fcfd552875a..e6e2b675f5c 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 @@ -48,6 +48,10 @@ public class NodeRepositoryNode { public String currentOsVersion; @JsonProperty("wantedOsVersion") public String wantedOsVersion; + @JsonProperty("currentFirmwareCheck") + public Long currentFirmwareCheck; + @JsonProperty("wantedFirmwareCheck") + public Long wantedFirmwareCheck; @JsonProperty("failCount") public Integer failCount; @JsonProperty("fastDisk") @@ -103,6 +107,8 @@ public class NodeRepositoryNode { ", wantedVespaVersion='" + wantedVespaVersion + '\'' + ", currentOsVersion='" + currentOsVersion + '\'' + ", wantedOsVersion='" + wantedOsVersion + '\'' + + ", currentFirmwareCheck='" + currentFirmwareCheck + '\'' + + ", wantedFirmwareCheck='" + wantedFirmwareCheck + '\'' + ", failCount=" + failCount + ", fastDisk=" + fastDisk + ", bandwidth=" + bandwidth + |