diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-11-25 14:22:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-25 14:22:43 +0100 |
commit | f5f005f1d11a0eeed4089bc040584aab8af58539 (patch) | |
tree | c471505cab8753029fbcb8236c05a53b0bc61ff7 /node-repository | |
parent | d548a1bacc6d50c8a3ec30e00c090ea5ec18b38b (diff) | |
parent | c812ad296ec867d41e857ac74a70c9520c9dac0f (diff) |
Merge pull request #11396 from vespa-engine/mortent/devhost-tenant-container
Allow tenant containers to run on dev hosts
Diffstat (limited to 'node-repository')
5 files changed, 38 insertions, 2 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 781dae020b9..a609103ac89 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 @@ -71,7 +71,7 @@ public class DockerHostCapacity { NodeResources freeCapacityOf(Node host, boolean excludeInactive) { // Only hosts have free capacity - if (host.type() != NodeType.host) return new NodeResources(0, 0, 0, 0); + if (!host.type().canRun(NodeType.tenant)) return new NodeResources(0, 0, 0, 0); NodeResources hostResources = hostResourcesCalculator.availableCapacityOf(host.flavor().resources()); return allNodes.childrenOf(host).asList().stream() diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java index 55bea5b83a7..c7a86b283ca 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java @@ -42,6 +42,8 @@ public class FlavorConfigBuilder { flavorConfigBuilder.addFlavor(flavorName, 2. /* cpu*/, 4. /* mem GB*/, 4. /*disk GB*/, 0.5, /* bandwidth Gbps*/ Flavor.Type.DOCKER_CONTAINER); else if (flavorName.equals("host")) flavorConfigBuilder.addFlavor(flavorName, 7. /* cpu*/, 10. /* mem GB*/, 12. /*disk GB*/, 5 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL); + else if (flavorName.equals("devhost")) + flavorConfigBuilder.addFlavor(flavorName, 4. /* cpu*/, 8. /* mem GB*/, 10 /*disk GB*/, 10 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL); else flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, 3 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL); } 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 f80ccff94e9..2316c5cf4de 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 @@ -138,7 +138,7 @@ public class NodePrioritizer { NodeResources wantedResources = resources(requestedNodes); for (Node host : candidates) { - if (host.type() != NodeType.host) continue; + if (!host.type().canRun(requestedNodes.type())) continue; if (host.status().wantToRetire()) continue; boolean hostHasCapacityForWantedFlavor = capacity.hasCapacity(host, wantedResources); 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 a41b61fd352..e2015cfd30a 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 @@ -105,6 +105,26 @@ public class DockerHostCapacityTest { capacity.freeCapacityOf(host3, false)); } + @Test + public void devhostCapacityTest() { + // Dev host can assign both configserver and tenant containers. + + var nodeFlavors = FlavorConfigBuilder.createDummies("devhost", "container"); + var devHost = Node.create("devhost", new IP.Config(Set.of("::1"), generateIPs(2, 10)), "devhost", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("devhost"), NodeType.devhost); + + var cfg = Node.createDockerNode(Set.of("::2"), "cfg", "devhost", resources1, NodeType.config); + + var nodes = new ArrayList<>(List.of(cfg)); + var capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator); + assertTrue(capacity.hasCapacity(devHost, resources1)); + + var container1 = Node.createDockerNode(Set.of("::3"), "container1", "devhost", resources1, NodeType.tenant); + nodes = new ArrayList<>(List.of(cfg, container1)); + capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator); + assertFalse(capacity.hasCapacity(devHost, resources1)); + + } + private Set<String> generateIPs(int start, int count) { // Allow 4 containers Set<String> ipAddressPool = new LinkedHashSet<>(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index 5a00d9d827b..49dc31c9f39 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -13,6 +13,7 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.OutOfCapacityException; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.hosted.provision.Node; @@ -637,6 +638,19 @@ public class ProvisioningTest { } catch (IllegalArgumentException ignored) {} } + @Test + public void devsystem_application_deployment_on_devhost() { + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(SystemName.dev, Environment.dev, RegionName.from("no-central"))).build(); + + tester.makeReadyNodes(4, defaultResources, NodeType.devhost, 1); + tester.prepareAndActivateInfraApplication(tester.makeApplicationId(), NodeType.devhost); + + ApplicationId application = tester.makeApplicationId(); + SystemState state = prepare(application, 2, 2, 3, 3, defaultResources, tester); + assertEquals(4, state.allHosts.size()); + tester.activate(application, state.allHosts); + } + private SystemState prepare(ApplicationId application, int container0Size, int container1Size, int content0Size, int content1Size, NodeResources flavor, ProvisioningTester tester) { return prepare(application, container0Size, container1Size, content0Size, content1Size, flavor, |