diff options
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilter.java | 22 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java (renamed from controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZonesMock.java) | 31 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java | 2 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneList.java | 34 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java | 2 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/Zones.java | 46 | ||||
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java | 4 | ||||
-rw-r--r-- | controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java | 8 |
8 files changed, 83 insertions, 66 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilter.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilter.java new file mode 100644 index 00000000000..f718b86ca40 --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilter.java @@ -0,0 +1,22 @@ +package com.yahoo.vespa.hosted.controller.api.integration.zone; + +/** + * A ZoneId list which can be filtered in various ways; elements can be accessed after at least one filter. + * + * The methods here return instances of {@link ZoneList}, which extends ZoneFilter, but with accessors and additional filters. + * This forces the developer to consider which of the filters in this class to apply, prior to processing any zones. + * + * @author jvenstad + */ +public interface ZoneFilter { + + /** Negates the next filter. */ + ZoneFilter not(); + + /** All zones from the initial pool. */ + ZoneList all(); + + /** Zones where which are managed by the controller. */ + ZoneList controllerManaged(); + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZonesMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java index a63dadf6a46..e68bf0ccc24 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZonesMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java @@ -4,8 +4,10 @@ import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -14,52 +16,57 @@ import java.util.stream.Collectors; * * @author jvenstad */ -public class ZonesMock implements Zones.List { +public class ZoneFilterMock implements ZoneList { private final java.util.List<ZoneId> zones; private final boolean negate; - private ZonesMock(java.util.List<ZoneId> zones, boolean negate) { + private ZoneFilterMock(java.util.List<ZoneId> zones, boolean negate) { this.negate = negate; this.zones = zones; } - public static Zones from(Collection<ZoneId> zones) { - return new ZonesMock(new ArrayList<>(zones), false); + public static ZoneFilter from(Collection<ZoneId> zones) { + return new ZoneFilterMock(new ArrayList<>(zones), false); } @Override - public Zones.List not() { - return new ZonesMock(zones, ! negate); + public ZoneList not() { + return new ZoneFilterMock(zones, ! negate); } @Override - public Zones.List all() { + public ZoneList all() { return filter(zoneId -> true); } @Override - public Zones.List controllerManaged() { + public ZoneList controllerManaged() { return all(); } @Override - public Zones.List in(Environment environment) { + public ZoneList in(Environment environment) { return filter(zoneId -> zoneId.environment() == environment); } @Override - public Zones.List in(RegionName region) { + public ZoneList in(RegionName region) { return filter(zoneId -> zoneId.region().equals(region)); } @Override + public ZoneList zones(ZoneId... zones) { + return filter(zoneId -> new HashSet<>(Arrays.asList(zones)).contains(zoneId)); + } + + @Override public java.util.List<ZoneId> ids() { return Collections.unmodifiableList(zones); } - private ZonesMock filter(Predicate<ZoneId> condition) { - return new ZonesMock(zones.stream().filter(negate ? condition.negate() : condition).collect(Collectors.toList()), false); + private ZoneFilterMock filter(Predicate<ZoneId> condition) { + return new ZoneFilterMock(zones.stream().filter(negate ? condition.negate() : condition).collect(Collectors.toList()), false); } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java index 818f57ec44d..21ac7a654b8 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java @@ -14,7 +14,7 @@ import java.util.Objects; * @author jvenstad */ public class ZoneId { - // TODO: Replace usages of zone + region with usages of this. + // TODO: Replace usages of environment + region with usages of this. private final Environment environment; private final RegionName region; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneList.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneList.java new file mode 100644 index 00000000000..cd263769864 --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneList.java @@ -0,0 +1,34 @@ +package com.yahoo.vespa.hosted.controller.api.integration.zone; + +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; + +import java.util.List; + +/** + * Provides filters for and access to a list of ZoneIds. + * + * This is typically offered after an initial filter from {@link ZoneFilter} has been applied. + * This forces the developer to consider which zones to process. + * + * @author jvenstad + */ +public interface ZoneList extends ZoneFilter { + + /** Negates the next filter. */ + @Override + ZoneList not(); + + /** Zones in the given environment. */ + ZoneList in(Environment environment); + + /** Zones in the given region. */ + ZoneList in(RegionName region); + + /** Only the given zones — combine with not() for best effect! */ + ZoneList zones(ZoneId... zones); + + /** Returns the id of all zones in this list as — you guessed it — a list. */ + List<ZoneId> ids(); + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java index b7eb3adadcf..03207d86983 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java @@ -22,7 +22,7 @@ public interface ZoneRegistry { boolean hasZone(ZoneId zoneId); /** Returns a list containing the id of all zones in this registry. */ - Zones zones(); + ZoneFilter zones(); /** Returns the default region for the given environment, if one is configured. */ Optional<RegionName> getDefaultRegion(Environment environment); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/Zones.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/Zones.java deleted file mode 100644 index 966cb376154..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/Zones.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.yahoo.vespa.hosted.controller.api.integration.zone; - -import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.RegionName; - -/** - * A ZoneId list which can be filtered in various ways; elements can be accessed after at least one filter. - * - * The class is split in an outer and an inner class to force the user to make an initial choice between - * the filters available in the outer class; these should be pertinent to what code should use the zone, - * while the filters in the inner class are optional and / or for convenience. - * - * - * @author jvenstad - */ -public interface Zones { - - /** Negates the next filter. */ - Zones not(); - - /** All zones from the initial pool. */ - Zones.List all(); - - /** Zones where which are managed by the controller. */ - Zones.List controllerManaged(); - - - /** Wraps access to the zones; this forces the user to consider which zones to access. */ - interface List extends Zones { - - /** Negates the next filter. */ - @Override - Zones.List not(); - - /** Zones in the given environment. */ - Zones.List in(Environment environment); - - /** Zones in the given region. */ - Zones.List in(RegionName region); - - /** Returns the id of all zones in this list as — you guessed it — a list. */ - java.util.List<ZoneId> ids(); - - } - -} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java index 751fe25b897..e8689a06162 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java @@ -7,8 +7,8 @@ import com.yahoo.config.provision.Environment; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId; import com.yahoo.io.IOUtils; import com.yahoo.jdisc.http.HttpRequest.Method; +import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneList; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; -import com.yahoo.vespa.hosted.controller.api.integration.zone.Zones; import org.apache.http.Header; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -83,7 +83,7 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { DiscoveryResponseStructure responseStructure = new DiscoveryResponseStructure(); String environmentName = proxyRequest.getEnvironment(); - Zones.List zones = zoneRegistry.zones().all(); + ZoneList zones = zoneRegistry.zones().all(); if ( ! environmentName.isEmpty()) zones = zones.in(Environment.from(environmentName)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java index 092e21fec14..82434b6260c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java @@ -9,8 +9,8 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; -import com.yahoo.vespa.hosted.controller.api.integration.zone.Zones; -import com.yahoo.vespa.hosted.controller.api.integration.zone.ZonesMock; +import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneFilter; +import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneFilterMock; import java.net.URI; import java.time.Duration; @@ -64,8 +64,8 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry } @Override - public Zones zones() { - return ZonesMock.from(Collections.unmodifiableList(zones)); + public ZoneFilter zones() { + return ZoneFilterMock.from(Collections.unmodifiableList(zones)); } @Override |