diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2019-02-25 10:49:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-25 10:49:50 +0100 |
commit | d3c80d67c20b23b3cff0ed49f0f6fa57bce703df (patch) | |
tree | 4b941aef44ec3adc10b99c4bd664bd90fe1e14b9 | |
parent | a53aa969015699f3518bd32e3acb8a1339150de8 (diff) | |
parent | 054845530c78d4125af08f2448de17ac660d32f7 (diff) |
Merge pull request #8584 from vespa-engine/freva/remove-node-repo-dependency
NodeAdmin: Remove node-repo dependency
31 files changed, 311 insertions, 333 deletions
diff --git a/node-admin/pom.xml b/node-admin/pom.xml index d550ceb7c9d..a61a55fcfd9 100644 --- a/node-admin/pom.xml +++ b/node-admin/pom.xml @@ -33,12 +33,6 @@ </dependency> <dependency> <groupId>com.yahoo.vespa</groupId> - <artifactId>defaults</artifactId> - <version>${project.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>com.yahoo.vespa</groupId> <artifactId>container-dev</artifactId> <version>${project.version}</version> <scope>provided</scope> @@ -74,12 +68,6 @@ <scope>compile</scope> </dependency> <dependency> - <groupId>com.yahoo.vespa</groupId> - <artifactId>node-repository</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.1</version> @@ -135,6 +123,12 @@ </dependency> <dependency> <groupId>com.yahoo.vespa</groupId> + <artifactId>node-repository</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.yahoo.vespa</groupId> <artifactId>service-monitor</artifactId> <version>${project.version}</version> <scope>test</scope> diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/TaskComponent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/TaskComponent.java deleted file mode 100644 index cbe9b32cc47..00000000000 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/TaskComponent.java +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.node.admin.component; - -import com.yahoo.component.ComponentId; -import com.yahoo.component.chain.ChainedComponent; - -public abstract class TaskComponent extends ChainedComponent implements IdempotentTask<TaskContext> { - protected TaskComponent(ComponentId id) { - super(id); - } - - public String name() { - return getIdString(); - } - - public abstract boolean converge(TaskContext context); -} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/flags/FlagRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/flags/FlagRepository.java index 8407d42131b..078b745bac4 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/flags/FlagRepository.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/flags/FlagRepository.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.node.admin.configserver.flags; import com.yahoo.vespa.flags.FlagId; import com.yahoo.vespa.flags.json.FlagData; -import java.util.List; import java.util.Map; /** diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java index 8c8adf5c190..ad052f28d7d 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeAttributes.java @@ -30,7 +30,6 @@ public class NodeAttributes { private Optional<String> hardwareDivergence = Optional.empty(); private Optional<String> hardwareFailureDescription = Optional.empty(); private Optional<Boolean> wantToDeprovision = Optional.empty(); - private Optional<String> modelName = Optional.empty(); /** The list of reports to patch. A null value is used to remove the report. */ private Map<String, JsonNode> reports = new TreeMap<>(); @@ -80,11 +79,6 @@ public class NodeAttributes { return this; } - public NodeAttributes withModelName(String modelName) { - this.modelName = Optional.of(modelName); - return this; - } - public NodeAttributes withReports(Map<String, JsonNode> nodeReports) { this.reports = new TreeMap<>(nodeReports); return this; diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java new file mode 100644 index 00000000000..bb16e2bae63 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java @@ -0,0 +1,77 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; + +/** + * @author freva + */ +public class NodeMembership { + private final String clusterType; + private final String clusterId; + private final String group; + private final int index; + private final boolean retired; + + public NodeMembership(String clusterType, String clusterId, String group, int index, boolean retired) { + this.clusterType = clusterType; + this.clusterId = clusterId; + this.group = group; + this.index = index; + this.retired = retired; + } + + public String getClusterType() { + return clusterType; + } + + public String getClusterId() { + return clusterId; + } + + public String getGroup() { + return group; + } + + public int getIndex() { + return index; + } + + public boolean isRetired() { + return retired; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + NodeMembership that = (NodeMembership) o; + + if (index != that.index) return false; + if (retired != that.retired) return false; + if (!clusterType.equals(that.clusterType)) return false; + if (!clusterId.equals(that.clusterId)) return false; + return group.equals(that.group); + + } + + @Override + public int hashCode() { + int result = clusterType.hashCode(); + result = 31 * result + clusterId.hashCode(); + result = 31 * result + group.hashCode(); + result = 31 * result + index; + result = 31 * result + (retired ? 1 : 0); + return result; + } + + @Override + public String toString() { + return "Membership {" + + " clusterType = " + clusterType + + " clusterId = " + clusterId + + " group = " + group + + " index = " + index + + " retired = " + retired + + " }"; + } +} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java new file mode 100644 index 00000000000..c1900316bb9 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeOwner.java @@ -0,0 +1,64 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; + +import com.yahoo.config.provision.ApplicationId; + +/** + * @author freva + */ +public class NodeOwner { + private final String tenant; + private final String application; + private final String instance; + + public NodeOwner(String tenant, String application, String instance) { + this.tenant = tenant; + this.application = application; + this.instance = instance; + } + + public String getTenant() { + return tenant; + } + + public String getApplication() { + return application; + } + + public String getInstance() { + return instance; + } + + public ApplicationId asApplicationId() { + return ApplicationId.from(tenant, application, instance); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + NodeOwner owner = (NodeOwner) o; + + if (!tenant.equals(owner.tenant)) return false; + if (!application.equals(owner.application)) return false; + return instance.equals(owner.instance); + + } + + @Override + public int hashCode() { + int result = tenant.hashCode(); + result = 31 * result + application.hashCode(); + result = 31 * result + instance.hashCode(); + return result; + } + + public String toString() { + return "Owner {" + + " tenant = " + tenant + + " application = " + application + + " instance = " + instance + + " }"; + } +} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java index 5fc82a70e80..4cce6ce08d6 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java @@ -1,8 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; -import com.yahoo.vespa.hosted.provision.Node; - import java.util.List; import java.util.Map; import java.util.Optional; @@ -26,7 +24,5 @@ public interface NodeRepository { void updateNodeAttributes(String hostName, NodeAttributes nodeAttributes); - void setNodeState(String hostName, Node.State nodeState); - - void scheduleReboot(String hostname); + void setNodeState(String hostName, NodeState nodeState); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java index ac65ac8af35..35bcf2f2114 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java @@ -2,10 +2,8 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.fasterxml.jackson.databind.JsonNode; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.DockerImage; -import com.yahoo.vespa.hosted.provision.Node; import java.time.Instant; import java.util.Collections; @@ -18,7 +16,7 @@ import java.util.Set; */ public class NodeSpec { private final String hostname; - private final Node.State state; + private final NodeState state; private final NodeType nodeType; private final String flavor; private final String canonicalFlavor; @@ -45,8 +43,8 @@ public class NodeSpec { private final Optional<Boolean> allowedToBeDown; private final Optional<Boolean> wantToDeprovision; - private final Optional<Owner> owner; - private final Optional<Membership> membership; + private final Optional<NodeOwner> owner; + private final Optional<NodeMembership> membership; private final double minCpuCores; private final double minMainMemoryAvailableGb; @@ -65,7 +63,7 @@ public class NodeSpec { String hostname, Optional<DockerImage> wantedDockerImage, Optional<DockerImage> currentDockerImage, - Node.State state, + NodeState state, NodeType nodeType, String flavor, String canonicalFlavor, @@ -75,8 +73,8 @@ public class NodeSpec { Optional<String> currentOsVersion, Optional<Boolean> allowedToBeDown, Optional<Boolean> wantToDeprovision, - Optional<Owner> owner, - Optional<Membership> membership, + Optional<NodeOwner> owner, + Optional<NodeMembership> membership, Optional<Long> wantedRestartGeneration, Optional<Long> currentRestartGeneration, long wantedRebootGeneration, @@ -130,7 +128,7 @@ public class NodeSpec { return hostname; } - public Node.State getState() { + public NodeState getState() { return state; } @@ -206,11 +204,11 @@ public class NodeSpec { return wantToDeprovision; } - public Optional<Owner> getOwner() { + public Optional<NodeOwner> getOwner() { return owner; } - public Optional<Membership> getMembership() { + public Optional<NodeMembership> getMembership() { return membership; } @@ -358,140 +356,11 @@ public class NodeSpec { + " }"; } - public static class Owner { - private final String tenant; - private final String application; - private final String instance; - - public Owner(String tenant, String application, String instance) { - this.tenant = tenant; - this.application = application; - this.instance = instance; - } - - public String getTenant() { - return tenant; - } - - public String getApplication() { - return application; - } - - public String getInstance() { - return instance; - } - - public ApplicationId asApplicationId() { - return ApplicationId.from(tenant, application, instance); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Owner owner = (Owner) o; - - if (!tenant.equals(owner.tenant)) return false; - if (!application.equals(owner.application)) return false; - return instance.equals(owner.instance); - - } - - @Override - public int hashCode() { - int result = tenant.hashCode(); - result = 31 * result + application.hashCode(); - result = 31 * result + instance.hashCode(); - return result; - } - - public String toString() { - return "Owner {" + - " tenant = " + tenant + - " application = " + application + - " instance = " + instance + - " }"; - } - } - - public static class Membership { - private final String clusterType; - private final String clusterId; - private final String group; - private final int index; - private final boolean retired; - - public Membership(String clusterType, String clusterId, String group, int index, boolean retired) { - this.clusterType = clusterType; - this.clusterId = clusterId; - this.group = group; - this.index = index; - this.retired = retired; - } - - public String getClusterType() { - return clusterType; - } - - public String getClusterId() { - return clusterId; - } - - public String getGroup() { - return group; - } - - public int getIndex() { - return index; - } - - public boolean isRetired() { - return retired; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Membership that = (Membership) o; - - if (index != that.index) return false; - if (retired != that.retired) return false; - if (!clusterType.equals(that.clusterType)) return false; - if (!clusterId.equals(that.clusterId)) return false; - return group.equals(that.group); - - } - - @Override - public int hashCode() { - int result = clusterType.hashCode(); - result = 31 * result + clusterId.hashCode(); - result = 31 * result + group.hashCode(); - result = 31 * result + index; - result = 31 * result + (retired ? 1 : 0); - return result; - } - - @Override - public String toString() { - return "Membership {" + - " clusterType = " + clusterType + - " clusterId = " + clusterId + - " group = " + group + - " index = " + index + - " retired = " + retired + - " }"; - } - } - public static class Builder { private String hostname; private Optional<DockerImage> wantedDockerImage = Optional.empty(); private Optional<DockerImage> currentDockerImage = Optional.empty(); - private Node.State state; + private NodeState state; private NodeType nodeType; private String flavor; private String canonicalFlavor; @@ -501,8 +370,8 @@ public class NodeSpec { private Optional<String> currentOsVersion = Optional.empty(); private Optional<Boolean> allowedToBeDown = Optional.empty(); private Optional<Boolean> wantToDeprovision = Optional.empty(); - private Optional<Owner> owner = Optional.empty(); - private Optional<Membership> membership = Optional.empty(); + private Optional<NodeOwner> owner = Optional.empty(); + private Optional<NodeMembership> membership = Optional.empty(); private Optional<Long> wantedRestartGeneration = Optional.empty(); private Optional<Long> currentRestartGeneration = Optional.empty(); private long wantedRebootGeneration; @@ -572,7 +441,7 @@ public class NodeSpec { return this; } - public Builder state(Node.State state) { + public Builder state(NodeState state) { this.state = state; return this; } @@ -622,12 +491,12 @@ public class NodeSpec { return this; } - public Builder owner(Owner owner) { + public Builder owner(NodeOwner owner) { this.owner = Optional.of(owner); return this; } - public Builder membership(Membership membership) { + public Builder membership(NodeMembership membership) { this.membership = Optional.of(membership); return this; } @@ -747,7 +616,7 @@ public class NodeSpec { return currentDockerImage; } - public Node.State getState() { + public NodeState getState() { return state; } @@ -787,11 +656,11 @@ public class NodeSpec { return wantToDeprovision; } - public Optional<Owner> getOwner() { + public Optional<NodeOwner> getOwner() { return owner; } - public Optional<Membership> getMembership() { + public Optional<NodeMembership> getMembership() { return membership; } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeState.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeState.java new file mode 100644 index 00000000000..e1765efef31 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeState.java @@ -0,0 +1,13 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; + +/** + * All the states a node can be in the node-repository. + * + * See com.yahoo.vespa.hosted.provision.NodeState + * + * @author freva + */ +public enum NodeState { + provisioned, ready, reserved, active, inactive, dirty, failed, parked +} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java index 8e63024842d..586dec3399c 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Strings; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.DockerImage; @@ -13,7 +12,6 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.bindings.Ge import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.bindings.NodeMessageResponse; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.bindings.NodeRepositoryNode; import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; -import com.yahoo.vespa.hosted.provision.Node; import java.time.Instant; import java.util.Collections; @@ -32,7 +30,6 @@ import java.util.stream.Stream; */ public class RealNodeRepository implements NodeRepository { private static final PrefixLogger NODE_ADMIN_LOGGER = PrefixLogger.getNodeAdminLogger(RealNodeRepository.class); - private static final ObjectMapper mapper = new ObjectMapper(); private final ConfigServerApi configServerApi; @@ -133,7 +130,7 @@ public class RealNodeRepository implements NodeRepository { } @Override - public void setNodeState(String hostName, Node.State nodeState) { + public void setNodeState(String hostName, NodeState nodeState) { String state = nodeState.name(); NodeMessageResponse response = configServerApi.put( "/nodes/v2/state/" + state + "/" + hostName, @@ -145,25 +142,13 @@ public class RealNodeRepository implements NodeRepository { throw new NodeRepositoryException("Unexpected message " + response.message + " " + response.errorCode); } - @Override - public void scheduleReboot(String hostName) { - NodeMessageResponse response = configServerApi.post( - "/nodes/v2/command/reboot?hostname=" + hostName, - Optional.empty(), /* body */ - NodeMessageResponse.class); - NODE_ADMIN_LOGGER.info(response.message); - - if (Strings.isNullOrEmpty(response.errorCode)) return; - throw new NodeRepositoryException("Unexpected message " + response.message + " " + response.errorCode); - } - private static NodeSpec createNodeSpec(NodeRepositoryNode node) { Objects.requireNonNull(node.type, "Unknown node type"); NodeType nodeType = NodeType.valueOf(node.type); Objects.requireNonNull(node.state, "Unknown node state"); - Node.State nodeState = Node.State.valueOf(node.state); - if (nodeState == Node.State.active) { + NodeState nodeState = NodeState.valueOf(node.state); + if (nodeState == NodeState.active) { Objects.requireNonNull(node.wantedVespaVersion, "Unknown vespa version for active node"); Objects.requireNonNull(node.wantedDockerImage, "Unknown docker image for active node"); Objects.requireNonNull(node.restartGeneration, "Unknown restartGeneration for active node"); @@ -172,14 +157,14 @@ public class RealNodeRepository implements NodeRepository { String hostName = Objects.requireNonNull(node.hostname, "hostname is null"); - NodeSpec.Owner owner = null; + NodeOwner owner = null; if (node.owner != null) { - owner = new NodeSpec.Owner(node.owner.tenant, node.owner.application, node.owner.instance); + owner = new NodeOwner(node.owner.tenant, node.owner.application, node.owner.instance); } - NodeSpec.Membership membership = null; + NodeMembership membership = null; if (node.membership != null) { - membership = new NodeSpec.Membership(node.membership.clusterType, node.membership.clusterId, + membership = new NodeMembership(node.membership.clusterType, node.membership.clusterId, node.membership.group, node.membership.index, node.membership.retired); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java index eb306036416..41c4544c533 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java @@ -5,12 +5,12 @@ import com.yahoo.concurrent.ThreadFactoryFactory; import com.yahoo.config.provision.HostName; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextFactory; -import com.yahoo.vespa.hosted.provision.Node; import java.time.Clock; import java.time.Duration; @@ -125,7 +125,7 @@ public class NodeAdminStateUpdater { throw new ConvergenceException("NodeAdmin is not yet " + (wantFrozen ? "frozen" : "unfrozen")); } - boolean hostIsActiveInNR = nodeRepository.getNode(hostHostname).getState() == Node.State.active; + boolean hostIsActiveInNR = nodeRepository.getNode(hostHostname).getState() == NodeState.active; switch (wantedState) { case RESUMED: if (hostIsActiveInNR) orchestrator.resume(hostHostname); @@ -183,7 +183,7 @@ public class NodeAdminStateUpdater { private List<String> getNodesInActiveState() { return nodeRepository.getNodes(hostHostname) .stream() - .filter(node -> node.getState() == Node.State.active) + .filter(node -> node.getState() == NodeState.active) .map(NodeSpec::getHostname) .collect(Collectors.toList()); } 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 804450f05ff..9ca19a76706 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 @@ -9,8 +9,8 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.component.ZoneId; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.docker.DockerNetworking; -import com.yahoo.vespa.hosted.provision.Node; import java.nio.file.FileSystem; import java.nio.file.Path; @@ -177,7 +177,7 @@ public class NodeAgentContextImpl implements NodeAgentContext { public Builder(String hostname) { this.nodeSpecBuilder .hostname(hostname) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("d-2-8-50"); } 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 d31a888ea44..2cbe6e7722b 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 @@ -11,26 +11,27 @@ import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.hosted.dockerapi.Container; import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.ContainerStats; +import com.yahoo.vespa.hosted.dockerapi.DockerImage; +import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException; import com.yahoo.vespa.hosted.dockerapi.exception.DockerException; import com.yahoo.vespa.hosted.dockerapi.exception.DockerExecTimeoutException; -import com.yahoo.vespa.hosted.dockerapi.DockerImage; -import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.dockerapi.metrics.DimensionMetrics; import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeOwner; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; +import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.OrchestratorException; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; -import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer; import com.yahoo.vespa.hosted.node.admin.maintenance.identity.AthenzCredentialsMaintainer; import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException; import com.yahoo.vespa.hosted.node.admin.util.SecretAgentCheckConfig; -import com.yahoo.vespa.hosted.provision.Node; import java.util.ArrayList; import java.util.List; @@ -269,7 +270,7 @@ public class NodeAgentImpl implements NodeAgent { } private void restartServices(NodeAgentContext context, Container existingContainer) { - if (existingContainer.state.isRunning() && context.node().getState() == Node.State.active) { + if (existingContainer.state.isRunning() && context.node().getState() == NodeState.active) { context.log(logger, "Restarting services"); // Since we are restarting the services we need to suspend the node. orchestratorSuspendNode(context); @@ -308,8 +309,8 @@ public class NodeAgentImpl implements NodeAgent { } private Optional<String> shouldRemoveContainer(NodeSpec node, Container existingContainer) { - final Node.State nodeState = node.getState(); - if (nodeState == Node.State.dirty || nodeState == Node.State.provisioned) { + final NodeState nodeState = node.getState(); + if (nodeState == NodeState.dirty || nodeState == NodeState.provisioned) { return Optional.of("Node in state " + nodeState + ", container should no longer be running"); } if (node.getWantedDockerImage().isPresent() && !node.getWantedDockerImage().get().equals(existingContainer.image)) { @@ -347,7 +348,7 @@ public class NodeAgentImpl implements NodeAgent { orchestratorSuspendNode(context); try { - if (context.node().getState() != Node.State.dirty) { + if (context.node().getState() != NodeState.dirty) { suspend(); } stopServices(); @@ -379,7 +380,7 @@ public class NodeAgentImpl implements NodeAgent { private ContainerResources getContainerResources(NodeSpec node) { double cpuCap = node.getOwner() - .map(NodeSpec.Owner::asApplicationId) + .map(NodeOwner::asApplicationId) .map(appId -> containerCpuCap.with(FetchVector.Dimension.APPLICATION_ID, appId.serializedForm())) .orElse(containerCpuCap) .value() * node.getMinCpuCores(); @@ -496,7 +497,7 @@ public class NodeAgentImpl implements NodeAgent { updateNodeRepoWithCurrentAttributes(context); break; case provisioned: - nodeRepository.setNodeState(context.hostname().value(), Node.State.dirty); + nodeRepository.setNodeState(context.hostname().value(), NodeState.dirty); break; case dirty: removeContainerIfNeededUpdateContainerState(context, container); @@ -504,7 +505,7 @@ public class NodeAgentImpl implements NodeAgent { athenzCredentialsMaintainer.ifPresent(maintainer -> maintainer.clearCredentials(context)); storageMaintainer.archiveNodeStorage(context); updateNodeRepoWithCurrentAttributes(context); - nodeRepository.setNodeState(context.hostname().value(), Node.State.ready); + nodeRepository.setNodeState(context.hostname().value(), NodeState.ready); break; default: throw new RuntimeException("UNKNOWN STATE " + node.getState().name()); @@ -696,7 +697,7 @@ public class NodeAgentImpl implements NodeAgent { // to allow the node admin to make decisions that depend on the docker image. Or, each docker image // needs to contain routines for drain and suspend. For many images, these can just be dummy routines. private void orchestratorSuspendNode(NodeAgentContext context) { - if (context.node().getState() != Node.State.active) return; + if (context.node().getState() != NodeState.active) return; context.log(logger, "Ask Orchestrator for permission to suspend node"); orchestrator.suspend(context.hostname().value()); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileFinder.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileFinder.java index c92027a659b..b5c6b6ab91d 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileFinder.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileFinder.java @@ -115,7 +115,7 @@ public class FileFinder { try { // Only need to traverse as deep as we want to match, unless we want to match everything in directories // already matched - Files.walkFileTree(basePath, Collections.emptySet(), maxDepth, new SimpleFileVisitor<Path>() { + Files.walkFileTree(basePath, Collections.emptySet(), maxDepth, new SimpleFileVisitor<>() { private final Stack<FileAttributes> matchingDirectoryStack = new Stack<>(); private int currentLevel = -1; diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java index 33498575e8a..de80d4dca18 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java @@ -18,7 +18,7 @@ public enum IPVersion { IPv6(6, "ip6tables", "ip -6", "ipv6-icmp", "/128", "icmp6-port-unreachable", "ip6tables-restore"), IPv4(4, "iptables", "ip", "icmp", "/32", "icmp-port-unreachable", "iptables-restore"); - private static Pattern cidrNotationPattern = Pattern.compile("/\\d+$"); + private static final Pattern cidrNotationPattern = Pattern.compile("/\\d+$"); IPVersion(int version, String iptablesCmd, String ipCmd, String icmpProtocol, String singleHostCidr, String icmpPortUnreachable, diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeStateTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeStateTest.java new file mode 100644 index 00000000000..4a71d3bdbe8 --- /dev/null +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeStateTest.java @@ -0,0 +1,25 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; + +import com.yahoo.vespa.hosted.provision.Node; +import org.junit.Test; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; + +/** + * @author freva + */ +public class NodeStateTest { + + @Test + public void is_equal_to_node_repository_states() { + Set<String> nodeRepositoryStates = Stream.of(Node.State.values()).map(Enum::name).collect(Collectors.toSet()); + Set<String> nodeAdminStates = Stream.of(NodeState.values()).map(Enum::name).collect(Collectors.toSet()); + + assertEquals(nodeAdminStates, nodeRepositoryStates); + } +}
\ No newline at end of file diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java index ac13775d6fa..c2b4c1e0387 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java @@ -8,7 +8,6 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApi; import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApiImpl; -import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.testutils.ContainerConfig; import org.junit.After; import org.junit.Before; @@ -107,7 +106,7 @@ public class RealNodeRepositoryTest { final NodeSpec node = containersToRun.get(0); assertThat(node.getHostname(), is("host4.yahoo.com")); assertThat(node.getWantedDockerImage().get(), is(new DockerImage("docker-registry.domain.tld:8080/dist/vespa:6.42.0"))); - assertThat(node.getState(), is(Node.State.active)); + assertThat(node.getState(), is(NodeState.active)); assertThat(node.getWantedRestartGeneration().get(), is(0L)); assertThat(node.getCurrentRestartGeneration().get(), is(0L)); assertThat(node.getMinCpuCores(), is(0.2)); @@ -152,18 +151,18 @@ public class RealNodeRepositoryTest { @Test public void testMarkAsReady() { - nodeRepositoryApi.setNodeState("host5.yahoo.com", Node.State.dirty); - nodeRepositoryApi.setNodeState("host5.yahoo.com", Node.State.ready); + nodeRepositoryApi.setNodeState("host5.yahoo.com", NodeState.dirty); + nodeRepositoryApi.setNodeState("host5.yahoo.com", NodeState.ready); try { - nodeRepositoryApi.setNodeState("host4.yahoo.com", Node.State.ready); + nodeRepositoryApi.setNodeState("host4.yahoo.com", NodeState.ready); fail("Should not be allowed to be marked ready as it is not registered as provisioned, dirty, failed or parked"); } catch (RuntimeException ignored) { // expected } try { - nodeRepositoryApi.setNodeState("host101.yahoo.com", Node.State.ready); + nodeRepositoryApi.setNodeState("host101.yahoo.com", NodeState.ready); fail("Expected failure because host101 does not exist"); } catch (RuntimeException ignored) { // expected @@ -191,12 +190,4 @@ public class RealNodeRepositoryTest { assertTrue(nodeRepositoryApi.getOptionalNode("host123-1.domain.tld").isPresent()); } - - @Test - public void testRebootScheduling() { - NodeSpec nodeSpec = nodeRepositoryApi.getNode("host5.yahoo.com"); - nodeRepositoryApi.scheduleReboot(nodeSpec.getHostname()); - NodeSpec newNodeSpec = nodeRepositoryApi.getNode(nodeSpec.getHostname()); - assertEquals(nodeSpec.getWantedRebootGeneration() + 1, newNodeSpec.getWantedRebootGeneration()); - } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNodeTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNodeTest.java index e1e7ea240b0..bf86da612b1 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNodeTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNodeTest.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertEquals; */ public class NodeRepositoryNodeTest { private static final ObjectMapper mapper = new ObjectMapper(); - private NodeRepositoryNode node = new NodeRepositoryNode(); - private NodeAttributes attributes = new NodeAttributes(); + private final NodeRepositoryNode node = new NodeRepositoryNode(); + private final NodeAttributes attributes = new NodeAttributes(); /** diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java index c7bc8f16477..ae22a54faa9 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java @@ -5,7 +5,7 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; -import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import org.junit.Test; import static org.mockito.ArgumentMatchers.any; @@ -28,7 +28,7 @@ public class DockerFailTest { .hostname(hostname) .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("docker") .wantedRestartGeneration(1L) diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java index 6ae373e8b55..32e6aadaba3 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java @@ -10,6 +10,7 @@ import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; @@ -21,7 +22,6 @@ import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentFactory; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddressesMock; -import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.test.file.TestFileSystem; import org.mockito.InOrder; import org.mockito.Mockito; @@ -81,7 +81,7 @@ public class DockerTester implements AutoCloseable { NodeSpec hostSpec = new NodeSpec.Builder() .hostname(HOST_HOSTNAME.value()) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.host) .flavor("default") .wantedRestartGeneration(1L) diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java index 16c9239dcd7..9cb89ae95ce 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java @@ -6,7 +6,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; -import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import org.junit.Test; import static org.mockito.ArgumentMatchers.any; @@ -27,7 +27,7 @@ public class MultiDockerTest { tester.addChildNodeRepositoryNode( new NodeSpec.Builder(nodeSpec2) - .state(Node.State.dirty) + .state(NodeState.dirty) .minCpuCores(1) .minMainMemoryAvailableGb(1) .minDiskAvailableGb(1) @@ -36,7 +36,7 @@ public class MultiDockerTest { tester.inOrder(tester.docker).deleteContainer(eq(new ContainerName("host2"))); tester.inOrder(tester.storageMaintainer).archiveNodeStorage( argThat(context -> context.containerName().equals(new ContainerName("host2")))); - tester.inOrder(tester.nodeRepository).setNodeState(eq(nodeSpec2.getHostname()), eq(Node.State.ready)); + tester.inOrder(tester.nodeRepository).setNodeState(eq(nodeSpec2.getHostname()), eq(NodeState.ready)); addAndWaitForNode(tester, "host3.test.yahoo.com", new DockerImage("image1")); } @@ -46,7 +46,7 @@ public class MultiDockerTest { NodeSpec nodeSpec = new NodeSpec.Builder() .hostname(hostName) .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("docker") .wantedRestartGeneration(1L) diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java index 5748d4034eb..ebf9d72ff1b 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java @@ -6,7 +6,7 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.AddNode; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; -import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import java.util.Collections; import java.util.HashMap; @@ -59,7 +59,7 @@ public class NodeRepoMock implements NodeRepository { } @Override - public void setNodeState(String hostName, Node.State nodeState) { + public void setNodeState(String hostName, NodeState nodeState) { synchronized (monitor) { updateNodeRepositoryNode(new NodeSpec.Builder(getNode(hostName)) .state(nodeState) @@ -67,11 +67,6 @@ public class NodeRepoMock implements NodeRepository { } } - @Override - public void scheduleReboot(String hostname) { - - } - void updateNodeRepositoryNode(NodeSpec nodeSpec) { synchronized (monitor) { nodeRepositoryNodesByHostname.put(nodeSpec.getHostname(), nodeSpec); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java index 295368e0426..a1610ae4da3 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java @@ -3,11 +3,10 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.dockerapi.ContainerName; -import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater; -import com.yahoo.vespa.hosted.provision.Node; import org.junit.Test; import java.util.Arrays; @@ -51,7 +50,7 @@ public class RebootTest { return new NodeSpec.Builder() .hostname(hostname) .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("docker") .vespaVersion("6.50.0") diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java index f9f455cca79..ff2f15efd0b 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java @@ -6,7 +6,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; -import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import org.junit.Test; import static com.yahoo.vespa.hosted.node.admin.integrationTests.DockerTester.NODE_PROGRAM; @@ -28,7 +28,7 @@ public class RestartTest { tester.addChildNodeRepositoryNode(new NodeSpec.Builder() .hostname(hostname) - .state(Node.State.active) + .state(NodeState.active) .wantedDockerImage(dockerImage) .nodeType(NodeType.tenant) .flavor("docker") diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java index 4c753e5a95d..85562a92af9 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java @@ -7,14 +7,16 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.node.admin.component.ZoneId; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeMembership; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeOwner; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl; import com.yahoo.vespa.hosted.node.admin.task.util.file.FileFinder; import com.yahoo.vespa.hosted.node.admin.task.util.file.UnixPath; import com.yahoo.vespa.hosted.node.admin.task.util.process.TestTerminal; -import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.test.file.TestFileSystem; import org.junit.After; import org.junit.Test; @@ -155,10 +157,10 @@ public class StorageMaintainerTest { NodeSpec nodeSpec = new NodeSpec.Builder() .hostname("host123-5.test.domain.tld") .nodeType(nodeType) - .state(Node.State.active) + .state(NodeState.active) .parentHostname("host123.test.domain.tld") - .owner(new NodeSpec.Owner("tenant", "application", "instance")) - .membership(new NodeSpec.Membership("clusterType", "clusterId", null, 0, false)) + .owner(new NodeOwner("tenant", "application", "instance")) + .membership(new NodeMembership("clusterType", "clusterId", null, 0, false)) .vespaVersion("6.305.12") .flavor("d-2-8-50") .canonicalFlavor("d-2-8-50") diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java index 2f835a535ff..3fcb08e6680 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java @@ -6,10 +6,10 @@ import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.test.ManualClock; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextFactory; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl; -import com.yahoo.vespa.hosted.provision.Node; import org.junit.Test; import org.mockito.InOrder; @@ -19,6 +19,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl.NodeAgentWithScheduler; +import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl.NodeAgentWithSchedulerFactory; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -32,9 +34,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl.NodeAgentWithScheduler; -import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl.NodeAgentWithSchedulerFactory; - /** * @author bakksjo */ @@ -163,7 +162,7 @@ public class NodeAdminImplTest { private NodeAgentContext createNodeAgentContext(String hostname) { NodeSpec nodeSpec = new NodeSpec.Builder() .hostname(hostname) - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("default") .build(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java index 2387c279672..b8894bbf814 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java @@ -5,11 +5,11 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; import com.yahoo.test.ManualClock; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextFactory; -import com.yahoo.vespa.hosted.provision.Node; import org.junit.Test; import java.time.Duration; @@ -57,7 +57,7 @@ public class NodeAdminStateUpdaterTest { @Test public void state_convergence() { - mockNodeRepo(Node.State.active, 4); + mockNodeRepo(NodeState.active, 4); List<String> activeHostnames = nodeRepository.getNodes(hostHostname.value()).stream() .map(NodeSpec::getHostname) .collect(Collectors.toList()); @@ -115,7 +115,7 @@ public class NodeAdminStateUpdaterTest { @Test public void half_transition_revert() { final String exceptionMsg = "Cannot allow to suspend because some reason"; - mockNodeRepo(Node.State.active, 3); + mockNodeRepo(NodeState.active, 3); // Initially everything is frozen to force convergence when(nodeAdmin.setFrozen(eq(false))).thenReturn(true); @@ -158,7 +158,7 @@ public class NodeAdminStateUpdaterTest { public void do_not_orchestrate_host_when_not_active() { when(nodeAdmin.subsystemFreezeDuration()).thenReturn(Duration.ofHours(1)); when(nodeAdmin.setFrozen(anyBoolean())).thenReturn(true); - mockNodeRepo(Node.State.ready, 3); + mockNodeRepo(NodeState.ready, 3); // Resume and suspend only require that node-agents are frozen and permission from // orchestrator to resume/suspend host. Therefore, if host is not active, we only need to freeze. @@ -178,7 +178,7 @@ public class NodeAdminStateUpdaterTest { @Test public void uses_cached_acl() { - mockNodeRepo(Node.State.active, 1); + mockNodeRepo(NodeState.active, 1); mockAcl(Acl.EMPTY, 1); updater.adjustNodeAgentsToRunFromNodeRepository(); @@ -199,7 +199,7 @@ public class NodeAdminStateUpdaterTest { @Test public void node_spec_and_acl_aligned() { Acl acl = new Acl.Builder().withTrustedPorts(22).build(); - mockNodeRepo(Node.State.active, 3); + mockNodeRepo(NodeState.active, 3); mockAcl(acl, 1, 2, 3); updater.adjustNodeAgentsToRunFromNodeRepository(); @@ -216,11 +216,11 @@ public class NodeAdminStateUpdaterTest { @Test public void node_spec_and_acl_mismatch_missing_one_acl() { Acl acl = new Acl.Builder().withTrustedPorts(22).build(); - mockNodeRepo(Node.State.active, 3); + mockNodeRepo(NodeState.active, 3); mockAcl(acl, 1, 2); // Acl for 3 is missing updater.adjustNodeAgentsToRunFromNodeRepository(); - mockNodeRepo(Node.State.active, 2); // Next tick, the spec for 3 is no longer returned + mockNodeRepo(NodeState.active, 2); // Next tick, the spec for 3 is no longer returned updater.adjustNodeAgentsToRunFromNodeRepository(); updater.adjustNodeAgentsToRunFromNodeRepository(); @@ -234,7 +234,7 @@ public class NodeAdminStateUpdaterTest { @Test public void node_spec_and_acl_mismatch_additional_acl() { Acl acl = new Acl.Builder().withTrustedPorts(22).build(); - mockNodeRepo(Node.State.active, 2); + mockNodeRepo(NodeState.active, 2); mockAcl(acl, 1, 2, 3); // Acl for 3 is extra updater.adjustNodeAgentsToRunFromNodeRepository(); @@ -256,11 +256,11 @@ public class NodeAdminStateUpdaterTest { } } - private void mockNodeRepo(Node.State hostState, int numberOfNodes) { + private void mockNodeRepo(NodeState hostState, int numberOfNodes) { List<NodeSpec> containersToRun = IntStream.range(1, numberOfNodes + 1) .mapToObj(i -> new NodeSpec.Builder() .hostname("host" + i + ".yahoo.com") - .state(Node.State.active) + .state(NodeState.active) .nodeType(NodeType.tenant) .flavor("docker") .minCpuCores(1) diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java index 35494b375f6..3130500c940 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java @@ -10,20 +10,22 @@ import com.yahoo.vespa.hosted.dockerapi.Container; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.ContainerStats; -import com.yahoo.vespa.hosted.dockerapi.exception.DockerException; import com.yahoo.vespa.hosted.dockerapi.DockerImage; +import com.yahoo.vespa.hosted.dockerapi.exception.DockerException; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeMembership; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeOwner; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; +import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.OrchestratorException; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer; -import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; -import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.maintenance.identity.AthenzCredentialsMaintainer; import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException; -import com.yahoo.vespa.hosted.provision.Node; import org.junit.Test; import org.mockito.InOrder; @@ -90,7 +92,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -119,7 +121,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -140,7 +142,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -176,7 +178,7 @@ public class NodeAgentImplTest { final Optional<Long> restartGeneration = Optional.of(1L); final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .wantedRestartGeneration(restartGeneration.get()) .currentRestartGeneration(restartGeneration.get()) @@ -213,7 +215,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(newDockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -240,7 +242,7 @@ public class NodeAgentImplTest { NodeSpec.Builder specBuilder = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion); @@ -287,7 +289,7 @@ public class NodeAgentImplTest { NodeSpec.Builder specBuilder = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion); @@ -324,7 +326,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRestartGeneration(wantedRestartGeneration) @@ -353,7 +355,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRebootGeneration(wantedRebootGeneration) @@ -396,7 +398,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.failed) + .state(NodeState.failed) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -416,7 +418,7 @@ public class NodeAgentImplTest { @Test public void readyNodeLeadsToNoAction() { final NodeSpec node = nodeBuilder - .state(Node.State.ready) + .state(NodeState.ready) .build(); NodeAgentContext context = createContext(node); @@ -442,7 +444,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.inactive) + .state(NodeState.inactive) .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .build(); @@ -465,7 +467,7 @@ public class NodeAgentImplTest { public void reservedNodeDoesNotUpdateNodeRepoWithVersion() { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) - .state(Node.State.reserved) + .state(NodeState.reserved) .wantedVespaVersion(vespaVersion) .build(); @@ -479,7 +481,7 @@ public class NodeAgentImplTest { verify(nodeRepository, never()).updateNodeAttributes(eq(hostName), any()); } - private void nodeRunningContainerIsTakenDownAndCleanedAndRecycled(Node.State nodeState, Optional<Long> wantedRestartGeneration) { + private void nodeRunningContainerIsTakenDownAndCleanedAndRecycled(NodeState nodeState, Optional<Long> wantedRestartGeneration) { wantedRestartGeneration.ifPresent(restartGeneration -> nodeBuilder .wantedRestartGeneration(restartGeneration) .currentRestartGeneration(restartGeneration)); @@ -502,7 +504,7 @@ public class NodeAgentImplTest { inOrder.verify(storageMaintainer, times(1)).handleCoreDumpsForContainer(eq(context), any()); inOrder.verify(dockerOperations, times(1)).removeContainer(eq(context), any()); inOrder.verify(storageMaintainer, times(1)).archiveNodeStorage(eq(context)); - inOrder.verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(Node.State.ready)); + inOrder.verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(NodeState.ready)); verify(dockerOperations, never()).createContainer(eq(context), any()); verify(dockerOperations, never()).startContainer(eq(context)); @@ -517,19 +519,19 @@ public class NodeAgentImplTest { @Test public void dirtyNodeRunningContainerIsTakenDownAndCleanedAndRecycled() { - nodeRunningContainerIsTakenDownAndCleanedAndRecycled(Node.State.dirty, Optional.of(1L)); + nodeRunningContainerIsTakenDownAndCleanedAndRecycled(NodeState.dirty, Optional.of(1L)); } @Test public void dirtyNodeRunningContainerIsTakenDownAndCleanedAndRecycledNoRestartGeneration() { - nodeRunningContainerIsTakenDownAndCleanedAndRecycled(Node.State.dirty, Optional.empty()); + nodeRunningContainerIsTakenDownAndCleanedAndRecycled(NodeState.dirty, Optional.empty()); } @Test public void provisionedNodeIsMarkedAsDirty() { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) - .state(Node.State.provisioned) + .state(NodeState.provisioned) .build(); NodeAgentContext context = createContext(node); @@ -537,7 +539,7 @@ public class NodeAgentImplTest { when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(Node.State.dirty)); + verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(NodeState.dirty)); } @Test @@ -545,7 +547,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .currentDockerImage(dockerImage) .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .vespaVersion(vespaVersion) .build(); @@ -567,7 +569,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .vespaVersion(vespaVersion) .build(); @@ -603,7 +605,7 @@ public class NodeAgentImplTest { public void start_container_subtask_failure_leads_to_container_restart() { final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .build(); @@ -651,12 +653,12 @@ public class NodeAgentImplTest { ContainerStats stats1 = new ContainerStats(networks, precpu_stats, memory_stats, blkio_stats); ContainerStats stats2 = new ContainerStats(networks, cpu_stats, memory_stats, blkio_stats); - NodeSpec.Owner owner = new NodeSpec.Owner("tester", "testapp", "testinstance"); - NodeSpec.Membership membership = new NodeSpec.Membership("clustType", "clustId", "grp", 3, false); + NodeOwner owner = new NodeOwner("tester", "testapp", "testinstance"); + NodeMembership membership = new NodeMembership("clustType", "clustId", "grp", 3, false); final NodeSpec node = nodeBuilder .wantedDockerImage(dockerImage) .currentDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .vespaVersion(vespaVersion) .owner(owner) .membership(membership) @@ -703,7 +705,7 @@ public class NodeAgentImplTest { @Test public void testGetRelevantMetricsForReadyNode() { final NodeSpec node = nodeBuilder - .state(Node.State.ready) + .state(NodeState.ready) .build(); NodeAgentContext context = createContext(node); @@ -722,7 +724,7 @@ public class NodeAgentImplTest { final NodeSpec node = nodeBuilder .nodeType(NodeType.config) .wantedDockerImage(dockerImage) - .state(Node.State.active) + .state(NodeState.active) .wantedVespaVersion(vespaVersion) .build(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileDeleterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileDeleterTest.java index 09f7d6117f9..29b012c1397 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileDeleterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/FileDeleterTest.java @@ -4,7 +4,6 @@ import com.yahoo.vespa.hosted.node.admin.component.TaskContext; import com.yahoo.vespa.test.file.TestFileSystem; import org.junit.Test; -import java.io.IOException; import java.nio.file.FileSystem; import static org.junit.Assert.assertFalse; diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/CommandLineTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/CommandLineTest.java index 1531b06070e..7bdf9a44ec7 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/CommandLineTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/CommandLineTest.java @@ -2,16 +2,10 @@ package com.yahoo.vespa.hosted.node.admin.task.util.process; import com.yahoo.vespa.hosted.node.admin.component.TestTaskContext; -import com.yahoo.vespa.hosted.node.admin.task.util.time.TestTimer; -import com.yahoo.vespa.test.file.TestFileSystem; import org.junit.After; import org.junit.Test; -import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.FileSystem; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.Arrays; import java.util.List; import java.util.Optional; diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/ProcessFactoryImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/ProcessFactoryImplTest.java index 88d26103777..333cb81f9d4 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/ProcessFactoryImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/process/ProcessFactoryImplTest.java @@ -1,14 +1,11 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.task.util.process; -import com.yahoo.vespa.hosted.node.admin.task.util.file.FileAttributes; import com.yahoo.vespa.hosted.node.admin.task.util.file.UnixPath; import com.yahoo.vespa.hosted.node.admin.task.util.time.TestTimer; import org.junit.Test; import org.mockito.ArgumentCaptor; -import java.io.IOException; -import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; |