summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-06-14 10:59:01 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-06-14 10:59:01 +0200
commit0b88f88ae82228e7c5ae88449f6b16151828e166 (patch)
tree87356e4b7f16bd742fc77f50c9d85f2e1678d10a /node-repository
parent72ce1a2d0a94a646de69bc81359f7810681b25c0 (diff)
Use DockerHostCalculator to find the available capacity remaining on the host
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java25
2 files changed, 25 insertions, 3 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 df180d54158..a5969dc69cb 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
@@ -62,6 +62,7 @@ public class DockerHostCapacity {
NodeResources freeCapacityOf(Node dockerHost, boolean excludeInactive) {
// Only hosts have free capacity
if (dockerHost.type() != NodeType.host) return new NodeResources(0, 0, 0);
+ NodeResources hostResources = hostResourcesCalculator.availableCapacityOf(dockerHost.flavor().resources());
// Subtract used resources without taking disk speed into account since existing allocations grandfathered in
// may not use reflect the actual disk speed (as of May 2019). This (the 3 diskSpeed assignments below)
@@ -69,7 +70,7 @@ public class DockerHostCapacity {
return allNodes.childrenOf(dockerHost).asList().stream()
.filter(node -> !(excludeInactive && isInactiveOrRetired(node)))
.map(node -> node.flavor().resources().withDiskSpeed(NodeResources.DiskSpeed.any))
- .reduce(dockerHost.flavor().resources().withDiskSpeed(NodeResources.DiskSpeed.any), NodeResources::subtract)
+ .reduce(hostResources.withDiskSpeed(NodeResources.DiskSpeed.any), NodeResources::subtract)
.withDiskSpeed(dockerHost.flavor().resources().diskSpeed());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
index 58d306adc75..60a31f1c804 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.provision.provisioning;
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.vespa.hosted.provision.LockedNodeList;
import com.yahoo.vespa.hosted.provision.Node;
@@ -18,12 +19,16 @@ import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
/**
* @author smorgrav
*/
public class DockerHostCapacityTest {
+ private final HostResourcesCalculator hostResourcesCalculator = mock(HostResourcesCalculator.class);
private DockerHostCapacity capacity;
private List<Node> nodes;
private Node host1, host2, host3;
@@ -31,6 +36,8 @@ public class DockerHostCapacityTest {
@Before
public void setup() {
+ doAnswer(invocation -> invocation.getArguments()[0]).when(hostResourcesCalculator).availableCapacityOf(any());
+
// Create flavors
NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("host", "docker", "docker2");
flavorDocker = nodeFlavors.getFlavorOrThrow("docker");
@@ -54,7 +61,7 @@ public class DockerHostCapacityTest {
// init docker host capacity
nodes = new ArrayList<>(List.of(host1, host2, host3, nodeA, nodeB, nodeC, nodeD, nodeE));
- capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}));
+ capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
}
@Test
@@ -70,7 +77,7 @@ public class DockerHostCapacityTest {
Node nodeF = Node.create("nodeF", Set.of("::6"), Set.of(),
"nodeF", Optional.of("host1"), Optional.empty(), flavorDocker, NodeType.tenant);
nodes.add(nodeF);
- capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}));
+ capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
assertFalse(capacity.hasCapacity(host1, flavorDocker.resources()));
assertFalse(capacity.hasCapacity(host1, flavorDocker2.resources()));
}
@@ -82,6 +89,20 @@ public class DockerHostCapacityTest {
assertEquals(0, capacity.freeIPs(host3));
}
+ @Test
+ public void freeCapacityOf() {
+ assertEquals(new NodeResources(5, 4, 8), capacity.freeCapacityOf(host1, false));
+ assertEquals(new NodeResources(5, 6, 8), capacity.freeCapacityOf(host3, false));
+
+ doAnswer(invocation -> {
+ NodeResources totalHostResources = (NodeResources) invocation.getArguments()[0];
+ return totalHostResources.subtract(new NodeResources(1, 2, 3, NodeResources.DiskSpeed.any));
+ }).when(hostResourcesCalculator).availableCapacityOf(any());
+
+ assertEquals(new NodeResources(4, 2, 5), capacity.freeCapacityOf(host1, false));
+ assertEquals(new NodeResources(4, 4, 5), capacity.freeCapacityOf(host3, false));
+ }
+
private Set<String> generateIPs(int start, int count) {
// Allow 4 containers
Set<String> ipAddressPool = new LinkedHashSet<>();