summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilter.java22
-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.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneList.java34
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/Zones.java46
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ZoneRegistryMock.java8
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