summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-18 13:02:31 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-24 11:46:06 +0100
commit1ac1658fed8f5e0c0a77ebed533cfd4e8ad40192 (patch)
treeaa244a9b24a66f162840bc368c040523e9edbf7b
parentc9c43d2dfeb785fbf0baa225cc05723b660a64bf (diff)
Made firmware checks visible to host admin
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java15
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java93
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java6
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 +