diff options
Diffstat (limited to 'node-admin/src/main/java/com/yahoo')
4 files changed, 19 insertions, 11 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperations.java index c8fd4c077ce..255c04e0072 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperations.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperations.java @@ -8,6 +8,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.ContainerStats; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.dockerapi.RegistryCredentials; +import com.yahoo.vespa.hosted.node.admin.component.TaskContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.task.util.process.CommandResult; @@ -20,6 +21,7 @@ import java.util.Set; /** * @author hakonhall */ +// TODO(mpolden): Clean up this interface when ContainerOperationsImpl, DockerEngine and friends can be removed public interface ContainerOperations { void createContainer(NodeAgentContext context, ContainerData containerData, ContainerResources containerResources); @@ -32,7 +34,7 @@ public interface ContainerOperations { Optional<Container> getContainer(NodeAgentContext context); - boolean pullImageAsyncIfNeeded(DockerImage dockerImage, RegistryCredentials registryCredentials); + boolean pullImageAsyncIfNeeded(TaskContext context, DockerImage dockerImage, RegistryCredentials registryCredentials); ProcessResult executeCommandInContainerAsRoot(NodeAgentContext context, String... command); @@ -59,10 +61,14 @@ public interface ContainerOperations { Optional<ContainerStats> getContainerStats(NodeAgentContext context); - boolean noManagedContainersRunning(); + boolean noManagedContainersRunning(TaskContext context); - /** Stops and removes all managed containers except the ones given in {@code containerNames} */ - boolean retainManagedContainers(Set<ContainerName> containerNames); + /** + * Stops and removes all managed containers except the ones given in {@code containerNames}. + * + * @return true if any containers were removed + */ + boolean retainManagedContainers(TaskContext context, Set<ContainerName> containerNames); /** Deletes the local images that are currently not in use by any container and not recently used. */ boolean deleteUnusedContainerImages(List<DockerImage> excludes, Duration minImageAgeToDelete); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImpl.java index 40e1622fa0d..bcdeaf7db68 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImpl.java @@ -13,6 +13,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.ContainerStats; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.dockerapi.RegistryCredentials; +import com.yahoo.vespa.hosted.node.admin.component.TaskContext; import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException; import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; @@ -211,7 +212,7 @@ public class ContainerOperationsImpl implements ContainerOperations { } @Override - public boolean pullImageAsyncIfNeeded(DockerImage dockerImage, RegistryCredentials registryCredentials) { + public boolean pullImageAsyncIfNeeded(TaskContext context, DockerImage dockerImage, RegistryCredentials registryCredentials) { return containerEngine.pullImageAsyncIfNeeded(dockerImage, registryCredentials); } @@ -321,12 +322,12 @@ public class ContainerOperationsImpl implements ContainerOperations { } @Override - public boolean noManagedContainersRunning() { + public boolean noManagedContainersRunning(TaskContext context) { return containerEngine.noManagedContainersRunning(MANAGER_NAME); } @Override - public boolean retainManagedContainers(Set<ContainerName> containerNames) { + public boolean retainManagedContainers(TaskContext context, Set<ContainerName> containerNames) { return containerEngine.listManagedContainers(MANAGER_NAME).stream() .filter(containerName -> ! containerNames.contains(containerName)) .peek(containerName -> { diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java index f93cd005fae..5ea0a5d12c3 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java @@ -244,7 +244,7 @@ public class NodeAgentContextImpl implements NodeAgentContext { return this; } - public Builder dockerNetworking(ContainerNetworkMode containerNetworkMode) { + public Builder networkMode(ContainerNetworkMode containerNetworkMode) { this.containerNetworkMode = containerNetworkMode; return this; } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java index 9fa21e5a676..dc0b6dc9d85 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java @@ -393,12 +393,13 @@ public class NodeAgentImpl implements NodeAgent { return zone.getEnvironment() == Environment.dev || zone.getSystemName().isCd(); } - private boolean downloadImageIfNeeded(NodeSpec node, Optional<Container> container) { + private boolean downloadImageIfNeeded(NodeAgentContext context, Optional<Container> container) { + NodeSpec node = context.node(); if (node.wantedDockerImage().equals(container.map(c -> c.image))) return false; RegistryCredentials credentials = registryCredentialsProvider.get(); return node.wantedDockerImage() - .map(image -> containerOperations.pullImageAsyncIfNeeded(image, credentials)) + .map(image -> containerOperations.pullImageAsyncIfNeeded(context, image, credentials)) .orElse(false); } @@ -454,7 +455,7 @@ public class NodeAgentImpl implements NodeAgent { storageMaintainer.cleanDiskIfFull(context); storageMaintainer.handleCoreDumpsForContainer(context, container); - if (downloadImageIfNeeded(node, container)) { + if (downloadImageIfNeeded(context, container)) { context.log(logger, "Waiting for image to download " + context.node().wantedDockerImage().get().asString()); return; } |