summaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2020-06-01 19:45:51 +0200
committerValerij Fredriksen <valerij92@gmail.com>2020-06-01 19:45:51 +0200
commitf3502c34efdfb318556ebf688c2bd86d8b71b602 (patch)
tree7f72ccf32dacbb0beda6a9017ca22d01f0fa93bf /node-repository/src/main/java
parent42508c8fd230926f345f0561a4384210b17d4695 (diff)
Exclude deprovisioned nodes by default
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java5
3 files changed, 16 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
index 5778800d02c..a2590e8c727 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
@@ -1,11 +1,10 @@
// 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.provision.node.filter;
-import com.google.common.collect.ImmutableSet;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.hosted.provision.Node;
-import java.util.Collections;
+import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -23,22 +22,27 @@ public class StateFilter extends NodeFilter {
private StateFilter(Set<Node.State> states, NodeFilter next) {
super(next);
Objects.requireNonNull(states, "state cannot be null, use an empty set");
- this.states = ImmutableSet.copyOf(states);
+ this.states = EnumSet.copyOf(states);
}
@Override
public boolean matches(Node node) {
- if ( ! states.isEmpty() && ! states.contains(node.state())) return false;
+ if ( ! states.contains(node.state())) return false;
return nextMatches(node);
}
/** Returns a copy of the given filter which only matches for the given state */
public static StateFilter from(Node.State state, NodeFilter filter) {
- return new StateFilter(Collections.singleton(state), filter);
+ return new StateFilter(EnumSet.of(state), filter);
}
/** Returns a node filter which matches a comma or space-separated list of states */
- public static StateFilter from(String states, NodeFilter next) {
+ public static StateFilter from(String states, boolean includeDeprovisioned, NodeFilter next) {
+ if (states == null) {
+ return new StateFilter(includeDeprovisioned ?
+ EnumSet.allOf(Node.State.class) : EnumSet.complementOf(EnumSet.of(Node.State.deprovisioned)), next);
+ }
+
return new StateFilter(StringUtilities.split(states).stream().map(Node.State::valueOf).collect(Collectors.toSet()), next);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
index 3e6bc4e96e5..80136de6f03 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
@@ -322,7 +322,7 @@ public class NodesV2ApiHandler extends LoggingRequestHandler {
request.getProperty("clusterType"),
request.getProperty("clusterId")));
filter = ApplicationFilter.from(request.getProperty("application"), filter);
- filter = StateFilter.from(request.getProperty("state"), filter);
+ filter = StateFilter.from(request.getProperty("state"), request.getBooleanProperty("includeDeprovisioned"), filter);
filter = NodeTypeFilter.from(request.getProperty("type"), filter);
filter = ParentHostFilter.from(request.getProperty("parentHost"), filter);
filter = NodeOsVersionFilter.from(request.getProperty("osVersion"), filter);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 8e5cb9d088c..94b97d91312 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -130,6 +130,8 @@ public class MockNodeRepository extends NodeRepository {
flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
nodes.add(createNode("dockerhost5", "dockerhost5.yahoo.com", ipConfig(104, 1, 3), Optional.empty(),
flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
+ nodes.add(createNode("dockerhost6", "dockerhost6.yahoo.com", ipConfig(105, 1, 3), Optional.empty(),
+ flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
// Config servers
nodes.add(createNode("cfg1", "cfg1.yahoo.com", ipConfig(201), Optional.empty(),
@@ -147,6 +149,9 @@ public class MockNodeRepository extends NodeRepository {
fail(node5.hostname(), Agent.system, getClass().getSimpleName());
dirtyRecursively(node55.hostname(), Agent.system, getClass().getSimpleName());
+ fail("dockerhost6.yahoo.com", Agent.operator, getClass().getSimpleName());
+ removeRecursively("dockerhost6.yahoo.com");
+
ApplicationId zoneApp = ApplicationId.from(TenantName.from("zoneapp"), ApplicationName.from("zoneapp"), InstanceName.from("zoneapp"));
ClusterSpec zoneCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), null), zoneApp, provisioner);