diff options
4 files changed, 17 insertions, 0 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java index 27b2a6b1d77..dba7b157892 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java @@ -32,6 +32,7 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand { private final List<Ulimit> ulimits = new ArrayList<>(); private Optional<Long> memoryInB = Optional.empty(); + private Optional<Integer> cpuShares = Optional.empty(); private Optional<String> networkMode = Optional.empty(); private Optional<String> ipv4Address = Optional.empty(); private Optional<String> ipv6Address = Optional.empty(); @@ -107,6 +108,12 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand { } @Override + public Docker.CreateContainerCommand withCpuShares(int shares) { + cpuShares = Optional.of(shares); + return this; + } + + @Override public Docker.CreateContainerCommand withNetworkMode(String mode) { networkMode = Optional.of(mode); return this; @@ -150,6 +157,7 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand { .ifPresent(mode -> containerCmd.withMacAddress(generateRandomMACAddress())); memoryInB.ifPresent(containerCmd::withMemory); + cpuShares.ifPresent(containerCmd::withCpuShares); networkMode.ifPresent(containerCmd::withNetworkMode); ipv4Address.ifPresent(containerCmd::withIpv4Address); ipv6Address.ifPresent(containerCmd::withIpv6Address); @@ -189,6 +197,7 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand { + toRepeatedOption("--cap-add", addCapabilitiesList) + toRepeatedOption("--cap-drop", dropCapabilitiesList) + toOptionalOption("--memory", memoryInB) + + toOptionalOption("--cpu-shares", cpuShares) + toOptionalOption("--net", networkMode) + toOptionalOption("--ip", ipv4Address) + toOptionalOption("--ip6", ipv6Address) diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java index f61998aba4c..b628bd77d91 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java @@ -18,6 +18,7 @@ public interface Docker { CreateContainerCommand withEnvironment(String name, String value); CreateContainerCommand withVolume(String path, String volumePath); CreateContainerCommand withMemoryInMb(long megaBytes); + CreateContainerCommand withCpuShares(int shares); CreateContainerCommand withNetworkMode(String mode); CreateContainerCommand withIpAddress(InetAddress address); CreateContainerCommand withUlimit(String name, int softLimit, int hardLimit); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index 90f1174f68e..6b51e56080f 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -178,6 +178,8 @@ public class DockerOperationsImpl implements DockerOperations { } } + nodeSpec.minCpuCores.ifPresent(cpuShares -> command.withCpuShares((int) Math.round(10 * cpuShares))); + logger.info("Starting new container with args: " + command); command.create(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java index 8c7eda50a24..bc3ce6ce5bb 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java @@ -182,6 +182,11 @@ public class DockerMock implements Docker { } @Override + public CreateContainerCommand withCpuShares(int shares) { + return this; + } + + @Override public CreateContainerCommand withNetworkMode(String mode) { return this; } |