summaryrefslogtreecommitdiffstats
path: root/node-maintainer
diff options
context:
space:
mode:
authorAndreas Eriksen <andreer@pvv.ntnu.no>2018-09-28 16:13:35 +0200
committerolaaun <ola.aunroe@gmail.com>2018-09-28 16:13:35 +0200
commit3d74ee9620abd934e84c9482dd4ff10090d1e4dd (patch)
tree88258c1d957c00c349593cb596aac8fa831a9d26 /node-maintainer
parente6f46440bd697d78921379dba4f7e55ca2d85c7a (diff)
andreer/flavor bandwidth (#7141)
* add bandwidth to flavor * accept having more disk / memory than expected * add bandwidth to node-admin bindings * add bandwidth to test * fix test * disable ping check (and assume ipv6 connectivity) check has been deemed too unreliable to rely on for failing out nodes * add bandwidth field to expected responses
Diffstat (limited to 'node-maintainer')
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java6
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java7
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java9
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java7
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java4
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java2
-rw-r--r--node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java4
-rw-r--r--node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java6
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);