summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-05-18 15:56:59 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-05-18 15:56:59 +0200
commitc006a2c66cf7875d0adbe7eb2a5476fb32095ec0 (patch)
tree53f9ca2eec30759e0eb35c5e68b404797d69a6df /node-repository
parentfddfaf0d3a98b8ea389e032c8e6fc66a0404f542 (diff)
Prioritize nodes with slow disk
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceComparator.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java5
3 files changed, 14 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceComparator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceComparator.java
index 4ed7e063439..51174d42d4b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceComparator.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceComparator.java
@@ -22,7 +22,6 @@ public class NodeResourceComparator {
private static class MemoryDiskCpu implements Comparator<NodeResources> {
- // TODO: Take disk into account
@Override
public int compare(NodeResources a, NodeResources b) {
if (a.memoryGb() > b.memoryGb()) return 1;
@@ -31,6 +30,13 @@ public class NodeResourceComparator {
if (a.diskGb() < b.diskGb()) return -1;
if (a.vcpu() > b.vcpu()) return 1;
if (a.vcpu() < b.vcpu()) return -1;
+ return compare(a.diskSpeed(), b.diskSpeed());
+ }
+
+ private int compare(NodeResources.DiskSpeed a, NodeResources.DiskSpeed b) {
+ if (a == b) return 0;
+ if (a == NodeResources.DiskSpeed.slow) return -1;
+ if (b == NodeResources.DiskSpeed.slow) return 1;
return 0;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
index d1a79d0e28d..57b41786501 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
@@ -75,12 +75,8 @@ class PrioritizableNode implements Comparable<PrioritizableNode> {
if (this.node.state().equals(Node.State.ready) && !other.node.state().equals(Node.State.ready)) return -1;
if (other.node.state().equals(Node.State.ready) && !this.node.state().equals(Node.State.ready)) return 1;
- // The node state should be equal here
- if (!this.node.state().equals(other.node.state())) {
- throw new RuntimeException(
- String.format("Error during node priority comparison. Node states are not equal as expected. Got %s and %s.",
- this.node.state(), other.node.state()));
- }
+ if ( ! this.node.state().equals(other.node.state()))
+ throw new IllegalStateException("Nodes " + this.node + " and " + other.node + " have different states");
// Choose exact flavor
if (this.preferredOnFlavor && !other.preferredOnFlavor) return -1;
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
index f73b0127d8a..c2f2e6efda0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
@@ -72,6 +72,11 @@ public class ResourceCapacityTest {
assertEquals(1, compare(d3DiskFlavor.resources(), d3CPUFlavor.resources()));
assertEquals(-1, compare(d3CPUFlavor.resources(), d3MemFlavor.resources()));
assertEquals(1, compare(d3MemFlavor.resources(), d3DiskFlavor.resources()));
+
+ assertEquals(-1, compare(new NodeResources(1, 2, 3, NodeResources.DiskSpeed.slow),
+ new NodeResources(1, 2, 3, NodeResources.DiskSpeed.fast)));
+ assertEquals(1, compare(new NodeResources(1, 2, 3, NodeResources.DiskSpeed.fast),
+ new NodeResources(1, 2, 3, NodeResources.DiskSpeed.slow)));
}
private int compare(NodeResources a, NodeResources b) {