summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-01-17 15:29:43 +0100
committerValerij Fredriksen <valerijf@oath.com>2018-01-18 15:19:55 +0100
commit2d2ccb3347cc88a9ce991af9420ce222f7d6a06f (patch)
tree5d5d0044d6dcb3c758d56baff9f558ab57b4745e /node-admin
parent64f6740bafb46a69eb16c00b5a6672e43dd786b8 (diff)
Call spec verifier with new arguments
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java31
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java12
2 files changed, 30 insertions, 13 deletions
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 c1f685c78ce..cfe15a800bb 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
@@ -21,7 +21,6 @@ import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -37,7 +36,6 @@ import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yahoo.vespa.defaults.Defaults.getDefaults;
@@ -308,20 +306,33 @@ public class StorageMaintainer {
/**
* Runs node-maintainer's SpecVerifier and returns its output
+ * @param nodeSpec Node specification containing the excepted values we want to verify against
+ * @return new combined hardware divergence
* @throws RuntimeException if exit code != 0
*/
- public String getHardwareDivergence() {
- String configServers = environment.getConfigServerUris().stream()
- .map(URI::getHost)
- .collect(Collectors.joining(","));
- return executeMaintainer("com.yahoo.vespa.hosted.node.verification.spec.SpecVerifier", configServers);
+ public String getHardwareDivergence(ContainerNodeSpec nodeSpec) {
+ List<String> argumnets = new ArrayList<>(Arrays.asList("specification",
+ "--disk", Double.toString(nodeSpec.minDiskAvailableGb),
+ "--memory", Double.toString(nodeSpec.minMainMemoryAvailableGb),
+ "--cpu_cores", Double.toString(nodeSpec.minCpuCores),
+ "--is_ssd", Boolean.toString(nodeSpec.fastDisk),
+ "--ips", String.join(",", nodeSpec.ipAddresses)));
+
+ if (nodeSpec.hardwareDivergence.isPresent()) {
+ argumnets.add("--divergence");
+ argumnets.add(nodeSpec.hardwareDivergence.get());
+ }
+
+ return executeMaintainer("com.yahoo.vespa.hosted.node.verification.Main", argumnets.toArray(new String[0]));
}
private String executeMaintainer(String mainClass, String... args) {
String[] command = Stream.concat(
- Stream.of("sudo", "VESPA_HOME=" + getDefaults().vespaHome(),
- getDefaults().underVespaHome("libexec/vespa/node-admin/maintenance.sh"), mainClass),
+ Stream.of("sudo",
+ "VESPA_HOME=" + getDefaults().vespaHome(),
+ getDefaults().underVespaHome("libexec/vespa/node-admin/maintenance.sh"),
+ mainClass),
Stream.of(args))
.toArray(String[]::new);
@@ -334,7 +345,7 @@ public class StorageMaintainer {
String.format("Maintainer failed to execute command: %s, Exit code: %d, Stdout/stderr: %s",
Arrays.toString(command), result.getFirst(), result.getSecond()));
}
- return result.getSecond();
+ return result.getSecond().trim();
} catch (IOException e) {
throw new RuntimeException("Failed to execute maintainer", e);
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
index e380e7a2e26..5ec041298fb 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
@@ -128,9 +128,15 @@ public class NodeAdminStateUpdater {
if (currentState != RESUMED) return;
try {
- String hardwareDivergence = maintainer.getHardwareDivergence();
- NodeAttributes nodeAttributes = new NodeAttributes().withHardwareDivergence(hardwareDivergence);
- nodeRepository.updateNodeAttributes(dockerHostHostName, nodeAttributes);
+ ContainerNodeSpec nodeSpec = nodeRepository.getContainerNodeSpec(dockerHostHostName)
+ .orElseThrow(() -> new RuntimeException("Failed to get host's node spec from node-repo"));
+ String hardwareDivergence = maintainer.getHardwareDivergence(nodeSpec);
+
+ // Only update hardware divergence if there is a change.
+ if (!nodeSpec.hardwareDivergence.orElse("null").equals(hardwareDivergence)) {
+ NodeAttributes nodeAttributes = new NodeAttributes().withHardwareDivergence(hardwareDivergence);
+ nodeRepository.updateNodeAttributes(dockerHostHostName, nodeAttributes);
+ }
} catch (RuntimeException e) {
log.log(Level.WARNING, "Failed to report hardware divergence", e);
}