diff options
10 files changed, 45 insertions, 15 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java index 3b3711d1081..21f28f8385a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java @@ -30,7 +30,7 @@ import java.util.Set; * @author bratseth * @author mpolden */ -public final class Node { +public final class Node implements Nodelike { private final String hostname; private final IP.Config ipConfig; @@ -116,13 +116,14 @@ public final class Node { */ public String id() { return id; } - /** Returns the parent hostname for this node if this node is a docker container or a VM (i.e. it has a parent host). Otherwise, empty **/ + @Override public Optional<String> parentHostname() { return parentHostname; } public boolean hasParent(String hostname) { return parentHostname.isPresent() && parentHostname.get().equals(hostname); } + @Override public NodeResources resources() { return flavor.resources(); } /** Returns the flavor of this node */ @@ -134,7 +135,7 @@ public final class Node { /** Returns the current state of this node (in the node state machine) */ public State state() { return state; } - /** Returns the type of this node */ + @Override public NodeType type() { return type; } /** Returns the current allocation of this, if any */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Nodelike.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Nodelike.java new file mode 100644 index 00000000000..a246d2a5cb8 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Nodelike.java @@ -0,0 +1,23 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision; + +import com.yahoo.config.provision.NodeResources; +import com.yahoo.config.provision.NodeType; + +import java.util.Optional; + +/** + * The API of anything that can behave essentially like a node. + * + * @author bratseth + */ +public interface Nodelike { + + NodeResources resources(); + + /** Returns the hostname oif the parent if this is a child node */ + Optional<String> parentHostname(); + + NodeType type(); + +} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java index 66061ad4e9f..321301a46a4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java @@ -222,8 +222,8 @@ public class IP { /** * Find a free allocation in this pool. Note that the allocation is not final until it is assigned to a node * - * @param nodes A locked list of all nodes in the repository - * @return An allocation from the pool, if any can be made + * @param nodes a locked list of all nodes in the repository + * @return an allocation from the pool, if any can be made */ public Optional<Allocation> findAllocation(LockedNodeList nodes, NameResolver resolver) { var unusedAddresses = findUnused(nodes); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java index 38dd9f29873..c91a43e9064 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java @@ -5,6 +5,7 @@ import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService; import java.util.Optional; @@ -34,7 +35,7 @@ public class EmptyProvisionServiceProvider implements ProvisionServiceProvider { private static class IdentityHostResourcesCalculator implements HostResourcesCalculator { @Override - public NodeResources realResourcesOf(Node node, NodeRepository repository) { return node.resources(); } + public NodeResources realResourcesOf(Nodelike node, NodeRepository repository) { return node.resources(); } @Override public NodeResources advertisedResourcesOf(Flavor flavor) { return flavor.resources(); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java index a071fb25da2..75847f0aa8c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java @@ -5,6 +5,7 @@ import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; /** * Some cloud providers advertise that a certain amount of resources are available in a flavor @@ -17,7 +18,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; public interface HostResourcesCalculator { /** Returns the real resources available on a node */ - NodeResources realResourcesOf(Node node, NodeRepository nodeRepository); + NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository); /** Returns the advertised resources of a flavor */ NodeResources advertisedResourcesOf(Flavor flavor); 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 4056b14d4b9..3a6359e6507 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 @@ -145,10 +145,10 @@ public class NodePrioritizer { resources(requestedNodes).with(host.flavor().resources().diskSpeed()) .with(host.flavor().resources().storageType()), NodeType.tenant); - NodeCandidate nodePri = candidateFrom(newNode, false, true); - if ( ! nodePri.violatesSpares || isAllocatingForReplacement) { + NodeCandidate candidate = candidateFrom(newNode, false, true); + if ( ! candidate.violatesSpares || isAllocatingForReplacement) { log.log(Level.FINE, "Adding new Docker node " + newNode); - nodes.put(newNode, nodePri); + nodes.put(newNode, candidate); } } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index 00d1cd84e4c..5b4b0b5bcb2 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -13,6 +13,7 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; import org.junit.Test; @@ -382,7 +383,7 @@ public class AutoscalingTest { } @Override - public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) { + public NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository) { return node.resources(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index 9e51fa37246..b81110e7a31 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -17,6 +17,7 @@ import com.yahoo.test.ManualClock; import com.yahoo.transaction.Mutex; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.IP; @@ -205,7 +206,7 @@ class AutoscalingTester { } @Override - public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) { + public NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository) { if (zone.getCloud().dynamicProvisioning()) return node.resources().withMemoryGb(node.resources().memoryGb() - 3); else diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningCompleteHostCalculatorTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningCompleteHostCalculatorTest.java index d8ff34d1244..535746e14e6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningCompleteHostCalculatorTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningCompleteHostCalculatorTest.java @@ -12,6 +12,7 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; import org.junit.Test; import java.util.List; @@ -81,8 +82,8 @@ public class DockerProvisioningCompleteHostCalculatorTest { } @Override - public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) { - if (node.parentHostname().isEmpty()) return node.flavor().resources(); // hosts use configured flavors + public NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository) { + if (node.parentHostname().isEmpty()) return node.resources(); // hosts use configured flavors return realResourcesOf(node.resources()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 078b1d372df..8410a098809 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -31,6 +31,7 @@ import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.Nodelike; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerServiceMock; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.IP; @@ -689,7 +690,7 @@ public class ProvisioningTester { } @Override - public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) { + public NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository) { NodeResources resources = node.resources(); if (node.type() == NodeType.host) return resources; return resources.withMemoryGb(resources.memoryGb() - memoryTaxGb) |