diff options
Diffstat (limited to 'node-repository')
2 files changed, 1 insertions, 122 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java index b56360d4561..c3d7f3ef6d7 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java @@ -8,12 +8,9 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.provision.LockedNodeList; import com.yahoo.vespa.hosted.provision.Node; -import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.node.IP; import com.yahoo.vespa.hosted.provision.persistence.NameResolver; -import java.util.ArrayList; -import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.List; @@ -96,9 +93,7 @@ public class NodePrioritizer { * @return The list of nodes sorted by PrioritizableNode::compare */ List<PrioritizableNode> prioritize() { - List<PrioritizableNode> priorityList = new ArrayList<>(nodes.values()); - Collections.sort(priorityList); - return priorityList; + return nodes.values().stream().sorted().collect(Collectors.toList()); } /** @@ -222,14 +217,6 @@ public class NodePrioritizer { return builder.build(); } - static boolean isPreferredNodeToBeRelocated(List<Node> nodes, Node node, Node parent) { - NodeList list = new NodeList(nodes); - return list.childrenOf(parent).asList().stream() - .min(NodePrioritizer::compareForRelocation) - .filter(n -> n.equals(node)) - .isPresent(); - } - private boolean isReplacement(int nofNodesInCluster, int nodeFailedNodes) { if (nodeFailedNodes == 0) return false; @@ -245,27 +232,4 @@ public class NodePrioritizer { return resources(requestedNodes) != null; } - private static int compareForRelocation(Node a, Node b) { - // Choose smallest node - int capacity = NodeResourceComparator.defaultOrder().compare(a.flavor().resources(), b.flavor().resources()); - if (capacity != 0) return capacity; - - // Choose unallocated over allocated (this case is when we have ready docker nodes) - if (!a.allocation().isPresent() && b.allocation().isPresent()) return -1; - if (a.allocation().isPresent() && !b.allocation().isPresent()) return 1; - - // Choose container over content nodes - if (a.allocation().isPresent() && b.allocation().isPresent()) { - if (a.allocation().get().membership().cluster().type().equals(ClusterSpec.Type.container) && - !b.allocation().get().membership().cluster().type().equals(ClusterSpec.Type.container)) - return -1; - if (!a.allocation().get().membership().cluster().type().equals(ClusterSpec.Type.container) && - b.allocation().get().membership().cluster().type().equals(ClusterSpec.Type.container)) - return 1; - } - - // To get a stable algorithm - choose lexicographical from hostname - return a.hostname().compareTo(b.hostname()); - } - } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java deleted file mode 100644 index 72e3df84161..00000000000 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.provision.provisioning;// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -import com.yahoo.component.Version; -import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ClusterMembership; -import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.Flavor; -import com.yahoo.config.provision.NodeFlavors; -import com.yahoo.config.provision.NodeResources; -import com.yahoo.config.provision.NodeType; -import com.yahoo.config.provisioning.FlavorsConfig; -import com.yahoo.vespa.hosted.provision.Node; -import com.yahoo.vespa.hosted.provision.node.IP; -import org.junit.Assert; -import org.junit.Test; - -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.Set; - -/** - * @author smorgrav - */ -public class NodePrioritizerTest { - - private static NodeFlavors flavors = new NodeFlavors(flavorsConfig()); - - @Test - public void relocated_nodes_are_preferred() { - List<Node> nodes = new ArrayList<>(); - Node parent = createParent("parent"); - Node b = createNode(parent, "b", new NodeResources(2, 2, 2, 2)); - nodes.add(b); - - // Only one node - should be obvious what to prefer - Assert.assertTrue(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, b, parent)); - - // Two equal nodes - choose lexically - Node a = createNode(parent, "a", new NodeResources(2, 2, 2, 2)); - nodes.add(a); - Assert.assertTrue(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, a, parent)); - Assert.assertFalse(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, b, parent)); - - // Smallest node should be preferred - Node c = createNode(parent, "c", new NodeResources(1, 1, 1, 1)); - nodes.add(c); - Assert.assertTrue(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, c, parent)); - - // Unallocated over allocated - ClusterSpec spec = ClusterSpec.from(ClusterSpec.Type.content, ClusterSpec.Id.from("mycluster"), ClusterSpec.Group.from(0), Version.fromString("6.142.22"), false); - c = c.allocate(ApplicationId.defaultId(), ClusterMembership.from(spec, 0), Instant.now()); - nodes.remove(c); - nodes.add(c); - Node d = createNode(parent, "d", new NodeResources(1, 1, 1, 1)); - nodes.add(d); - Assert.assertTrue(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, d, parent)); - Assert.assertFalse(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, c, parent)); - - // Container over content - ClusterSpec spec2 = ClusterSpec.from(ClusterSpec.Type.container, ClusterSpec.Id.from("mycluster"), ClusterSpec.Group.from(0), Version.fromString("6.142.22"), false); - d = d.allocate(ApplicationId.defaultId(), ClusterMembership.from(spec2, 0), Instant.now()); - nodes.remove(d); - nodes.add(d); - Assert.assertFalse(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, c, parent)); - Assert.assertTrue(NodePrioritizer.isPreferredNodeToBeRelocated(nodes, d, parent)); - } - - private static Node createNode(Node parent, String hostname, NodeResources resources) { - return Node.createDockerNode(Set.of("127.0.0.1"), hostname, parent.hostname(), resources, NodeType.tenant); - } - - private static Node createParent(String hostname) { - return Node.create("openid", new IP.Config(Set.of("127.0.0.1"), Set.of()), hostname, Optional.empty(), - Optional.empty(), flavors.getFlavorOrThrow("host-large"), NodeType.host); - } - - private static FlavorsConfig flavorsConfig() { - FlavorConfigBuilder b = new FlavorConfigBuilder(); - b.addFlavor("host-large", 6., 6., 6, 6, Flavor.Type.BARE_METAL); - return b.build(); - } -} |