diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2021-04-14 18:02:30 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2021-04-15 13:22:23 +0200 |
commit | 50fe282683d3e17daabd4a513f93fd3de1c303e2 (patch) | |
tree | 2e66564df9646df9c5679fbcb1eb62457672763c /node-repository | |
parent | 7dd25b911e859fe609928bb9794444d2749ce0ba (diff) |
Refactor node-repository filters
Diffstat (limited to 'node-repository')
14 files changed, 105 insertions, 201 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index b468c4a31d7..b9602ef0ad4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -16,7 +16,6 @@ import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeMutex; import com.yahoo.vespa.hosted.provision.maintenance.NodeFailer; -import com.yahoo.vespa.hosted.provision.node.filter.NodeFilter; import com.yahoo.vespa.hosted.provision.node.filter.StateFilter; import com.yahoo.vespa.hosted.provision.persistence.CuratorDatabaseClient; import com.yahoo.vespa.hosted.provision.restapi.NotFoundException; @@ -32,6 +31,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.BiFunction; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -581,8 +581,8 @@ public class Nodes { * * @return the nodes in their new state */ - public List<Node> restart(NodeFilter filter) { - return performOn(StateFilter.from(Node.State.active, filter), + public List<Node> restart(Predicate<Node> filter) { + return performOn(StateFilter.from(Node.State.active).and(filter), (node, lock) -> write(node.withRestart(node.allocation().get().restartGeneration().withIncreasedWanted()), lock)); } @@ -592,7 +592,7 @@ public class Nodes { * * @return the nodes in their new state */ - public List<Node> reboot(NodeFilter filter) { + public List<Node> reboot(Predicate<Node> filter) { return performOn(filter, (node, lock) -> write(node.withReboot(node.status().reboot().withIncreasedWanted()), lock)); } @@ -601,7 +601,7 @@ public class Nodes { * * @return the nodes in their new state */ - public List<Node> upgradeOs(NodeFilter filter, Optional<Version> version) { + public List<Node> upgradeOs(Predicate<Node> filter, Optional<Version> version) { return performOn(filter, (node, lock) -> { var newStatus = node.status().withOsVersion(node.status().osVersion().withWanted(version)); return write(node.with(newStatus), lock); @@ -609,7 +609,7 @@ public class Nodes { } /** Retire nodes matching given filter */ - public List<Node> retire(NodeFilter filter, Agent agent, Instant instant) { + public List<Node> retire(Predicate<Node> filter, Agent agent, Instant instant) { return performOn(filter, (node, lock) -> write(node.withWantToRetire(true, agent, instant), lock)); } @@ -662,7 +662,7 @@ public class Nodes { return db.writeTo(nodes, Agent.system, Optional.empty()); } - private List<Node> performOn(NodeFilter filter, BiFunction<Node, Mutex, Node> action) { + private List<Node> performOn(Predicate<Node> filter, BiFunction<Node, Mutex, Node> action) { return performOn(list().matching(filter), action); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ApplicationFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ApplicationFilter.java index aa285cd707d..d2226fa71b0 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ApplicationFilter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ApplicationFilter.java @@ -1,16 +1,13 @@ // 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.config.provision.ApplicationId; -import com.yahoo.config.provision.ApplicationName; -import com.yahoo.config.provision.InstanceName; -import com.yahoo.config.provision.TenantName; import com.yahoo.text.StringUtilities; import com.yahoo.vespa.hosted.provision.Node; import java.util.Objects; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -18,33 +15,29 @@ import java.util.stream.Collectors; * * @author bratseth */ -public class ApplicationFilter extends NodeFilter { +public class ApplicationFilter { - private final Set<ApplicationId> applications; + private ApplicationFilter() {} /** Creates a node filter which filters using the given host filter */ - private ApplicationFilter(Set<ApplicationId> applications, NodeFilter next) { - super(next); + private static Predicate<Node> makePredicate(Set<ApplicationId> applications) { Objects.requireNonNull(applications, "Applications set cannot be null, use an empty set"); - this.applications = applications; + if (applications.isEmpty()) return node -> true; + return node -> node.allocation().isPresent() && applications.contains(node.allocation().get().owner()); } - @Override - public boolean matches(Node node) { - if ( ! applications.isEmpty() && ! (node.allocation().isPresent() && applications.contains(node.allocation().get().owner()))) return false; - return nextMatches(node); + public static Predicate<Node> from(ApplicationId applicationId) { + return makePredicate(Set.of(applicationId)); } - public static ApplicationFilter from(ApplicationId applicationId, NodeFilter next) { - return new ApplicationFilter(ImmutableSet.of(applicationId), next); + public static Predicate<Node> from(Set<ApplicationId> applicationIds) { + return makePredicate(Set.copyOf(applicationIds)); } - public static ApplicationFilter from(Set<ApplicationId> applicationIds, NodeFilter next) { - return new ApplicationFilter(ImmutableSet.copyOf(applicationIds), next); - } - - public static ApplicationFilter from(String applicationIds, NodeFilter next) { - return new ApplicationFilter(StringUtilities.split(applicationIds).stream().map(ApplicationFilter::toApplicationId).collect(Collectors.toSet()), next); + public static Predicate<Node> from(String applicationIds) { + return makePredicate(StringUtilities.split(applicationIds).stream() + .map(ApplicationFilter::toApplicationId) + .collect(Collectors.toUnmodifiableSet())); } public static ApplicationId toApplicationId(String applicationIdString) { @@ -52,7 +45,7 @@ public class ApplicationFilter extends NodeFilter { if (parts.length != 3) throw new IllegalArgumentException("Application id must be on the form tenant.application.instance, got '" + applicationIdString + "'"); - return ApplicationId.from(TenantName.from(parts[0]), ApplicationName.from(parts[1]), InstanceName.from(parts[2])); + return ApplicationId.from(parts[0], parts[1], parts[2]); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java deleted file mode 100644 index 296b3ab798a..00000000000 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java +++ /dev/null @@ -1,36 +0,0 @@ -// 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.yahoo.vespa.hosted.provision.Node; - -import java.util.function.Predicate; - -/** - * A chainable node filter - * - * @author bratseth - */ -public abstract class NodeFilter implements Predicate<Node> { - - private final NodeFilter next; - - /** Creates a node filter with a chained filter, or null if this is the last filter */ - protected NodeFilter(NodeFilter next) { - this.next = next; - } - - /** Returns whether this node matches this filter */ - public abstract boolean matches(Node node); - - @Override - public final boolean test(Node node) { - return matches(node); - } - - /** Returns whether this is a match according to the chained filter */ - protected final boolean nextMatches(Node node) { - if (next == null) return true; - return next.matches(node); - } - -} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java index ed66d085972..8891720ec33 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java @@ -1,47 +1,29 @@ // 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.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.HostFilter; import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.provision.node.Allocation; import java.util.Objects; -import java.util.Optional; +import java.util.function.Predicate; /** * A node filter adaption of a host filter * * @author bratseth */ -public class NodeHostFilter extends NodeFilter { +public class NodeHostFilter { - private final HostFilter filter; + private NodeHostFilter() {} /** Creates a node filter which filters using the given host filter */ - private NodeHostFilter(HostFilter filter, NodeFilter next) { - super(next); - this.filter = Objects.requireNonNull(filter, "filter cannot be null, use HostFilter.all()"); - } - - @Override - public boolean matches(Node node) { - if ( ! filter.matches(node.hostname(), node.flavor().name(), membership(node))) return false; - return nextMatches(node); - } - - private Optional<ClusterMembership> membership(Node node) { - if (node.allocation().isPresent()) - return Optional.of(node.allocation().get().membership()); - else - return Optional.empty(); - } - - public static NodeHostFilter from(HostFilter hostFilter) { - return new NodeHostFilter(hostFilter, null); - } - - public static NodeHostFilter from(HostFilter hostFilter, NodeFilter next) { - return new NodeHostFilter(hostFilter, next); + public static Predicate<Node> from(HostFilter filter) { + Objects.requireNonNull(filter, "filter cannot be null, use HostFilter.all()"); + return node -> filter.matches( + node.hostname(), + node.flavor().name(), + node.allocation().map(Allocation::membership)); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java index 9bd9f6400d5..0e33eab6aba 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java @@ -1,43 +1,33 @@ // 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.vespa.hosted.provision.Node; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.function.Predicate; /** * A node filter which matches a particular list of nodes * * @author bratseth */ -public class NodeListFilter extends NodeFilter { +public class NodeListFilter { - private final Set<Node> nodes; + private NodeListFilter() {} - private NodeListFilter(List<Node> nodes, NodeFilter next) { - super(next); - this.nodes = ImmutableSet.copyOf(Objects.requireNonNull(nodes, "nodes cannot be null")); + private static Predicate<Node> makePredicate(List<Node> nodes) { + Objects.requireNonNull(nodes, "nodes cannot be null"); + Set<Node> nodesSet = Set.copyOf(nodes); + return nodesSet::contains; } - @Override - public boolean matches(Node node) { - return nodes.contains(node); + public static Predicate<Node> from(Node nodes) { + return makePredicate(List.of(nodes)); } - public static NodeListFilter from(Node nodes) { - return new NodeListFilter(Collections.singletonList(nodes), null); + public static Predicate<Node> from(List<Node> nodes) { + return makePredicate(nodes); } - - public static NodeListFilter from(List<Node> nodes) { - return new NodeListFilter(nodes, null); - } - - public static NodeListFilter from(List<Node> nodes, NodeFilter next) { - return new NodeListFilter(nodes, next); - } - } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeOsVersionFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeOsVersionFilter.java index e2718cf8b68..5c3040b12bd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeOsVersionFilter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeOsVersionFilter.java @@ -5,31 +5,25 @@ import com.yahoo.component.Version; import com.yahoo.vespa.hosted.provision.Node; import java.util.Objects; +import java.util.function.Predicate; /** * Filter nodes by their OS version. * * @author mpolden */ -public class NodeOsVersionFilter extends NodeFilter { +public class NodeOsVersionFilter { - private final Version version; + private NodeOsVersionFilter() {} - private NodeOsVersionFilter(Version version, NodeFilter next) { - super(next); - this.version = Objects.requireNonNull(version, "version cannot be null"); + private static Predicate<Node> makePredicate(Version version) { + Objects.requireNonNull(version, "version cannot be null"); + if (version.isEmpty()) return node -> true; + return node -> node.status().osVersion().matches(version); } - @Override - public boolean matches(Node node) { - if (!version.isEmpty() && !node.status().osVersion().matches(version)) { - return false; - } - return nextMatches(node); - } - - public static NodeOsVersionFilter from(String version, NodeFilter filter) { - return new NodeOsVersionFilter(Version.fromString(version), filter); + public static Predicate<Node> from(String version) { + return makePredicate(Version.fromString(version)); } } 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 index 2a50961e0a4..cac7b870366 100644 --- 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 @@ -1,42 +1,38 @@ // 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.config.provision.NodeType; 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.function.Predicate; import java.util.stream.Collectors; /** * @author bratseth */ -public class NodeTypeFilter extends NodeFilter { +public class NodeTypeFilter { - private final Set<NodeType> types; - - protected NodeTypeFilter(Set<NodeType> types, NodeFilter next) { - super(next); - this.types = ImmutableSet.copyOf(Objects.requireNonNull(types, "Node types cannot be null")); - } + private NodeTypeFilter() {} - @Override - public boolean matches(Node node) { - if (! types.isEmpty() && ! types.contains(node.type())) return false; - return nextMatches(node); + private static Predicate<Node> makePredicate(EnumSet<NodeType> types) { + Objects.requireNonNull(types, "Node types cannot be null"); + if (types.isEmpty()) return node -> true; + return node -> types.contains(node.type()); } /** 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); + public static Predicate<Node> from(NodeType type) { + return makePredicate(EnumSet.of(type)); } /** 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(StringUtilities.split(types).stream().map(NodeType::valueOf).collect(Collectors.toSet()), next); + public static Predicate<Node> from(String types) { + return makePredicate(StringUtilities.split(types).stream() + .map(NodeType::valueOf) + .collect(Collectors.toCollection(() -> EnumSet.noneOf(NodeType.class)))); } } 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 3c51161d4ca..25ce0373f15 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,12 +1,12 @@ // 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.Objects; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -14,27 +14,19 @@ import java.util.stream.Collectors; * * @author dybis */ -public class ParentHostFilter extends NodeFilter { +public class ParentHostFilter { - private final Set<String> parentHostNames; + private ParentHostFilter() {} /** Creates a node filter which filters using the given parent host name */ - private ParentHostFilter(Set<String> parentHostNames, NodeFilter next) { - super(next); - this.parentHostNames = ImmutableSet.copyOf(Objects.requireNonNull(parentHostNames, "parentHostNames cannot be null")); - } - - @Override - public boolean matches(Node node) { - if (! parentHostNames.isEmpty() && ( - ! node.parentHostname().isPresent() || ! parentHostNames.contains(node.parentHostname().get()))) - return false; - return nextMatches(node); + private static Predicate<Node> makePredicate(Set<String> parentHostNames) { + Objects.requireNonNull(parentHostNames, "parentHostNames cannot be null"); + if (parentHostNames.isEmpty()) return node -> true; + return node -> node.parentHostname().isPresent() && parentHostNames.contains(node.parentHostname().get()); } /** Returns a copy of the given filter which only matches for the given parent */ - public static ParentHostFilter from(String parentNames, NodeFilter filter) { - return new ParentHostFilter(StringUtilities.split(parentNames).stream().collect(Collectors.toSet()), filter); + public static Predicate<Node> from(String parentNames) { + return makePredicate(StringUtilities.split(parentNames).stream().collect(Collectors.toUnmodifiableSet())); } - } 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 a2590e8c727..48f9513a434 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 @@ -6,7 +6,7 @@ import com.yahoo.vespa.hosted.provision.Node; import java.util.EnumSet; import java.util.Objects; -import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -14,36 +14,30 @@ import java.util.stream.Collectors; * * @author bratseth */ -public class StateFilter extends NodeFilter { +public class StateFilter { - private final Set<Node.State> states; + private StateFilter() {} - /** Creates a node filter which filters using the given host filter */ - private StateFilter(Set<Node.State> states, NodeFilter next) { - super(next); + private static Predicate<Node> makePredicate(EnumSet<Node.State> states) { Objects.requireNonNull(states, "state cannot be null, use an empty set"); - this.states = EnumSet.copyOf(states); - } - - @Override - public boolean matches(Node node) { - if ( ! states.contains(node.state())) return false; - return nextMatches(node); + return node -> states.contains(node.state()); } /** 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(EnumSet.of(state), filter); + public static Predicate<Node> from(Node.State state) { + return makePredicate(EnumSet.of(state)); } /** Returns a node filter which matches a comma or space-separated list of states */ - public static StateFilter from(String states, boolean includeDeprovisioned, NodeFilter next) { + public static Predicate<Node> from(String states, boolean includeDeprovisioned) { if (states == null) { - return new StateFilter(includeDeprovisioned ? - EnumSet.allOf(Node.State.class) : EnumSet.complementOf(EnumSet.of(Node.State.deprovisioned)), next); + return makePredicate(includeDeprovisioned ? + EnumSet.allOf(Node.State.class) : EnumSet.complementOf(EnumSet.of(Node.State.deprovisioned))); } - return new StateFilter(StringUtilities.split(states).stream().map(Node.State::valueOf).collect(Collectors.toSet()), next); + return makePredicate(StringUtilities.split(states).stream() + .map(Node.State::valueOf) + .collect(Collectors.toCollection(() -> EnumSet.noneOf(Node.State.class)))); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index a54acbe52ae..ab881a68ebe 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -122,7 +122,7 @@ public class NodeRepositoryProvisioner implements Provisioner { @Override public void restart(ApplicationId application, HostFilter filter) { - nodeRepository.nodes().restart(ApplicationFilter.from(application, NodeHostFilter.from(filter))); + nodeRepository.nodes().restart(ApplicationFilter.from(application).and(NodeHostFilter.from(filter))); } @Override diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index 1528a455046..1b3b2f81f11 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -15,7 +15,6 @@ import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Address; import com.yahoo.vespa.hosted.provision.node.History; -import com.yahoo.vespa.hosted.provision.node.filter.NodeFilter; import com.yahoo.vespa.orchestrator.Orchestrator; import com.yahoo.vespa.orchestrator.status.HostInfo; import com.yahoo.vespa.orchestrator.status.HostStatus; @@ -25,6 +24,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Function; +import java.util.function.Predicate; /** * @author bratseth @@ -40,7 +40,7 @@ class NodesResponse extends SlimeJsonResponse { /** The parent url of nodes */ private final String nodeParentUrl; - private final NodeFilter filter; + private final Predicate<Node> filter; private final boolean recursive; private final Function<HostName, Optional<HostInfo>> orchestrator; private final NodeRepository nodeRepository; @@ -104,7 +104,7 @@ class NodesResponse extends SlimeJsonResponse { private void toSlime(List<Node> nodes, Cursor array) { for (Node node : nodes) { - if ( ! filter.matches(node)) continue; + if ( ! filter.test(node)) continue; toSlime(node, recursive, array.addObject()); } } 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 7deaf36ba17..c7bd12204a6 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 @@ -36,7 +36,6 @@ import com.yahoo.vespa.hosted.provision.node.Address; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.IP; 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.NodeOsVersionFilter; import com.yahoo.vespa.hosted.provision.node.filter.NodeTypeFilter; @@ -58,6 +57,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Function; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.stream.Collectors; @@ -330,17 +330,16 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { return NodeSerializer.typeFrom(object.asString()); } - public static NodeFilter toNodeFilter(HttpRequest request) { - NodeFilter filter = NodeHostFilter.from(HostFilter.from(request.getProperty("hostname"), - request.getProperty("flavor"), - request.getProperty("clusterType"), - request.getProperty("clusterId"))); - filter = ApplicationFilter.from(request.getProperty("application"), 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); - return filter; + public static Predicate<Node> toNodeFilter(HttpRequest request) { + return NodeHostFilter.from(HostFilter.from(request.getProperty("hostname"), + request.getProperty("flavor"), + request.getProperty("clusterType"), + request.getProperty("clusterId"))) + .and(ApplicationFilter.from(request.getProperty("application"))) + .and(StateFilter.from(request.getProperty("state"), request.getBooleanProperty("includeDeprovisioned"))) + .and(NodeTypeFilter.from(request.getProperty("type"))) + .and(ParentHostFilter.from(request.getProperty("parentHost"))) + .and(NodeOsVersionFilter.from(request.getProperty("osVersion"))); } private static boolean isPatchOverride(HttpRequest request) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java index 924d38cc6c2..5043529507f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java @@ -185,7 +185,7 @@ public class RetiredExpirerTest { // Set wantToRetire on all 3 config servers List<Node> wantToRetireNodes = tester.nodeRepository().nodes() - .retire(NodeTypeFilter.from(NodeType.config, null), Agent.operator, Instant.now()); + .retire(NodeTypeFilter.from(NodeType.config), Agent.operator, Instant.now()); assertEquals(3, wantToRetireNodes.size()); // Redeploy to retire all 3 config servers diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index df101c416c1..f4333dfa0c3 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -271,7 +271,7 @@ public class ProvisioningTester { for (Node node : nodeRepository.nodes().list(Node.State.active).owner(application)) { int expectedRestarts = 0; for (HostFilter filter : filters) - if (NodeHostFilter.from(filter).matches(node)) + if (NodeHostFilter.from(filter).test(node)) expectedRestarts++; assertEquals(expectedRestarts, node.allocation().get().restartGeneration().wanted()); } |