summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java9
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java1
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java5
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;
}