diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-01-17 15:29:43 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-01-18 15:19:55 +0100 |
commit | 2d2ccb3347cc88a9ce991af9420ce222f7d6a06f (patch) | |
tree | 5d5d0044d6dcb3c758d56baff9f558ab57b4745e /node-admin | |
parent | 64f6740bafb46a69eb16c00b5a6672e43dd786b8 (diff) |
Call spec verifier with new arguments
Diffstat (limited to 'node-admin')
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); } |