summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-10-04 15:32:49 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-10-04 15:32:49 +0200
commit9c33b706aded3b8b67cca6a33c079cd26779ea50 (patch)
treef55cda6fd938ad4f11e1855c5d545001641985cb /node-repository
parentc8e4e14bf3ff95e5274717f545cdd59c46d56613 (diff)
Add node type filter
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java42
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java4
4 files changed, 49 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java
new file mode 100644
index 00000000000..65fd9dd9d4a
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java
@@ -0,0 +1,42 @@
+package com.yahoo.vespa.hosted.provision.node.filter;
+
+import com.google.common.collect.ImmutableSet;
+import com.yahoo.config.provision.HostFilter;
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.vespa.hosted.provision.Node;
+
+import java.util.Collections;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author bratseth
+ */
+public class NodeTypeFilter extends NodeFilter {
+
+ private final Set<NodeType> types;
+
+ protected NodeTypeFilter(Set<NodeType> types, NodeFilter next) {
+ super(next);
+ Objects.requireNonNull(types, "Node types cannot be null");
+ this.types = ImmutableSet.copyOf(types);
+ }
+
+ @Override
+ public boolean matches(Node node) {
+ if (! types.isEmpty() && ! types.contains(node.type())) return false;
+ return nextMatches(node);
+ }
+
+ /** Returns a copy of the given filter which only matches for the given type */
+ public static NodeTypeFilter from(NodeType type, NodeFilter filter) {
+ return new NodeTypeFilter(Collections.singleton(type), filter);
+ }
+
+ /** Returns a node filter which matches a comma or space-separated list of types */
+ public static NodeTypeFilter from(String types, NodeFilter next) {
+ return new NodeTypeFilter(HostFilter.split(types).stream().map(NodeType::valueOf).collect(Collectors.toSet()), next);
+ }
+
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
index be85fe18f57..edf0463835a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. 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.config.provision.HostFilter;
import com.yahoo.vespa.hosted.provision.Node;
@@ -21,7 +22,7 @@ public class ParentHostFilter extends NodeFilter {
private ParentHostFilter(Set<String> parentHostNames, NodeFilter next) {
super(next);
Objects.requireNonNull(parentHostNames, "parentHostNames cannot be null.");
- this.parentHostNames = parentHostNames;
+ this.parentHostNames = ImmutableSet.copyOf(parentHostNames);
}
@Override
@@ -36,4 +37,5 @@ public class ParentHostFilter extends NodeFilter {
public static ParentHostFilter from(String parentNames, NodeFilter filter) {
return new ParentHostFilter(HostFilter.split(parentNames).stream().collect(Collectors.toSet()), filter);
}
+
}
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 e7368e7770c..fa5972e59e1 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
@@ -29,7 +29,7 @@ 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 optional");
- this.states = states;
+ this.states = ImmutableSet.copyOf(states);
}
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
index 1cea59ef79b..69c6112efb2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
@@ -18,6 +18,7 @@ import com.yahoo.vespa.hosted.provision.node.NodeFlavors;
import com.yahoo.vespa.hosted.provision.node.filter.ApplicationFilter;
import com.yahoo.vespa.hosted.provision.node.filter.NodeFilter;
import com.yahoo.vespa.hosted.provision.node.filter.NodeHostFilter;
+import com.yahoo.vespa.hosted.provision.node.filter.NodeTypeFilter;
import com.yahoo.vespa.hosted.provision.node.filter.ParentHostFilter;
import com.yahoo.vespa.hosted.provision.node.filter.StateFilter;
import com.yahoo.vespa.hosted.provision.restapi.v2.NodesResponse.ResponseType;
@@ -234,6 +235,7 @@ public class NodesApiHandler extends LoggingRequestHandler {
request.getProperty("clusterId")));
filter = ApplicationFilter.from(request.getProperty("application"), filter);
filter = StateFilter.from(request.getProperty("state"), filter);
+ filter = NodeTypeFilter.from(request.getProperty("type"), filter);
filter = ParentHostFilter.from(request.getProperty("parentHost"), filter);
return filter;
}
@@ -247,7 +249,7 @@ public class NodesApiHandler extends LoggingRequestHandler {
}
private boolean isPatchOverride(HttpRequest request) {
- //Since Jersey's HttpUrlConnector does not support PATCH we support this by override this on POST requests.
+ // Since Jersey's HttpUrlConnector does not support PATCH we support this by override this on POST requests.
String override = request.getHeader("X-HTTP-Method-Override");
if (override != null) {
if (override.equals("PATCH")) {