diff options
Diffstat (limited to 'node-maintainer/src')
8 files changed, 31 insertions, 14 deletions
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java index bdc4ea0789c..622d46ca587 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java @@ -11,8 +11,8 @@ import com.yahoo.vespa.hosted.node.verification.spec.retrievers.HardwareInfo; */ public class NodeJsonConverter { - private static void addStandardSpecifications(HardwareInfo nodeRepoHardwareInfo) { - nodeRepoHardwareInfo.setInterfaceSpeedMbs(1000); + private static void setInterfaceSpeed(NodeSpec nodeSpec, HardwareInfo nodeRepoHardwareInfo) { + nodeRepoHardwareInfo.setInterfaceSpeedMbs(nodeSpec.getBandwidth()); } private static void setIpv6Interface(NodeSpec nodeSpec, HardwareInfo nodeRepoHardwareInfo) { @@ -29,7 +29,7 @@ public class NodeJsonConverter { public static HardwareInfo convertJsonModelToHardwareInfo(NodeSpec nodeSpec) { HardwareInfo nodeRepoHardwareInfo = nodeSpec.copyToHardwareInfo(); - addStandardSpecifications(nodeRepoHardwareInfo); + setInterfaceSpeed(nodeSpec, nodeRepoHardwareInfo); setIpv4Interface(nodeSpec, nodeRepoHardwareInfo); setIpv6Interface(nodeSpec, nodeRepoHardwareInfo); return nodeRepoHardwareInfo; diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java index 68a8060a6ad..16be1c39a74 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java @@ -20,14 +20,16 @@ public class NodeSpec { private final double minMainMemoryAvailableGb; private final double minCpuCores; private final boolean fastDisk; + private final double bandwidth; private final String[] ipAddresses; public NodeSpec(double minDiskAvailableGb, double minMainMemoryAvailableGb, double minCpuCores, boolean fastDisk, - String[] ipAddresses) { + double bandwidth, String[] ipAddresses) { this.minDiskAvailableGb = minDiskAvailableGb; this.minMainMemoryAvailableGb = minMainMemoryAvailableGb; this.minCpuCores = minCpuCores; this.fastDisk = fastDisk; + this.bandwidth = bandwidth; this.ipAddresses = ipAddresses; } @@ -37,6 +39,7 @@ public class NodeSpec { hardwareInfo.setMinDiskAvailableGb(this.minDiskAvailableGb); hardwareInfo.setMinCpuCores((int) Math.round(this.minCpuCores)); hardwareInfo.setDiskType(this.fastDisk ? DiskType.FAST : DiskType.SLOW); + hardwareInfo.setInterfaceSpeedMbs(bandwidth); hardwareInfo.setIpv6Connection(getIpv6Address() != null); return hardwareInfo; } @@ -54,4 +57,6 @@ public class NodeSpec { .filter(ip -> ip instanceof Inet4Address) .findFirst().map(InetAddress::getHostAddress).orElse(null); } + + public double getBandwidth() { return bandwidth ; } } diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java index 88bd0539ccd..57d83694709 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java @@ -35,7 +35,7 @@ public class HardwareNodeComparator { private static void setMemoryMetrics(HardwareInfo nodeRepoHardwareInfo, HardwareInfo actualHardware, SpecVerificationReport specVerificationReport) { double expectedMemory = nodeRepoHardwareInfo.getMinMainMemoryAvailableGb(); double actualMemory = actualHardware.getMinMainMemoryAvailableGb(); - if (outsideThreshold(expectedMemory, actualMemory, PERCENTAGE_THRESHOLD)) { + if (belowThreshold(expectedMemory, actualMemory, PERCENTAGE_THRESHOLD)) { specVerificationReport.setActualMemoryAvailable(actualMemory); } } @@ -59,7 +59,7 @@ public class HardwareNodeComparator { private static void setDiskSpaceMetrics(HardwareInfo nodeRepoHardwareInfo, HardwareInfo actualHardware, SpecVerificationReport specVerificationReport) { double expectedDiskSpace = nodeRepoHardwareInfo.getMinDiskAvailableGb(); double actualDiskSpace = actualHardware.getMinDiskAvailableGb(); - if (outsideThreshold(expectedDiskSpace, actualDiskSpace, PERCENTAGE_THRESHOLD)) { + if (belowThreshold(expectedDiskSpace, actualDiskSpace, PERCENTAGE_THRESHOLD)) { specVerificationReport.setActualDiskSpaceAvailable(actualDiskSpace); } } @@ -76,10 +76,9 @@ public class HardwareNodeComparator { } } - private static boolean outsideThreshold(double value1, double value2, double thresholdPercentage) { + private static boolean belowThreshold(double expected, double actual, double thresholdPercentage) { double lowerThresholdPercentage = 1 - thresholdPercentage; - double upperThresholdPercentage = 1 + thresholdPercentage; - return value1 < lowerThresholdPercentage * value2 || value1 > upperThresholdPercentage * value2; + return actual < expected * lowerThresholdPercentage; } } diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java index 627477def0f..3a4a1697a75 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java @@ -39,6 +39,9 @@ public class SpecVerifier extends Main.VerifierCommand { @Option(name = {"-s", "--is_ssd"}, required = true, description = "Set to true if disk is SSD", allowedValues = {"true", "false"}) private String fastDisk; + @Option(name = {"-b", "--bandwidth"}, required = true, description = "Expected network interface speed in Mbit/s") + private double bandwidth; + @Option(name = {"-i", "--ips"}, description = "Comma separated list of IP addresses assigned to this node") private String ipAddresses; @@ -49,14 +52,14 @@ public class SpecVerifier extends Main.VerifierCommand { .map(s -> s.split(",")) .orElse(new String[0]); - NodeSpec nodeSpec = new NodeSpec(diskAvailableGb, mainMemoryAvailableGb, cpuCores, Boolean.valueOf(fastDisk), ips); + NodeSpec nodeSpec = new NodeSpec(diskAvailableGb, mainMemoryAvailableGb, cpuCores, Boolean.valueOf(fastDisk), bandwidth, ips); SpecVerificationReport specVerificationReport = verifySpec(nodeSpec, commandExecutor); hardwareDivergenceReport.setSpecVerificationReport(specVerificationReport); } private SpecVerificationReport verifySpec(NodeSpec nodeSpec, CommandExecutor commandExecutor) { - VerifierSettings verifierSettings = new VerifierSettings(nodeSpec); + VerifierSettings verifierSettings = new VerifierSettings(false); HardwareInfo actualHardware = HardwareInfoRetriever.retrieve(commandExecutor, verifierSettings); return makeVerificationReport(actualHardware, nodeSpec); } diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java index f2e78d672cb..3bc1a447ea8 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java @@ -17,6 +17,10 @@ public class VerifierSettings { this.checkIPv6 = true; } + public VerifierSettings(boolean checkIPv6) { + this.checkIPv6 = checkIPv6; + } + public VerifierSettings(NodeSpec nodeSpec) { checkIPv6 = nodeSpec.getIpv6Address() != null; } diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java index 5afdbbb1c78..9f147f79934 100644 --- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java +++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java @@ -60,6 +60,8 @@ public class NetRetriever implements HardwareRetriever { findInterfaceSpeed(parseResults); if (verifierSettings.isCheckIPv6()) { testPingResponse(parseResults); + } else { + hardwareInfo.setIpv6Connection(true); } updateHardwareInfoWithNet(parseResults); } diff --git a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java index 5762975ec9b..5216a8563d7 100644 --- a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java +++ b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java @@ -17,7 +17,7 @@ public class IPAddressVerifierTest { private final String ipv4Address = "10.2.4.8"; private final String ipv6Address = "fdab:0:0:0:0:0:0:1234"; - private final NodeSpec nodeSpec = new NodeSpec(1920, 256, 48, true, new String[]{ipv4Address, ipv6Address}); + private final NodeSpec nodeSpec = new NodeSpec(1920, 256, 48, true, 10_000, new String[]{ipv4Address, ipv6Address}); private final String hostname = "test123.region.domain.tld"; private IPAddressVerifier ipAddressVerifier = spy(new IPAddressVerifier(hostname)); @@ -63,7 +63,7 @@ public class IPAddressVerifierTest { @Test public void getFaultyIpAddresses_should_return_empty_array_when_parameters_are_invalid() { - final NodeSpec nodeWithNoIP = new NodeSpec(1920, 256, 48, true, new String[0]); + final NodeSpec nodeWithNoIP = new NodeSpec(1920, 256, 48, true, 10_000, new String[0]); assertEquals(0, ipAddressVerifier.getFaultyIpAddresses(nodeWithNoIP).length); } diff --git a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java index d819a9dd269..96af900095f 100644 --- a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java +++ b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java @@ -35,10 +35,11 @@ public class SpecVerifierTest { String result = Main.execute(new String[] { "specification", - "-d", "250", + "-d", "2500", "-m", "64", "-c", "1.5", "-s", "true", + "-b", "10000.0", "-i", "10.11.12.13,::1234" }, commandExecutor); @@ -46,6 +47,7 @@ public class SpecVerifierTest { "{\"specVerificationReport\":{\"" + "actualMemoryAvailable\":4.042128,\"" + "actualDiskSpaceAvailable\":1760.0,\"" + + "actualInterfaceSpeed\":1000.0,\"" + "actualcpuCores\":4,\"" + "faultyIpAddresses\":[\"10.11.12.13\",\"0:0:0:0:0:0:0:1234\"]}}", result); } @@ -66,6 +68,7 @@ public class SpecVerifierTest { "-m", "4", "-c", "4", "-s", "true", + "-b", "1000" }, commandExecutor); assertEquals("null", result); @@ -90,6 +93,7 @@ public class SpecVerifierTest { "-m", "4", "-c", "4", "-s", "true", + "-b", "1000", "-h", previousResult }, commandExecutor); |