diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-10-04 15:32:49 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-10-04 15:32:49 +0200 |
commit | 9c33b706aded3b8b67cca6a33c079cd26779ea50 (patch) | |
tree | f55cda6fd938ad4f11e1855c5d545001641985cb /node-repository | |
parent | c8e4e14bf3ff95e5274717f545cdd59c46d56613 (diff) |
Add node type filter
Diffstat (limited to 'node-repository')
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")) { |