From d5e86cc439c4cb57d058f7c88a87ff64261a22a7 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Mon, 13 Jan 2020 11:42:14 +0100 Subject: Add isResizeable to PriotizableNode --- .../provision/provisioning/PrioritizableNode.java | 17 +++++++++-- .../provisioning/PrioritizableNodeTest.java | 33 ++++++++-------------- 2 files changed, 27 insertions(+), 23 deletions(-) (limited to 'node-repository') 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 1522f0a5c2b..c7732695069 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 @@ -36,13 +36,20 @@ class PrioritizableNode implements Comparable { /** This node does not exist in the node repository yet */ final boolean isNewNode; - PrioritizableNode(Node node, NodeResources freeParentCapacity, Optional parent, boolean violatesSpares, boolean isSurplusNode, boolean isNewNode) { + /** This node can be resized to the new NodeResources */ + final boolean isResizable; + + PrioritizableNode(Node node, NodeResources freeParentCapacity, Optional parent, boolean violatesSpares, boolean isSurplusNode, boolean isNewNode, boolean isResizeable) { + if (isResizeable && isNewNode) + throw new IllegalArgumentException("A new node cannot be resizable"); + this.node = node; this.freeParentCapacity = freeParentCapacity; this.parent = parent; this.violatesSpares = violatesSpares; this.isSurplusNode = isSurplusNode; this.isNewNode = isNewNode; + this.isResizable = isResizeable; } /** @@ -139,6 +146,7 @@ class PrioritizableNode implements Comparable { private boolean violatesSpares; private boolean isSurplusNode; private boolean isNewNode; + private boolean isResizable; Builder(Node node) { this.node = node; @@ -170,9 +178,14 @@ class PrioritizableNode implements Comparable { isNewNode = newNode; return this; } + + Builder resizable(boolean resizable) { + isResizable = resizable; + return this; + } PrioritizableNode build() { - return new PrioritizableNode(node, freeParentCapacity, parent, violatesSpares, isSurplusNode, isNewNode); + return new PrioritizableNode(node, freeParentCapacity, parent, violatesSpares, isSurplusNode, isNewNode, isResizable); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNodeTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNodeTest.java index b4618efd371..718abf7d73d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNodeTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNodeTest.java @@ -27,17 +27,17 @@ public class PrioritizableNodeTest { @Test public void test_order() { List expected = List.of( - new PrioritizableNode(node("01", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), false, true, false), - new PrioritizableNode(node("02", Node.State.active), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false), - new PrioritizableNode(node("03", Node.State.inactive), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false), - new PrioritizableNode(node("04", Node.State.reserved), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false), - new PrioritizableNode(node("05", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.active)), true, false, true), - new PrioritizableNode(node("06", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.ready)), true, false, true), - new PrioritizableNode(node("07", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.provisioned)), true, false, true), - new PrioritizableNode(node("08", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.failed)), true, false, true), - new PrioritizableNode(node("09", Node.State.ready), new NodeResources(1, 1, 1, 1), Optional.empty(), true, false, true), - new PrioritizableNode(node("10", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, true), - new PrioritizableNode(node("11", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, true) + new PrioritizableNode(node("01", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), false, true, false, false), + new PrioritizableNode(node("02", Node.State.active), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false, false), + new PrioritizableNode(node("03", Node.State.inactive), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false, false), + new PrioritizableNode(node("04", Node.State.reserved), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, false, false), + new PrioritizableNode(node("05", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.active)), true, false, true, false), + new PrioritizableNode(node("06", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.ready)), true, false, true, false), + new PrioritizableNode(node("07", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.provisioned)), true, false, true, false), + new PrioritizableNode(node("08", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.of(node("host1", Node.State.failed)), true, false, true, false), + new PrioritizableNode(node("09", Node.State.ready), new NodeResources(1, 1, 1, 1), Optional.empty(), true, false, true, false), + new PrioritizableNode(node("10", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, true, false), + new PrioritizableNode(node("11", Node.State.ready), new NodeResources(2, 2, 2, 2), Optional.empty(), true, false, true, false) ); assertOrder(expected); } @@ -136,15 +136,6 @@ public class PrioritizableNodeTest { Status.initial(), Node.State.ready, Optional.empty(), History.empty(), NodeType.tenant, new Reports(), Optional.empty()); Node parent = new Node(hostname + "parent", new IP.Config(Set.of("::1"), Set.of()), hostname, Optional.empty(), new Flavor(totalHostResources), Status.initial(), Node.State.ready, Optional.empty(), History.empty(), NodeType.host, new Reports(), Optional.empty()); - return new PrioritizableNode(node, totalHostResources.subtract(allocatedHostResources), Optional.of(parent), false, false, true); + return new PrioritizableNode(node, totalHostResources.subtract(allocatedHostResources), Optional.of(parent), false, false, true, false); } - - private void printSkew(List nodes) { - for (var node : nodes) - System.out.println("Skew of " + node.node.id() + - ": diff: " + (node.skewWithThis()-node.skewWithoutThis()) + - ", with: " + node.skewWithThis() + - ", without: " + node.skewWithoutThis()); - } - } -- cgit v1.2.3