diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-06-12 17:03:37 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-06-14 09:18:46 +0200 |
commit | 72ce1a2d0a94a646de69bc81359f7810681b25c0 (patch) | |
tree | b15eb817a7bccbd4f3495ee69b449260a34d0ca6 /node-repository | |
parent | f71fa054a1952a23c583da4abfa6165d9ea9e497 (diff) |
Propagate HostResourcesCalculator to DockerHostCapacity
Diffstat (limited to 'node-repository')
9 files changed, 58 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java index 4cc75ead4ee..df180d54158 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java @@ -19,9 +19,11 @@ import java.util.Objects; public class DockerHostCapacity { private final LockedNodeList allNodes; + private final HostResourcesCalculator hostResourcesCalculator; - DockerHostCapacity(LockedNodeList allNodes) { + DockerHostCapacity(LockedNodeList allNodes, HostResourcesCalculator hostResourcesCalculator) { this.allNodes = Objects.requireNonNull(allNodes, "allNodes must be non-null"); + this.hostResourcesCalculator = Objects.requireNonNull(hostResourcesCalculator, "hostResourcesCalculator must be non-null"); } int compareWithoutInactive(Node hostA, Node hostB) { 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 eb72e1a2081..05915b82bae 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 @@ -1,6 +1,7 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; +import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService; import java.util.Optional; @@ -9,6 +10,8 @@ import java.util.Optional; * @author freva */ public class EmptyProvisionServiceProvider implements ProvisionServiceProvider { + private final HostResourcesCalculator hostResourcesCalculator = new NoopHostResourcesCalculator(); + @Override public Optional<LoadBalancerService> getLoadBalancerService() { return Optional.empty(); @@ -18,4 +21,17 @@ public class EmptyProvisionServiceProvider implements ProvisionServiceProvider { public Optional<HostProvisioner> getHostProvisioner() { return Optional.empty(); } + + @Override + public HostResourcesCalculator getHostResourcesCalculator() { + return hostResourcesCalculator; + } + + public static class NoopHostResourcesCalculator implements HostResourcesCalculator { + + @Override + public NodeResources availableCapacityOf(NodeResources hostResources) { + return hostResources; + } + } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java index ff412c6c99b..30d39a4717f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java @@ -25,12 +25,14 @@ public class GroupPreparer { private final NodeRepository nodeRepository; private final Optional<HostProvisioner> hostProvisioner; + private final HostResourcesCalculator hostResourcesCalculator; private final BooleanFlag dynamicProvisioningEnabledFlag; public GroupPreparer(NodeRepository nodeRepository, Optional<HostProvisioner> hostProvisioner, - BooleanFlag dynamicProvisioningEnabledFlag) { + HostResourcesCalculator hostResourcesCalculator, BooleanFlag dynamicProvisioningEnabledFlag) { this.nodeRepository = nodeRepository; this.hostProvisioner = hostProvisioner; + this.hostResourcesCalculator = hostResourcesCalculator; this.dynamicProvisioningEnabledFlag = dynamicProvisioningEnabledFlag; } @@ -65,7 +67,8 @@ public class GroupPreparer { LockedNodeList nodeList = nodeRepository.list(allocationLock); NodePrioritizer prioritizer = new NodePrioritizer(nodeList, application, cluster, requestedNodes, spareCount, nodeRepository.nameResolver(), - nodeRepository.getAvailableFlavors()); + nodeRepository.getAvailableFlavors(), + hostResourcesCalculator); prioritizer.addApplicationNodes(); prioritizer.addSurplusNodes(surplusActiveNodes); 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 new file mode 100644 index 00000000000..50aeb464e9f --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java @@ -0,0 +1,13 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.provisioning; + +import com.yahoo.config.provision.NodeResources; + +/** + * @author freva + */ +public interface HostResourcesCalculator { + + /** Calculates the resources that are reserved for host level processes and returns the remainder. */ + NodeResources availableCapacityOf(NodeResources hostResources); +} 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 294ba12497a..6b27662448c 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 @@ -51,9 +51,9 @@ class NodePrioritizer { private final Set<Node> spareHosts; NodePrioritizer(LockedNodeList allNodes, ApplicationId appId, ClusterSpec clusterSpec, NodeSpec nodeSpec, - int spares, NameResolver nameResolver, NodeFlavors flavors) { + int spares, NameResolver nameResolver, NodeFlavors flavors, HostResourcesCalculator hostResourcesCalculator) { this.allNodes = allNodes; - this.capacity = new DockerHostCapacity(allNodes); + this.capacity = new DockerHostCapacity(allNodes, hostResourcesCalculator); this.requestedNodes = nodeSpec; this.clusterSpec = clusterSpec; this.appId = appId; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index 643243d5c3a..21bfc1b6886 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -65,6 +65,7 @@ public class NodeRepositoryProvisioner implements Provisioner { this.preparer = new Preparer(nodeRepository, zone.environment() == Environment.prod ? SPARE_CAPACITY_PROD : SPARE_CAPACITY_NONPROD, provisionServiceProvider.getHostProvisioner(), + provisionServiceProvider.getHostResourcesCalculator(), Flags.ENABLE_DYNAMIC_PROVISIONING.bindTo(flagSource)); this.activator = new Activator(nodeRepository); this.loadBalancerProvisioner = provisionServiceProvider.getLoadBalancerService().map(lbService -> diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java index 75960e4416a..ca958f15c69 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java @@ -27,10 +27,10 @@ class Preparer { private final int spareCount; public Preparer(NodeRepository nodeRepository, int spareCount, Optional<HostProvisioner> hostProvisioner, - BooleanFlag dynamicProvisioningEnabled) { + HostResourcesCalculator hostResourcesCalculator, BooleanFlag dynamicProvisioningEnabled) { this.nodeRepository = nodeRepository; this.spareCount = spareCount; - this.groupPreparer = new GroupPreparer(nodeRepository, hostProvisioner, dynamicProvisioningEnabled); + this.groupPreparer = new GroupPreparer(nodeRepository, hostProvisioner, hostResourcesCalculator, dynamicProvisioningEnabled); } /** diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java index ca9e629e1ea..a86bd581516 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java @@ -15,4 +15,6 @@ public interface ProvisionServiceProvider { Optional<LoadBalancerService> getLoadBalancerService(); Optional<HostProvisioner> getHostProvisioner(); + + HostResourcesCalculator getHostResourcesCalculator(); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisionServiceProvider.java index ea48d8a6b47..0d5950fe33a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisionServiceProvider.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisionServiceProvider.java @@ -4,7 +4,9 @@ package com.yahoo.vespa.hosted.provision.testutils; import com.google.inject.Inject; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerServiceMock; +import com.yahoo.vespa.hosted.provision.provisioning.EmptyProvisionServiceProvider; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner; +import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; import com.yahoo.vespa.hosted.provision.provisioning.ProvisionServiceProvider; import java.util.Optional; @@ -16,6 +18,7 @@ public class MockProvisionServiceProvider implements ProvisionServiceProvider { private final Optional<LoadBalancerService> loadBalancerService; private final Optional<HostProvisioner> hostProvisioner; + private final HostResourcesCalculator hostResourcesCalculator; @Inject public MockProvisionServiceProvider() { @@ -23,8 +26,14 @@ public class MockProvisionServiceProvider implements ProvisionServiceProvider { } public MockProvisionServiceProvider(LoadBalancerService loadBalancerService, HostProvisioner hostProvisioner) { + this(loadBalancerService, hostProvisioner, new EmptyProvisionServiceProvider.NoopHostResourcesCalculator()); + } + + public MockProvisionServiceProvider(LoadBalancerService loadBalancerService, HostProvisioner hostProvisioner, + HostResourcesCalculator hostResourcesCalculator) { this.loadBalancerService = Optional.ofNullable(loadBalancerService); this.hostProvisioner = Optional.ofNullable(hostProvisioner); + this.hostResourcesCalculator = hostResourcesCalculator; } @Override @@ -36,4 +45,9 @@ public class MockProvisionServiceProvider implements ProvisionServiceProvider { public Optional<HostProvisioner> getHostProvisioner() { return hostProvisioner; } + + @Override + public HostResourcesCalculator getHostResourcesCalculator() { + return hostResourcesCalculator; + } } |