diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2017-12-08 14:25:54 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2017-12-08 14:25:54 +0100 |
commit | 879cbe9dfe5fa5646ed3735a39083acb19db732e (patch) | |
tree | 7b2255725eeb9ed0148c52015db1c35189dfa2e4 | |
parent | 666eaba7f5d3aff8934e222ee71cdf82b0342bb2 (diff) |
Extract superclass with environment and region
23 files changed, 123 insertions, 105 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java index 6315e05c9de..1868db8fe7f 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java @@ -14,10 +14,8 @@ import java.util.Optional; * * @author bratseth */ -public class Zone { +public class Zone extends ZoneId { - private final Environment environment; - private final RegionName region; private final SystemName systemName; private final FlavorDefaults flavorDefaults; private final Optional<NodeFlavors> nodeFlavors; @@ -46,19 +44,12 @@ public class Zone { RegionName region, FlavorDefaults flavorDefaults, NodeFlavors nodeFlavors) { - this.environment = environment; - this.region = region; + super(environment, region); this.flavorDefaults = flavorDefaults; this.systemName = systemName; this.nodeFlavors = Optional.ofNullable(nodeFlavors); } - /** Returns the current environment */ - public Environment environment() { return environment; } - - /** Returns the current region */ - public RegionName region() { return region; } - /** Returns the current system */ public SystemName system() { return systemName; } @@ -73,25 +64,6 @@ public class Zone { return new Zone(SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName()); } - @Override - public String toString() { - return "zone " + environment + "." + region; - } - - @Override - public int hashCode() { return environment().hashCode() + 7 * region.hashCode();} - - @Override - public boolean equals(Object o) { - if (o == this) return true; - if ( ! (o instanceof Zone)) return false; - - Zone other = (Zone)o; - if ( this.environment() != other.environment()) return false; - if ( ! this.region.equals(other.region)) return false; - return true; - } - private static class FlavorDefaults { /** The default default flavor */ diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ZoneId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ZoneId.java new file mode 100644 index 00000000000..07a4b8c4d79 --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ZoneId.java @@ -0,0 +1,37 @@ +package com.yahoo.config.provision; + +public class ZoneId { + + protected final Environment environment; + protected final RegionName region; + + public ZoneId(Environment environment, RegionName region) { + this.environment = environment; + this.region = region; + } + + /** Returns the current environment */ + public Environment environment() { return environment; } + + /** Returns the current region */ + public RegionName region() { return region; } + + @Override + public String toString() { + return "zone " + environment + "." + region; + } + + @Override + public int hashCode() { return environment().hashCode() + 7 * region.hashCode();} + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if ( ! (o instanceof Zone)) return false; + + ZoneId other = (ZoneId)o; + if ( this.environment() != other.environment()) return false; + if ( ! this.region.equals(other.region)) return false; + return true; + } +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java index 80fe98a4489..c0bebf54803 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java @@ -1,7 +1,7 @@ // 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.controller.api.identifiers; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; /** * Application + zone. @@ -12,9 +12,9 @@ import com.yahoo.config.provision.Zone; public class DeploymentId { private final com.yahoo.config.provision.ApplicationId application; - private final Zone zone; + private final ZoneId zone; - public DeploymentId(com.yahoo.config.provision.ApplicationId application, Zone zone) { + public DeploymentId(com.yahoo.config.provision.ApplicationId application, ZoneId zone) { this.application = application; this.zone = zone; } @@ -22,7 +22,7 @@ public class DeploymentId { public com.yahoo.config.provision.ApplicationId applicationId() { return application; } - public Zone zone() { return zone; } + public ZoneId zone() { return zone; } public String dottedString() { diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java index 1ceb064ad44..d3e1b881bbd 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.integration; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import java.util.Map; @@ -15,9 +15,9 @@ public interface MetricsService { ApplicationMetrics getApplicationMetrics(ApplicationId application); - DeploymentMetrics getDeploymentMetrics(ApplicationId application, Zone zone); + DeploymentMetrics getDeploymentMetrics(ApplicationId application, ZoneId zone); - Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, Zone zone); + Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, ZoneId zone); class DeploymentMetrics { 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 df6f023f6af..3318bf783d8 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 @@ -5,7 +5,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import java.net.URI; import java.time.Duration; @@ -20,8 +20,8 @@ import java.util.Optional; public interface ZoneRegistry { SystemName system(); - List<Zone> zones(); - Optional<Zone> getZone(Environment environment, RegionName region); + List<ZoneId> zones(); + Optional<ZoneId> getZone(Environment environment, RegionName region); List<URI> getConfigServerUris(Environment environment, RegionName region); Optional<URI> getLogServerUri(Environment environment, RegionName region); Optional<Duration> getDeploymentTimeToLive(Environment environment, RegionName region); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java index 9a7ce69f62a..ae2de96f511 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java @@ -7,7 +7,7 @@ import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService.ApplicationMetrics; import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId; import com.yahoo.vespa.hosted.controller.application.ApplicationRotation; @@ -40,7 +40,7 @@ public class Application { private final ApplicationId id; private final DeploymentSpec deploymentSpec; private final ValidationOverrides validationOverrides; - private final Map<Zone, Deployment> deployments; + private final Map<ZoneId, Deployment> deployments; private final DeploymentJobs deploymentJobs; private final Optional<Change> deploying; private final boolean outstandingChange; @@ -67,7 +67,7 @@ public class Application { } Application(ApplicationId id, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides, - Map<Zone, Deployment> deployments, DeploymentJobs deploymentJobs, Optional<Change> deploying, + Map<ZoneId, Deployment> deployments, DeploymentJobs deploymentJobs, Optional<Change> deploying, boolean outstandingChange, Optional<IssueId> ownershipIssueId, ApplicationMetrics metrics, Optional<RotationId> rotation) { Objects.requireNonNull(id, "id cannot be null"); @@ -106,13 +106,13 @@ public class Application { public ValidationOverrides validationOverrides() { return validationOverrides; } /** Returns an immutable map of the current deployments of this */ - public Map<Zone, Deployment> deployments() { return deployments; } + public Map<ZoneId, Deployment> deployments() { return deployments; } /** * Returns an immutable map of the current *production* deployments of this * (deployments also includes manually deployed environments) */ - public Map<Zone, Deployment> productionDeployments() { + public Map<ZoneId, Deployment> productionDeployments() { return ImmutableMap.copyOf(deployments.values().stream() .filter(deployment -> deployment.zone().environment() == Environment.prod) .collect(Collectors.toMap(Deployment::zone, Function.identity()))); @@ -151,7 +151,7 @@ public class Application { } /** Returns the version a new deployment to this zone should use for this application */ - public Version deployVersionIn(Zone zone, Controller controller) { + public Version deployVersionIn(ZoneId zone, Controller controller) { if (deploying().isPresent() && deploying().get() instanceof VersionChange) return ((Change.VersionChange) deploying().get()).version(); @@ -159,13 +159,13 @@ public class Application { } /** Returns the current version this application has, or if none; should use, in the given zone */ - public Version versionIn(Zone zone, Controller controller) { + public Version versionIn(ZoneId zone, Controller controller) { return Optional.ofNullable(deployments().get(zone)).map(Deployment::version) // Already deployed in this zone: Use that version .orElse(oldestDeployedVersion().orElse(controller.systemVersion())); } /** Returns the revision a new deployment to this zone should use for this application, or empty if we don't know */ - public Optional<ApplicationRevision> deployRevisionIn(Zone zone) { + public Optional<ApplicationRevision> deployRevisionIn(ZoneId zone) { if (deploying().isPresent() && deploying().get() instanceof Change.ApplicationChange) return ((Change.ApplicationChange) deploying().get()).revision(); @@ -173,7 +173,7 @@ public class Application { } /** Returns the revision this application is or should be deployed with in the given zone, or empty if unknown. */ - public Optional<ApplicationRevision> revisionIn(Zone zone) { + public Optional<ApplicationRevision> revisionIn(ZoneId zone) { return Optional.ofNullable(deployments().get(zone)).map(Deployment::revision); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index ea917147970..b9f0f5664a3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -8,6 +8,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.curator.Lock; import com.yahoo.vespa.hosted.controller.api.ActivateResult; import com.yahoo.vespa.hosted.controller.api.InstanceEndpoints; @@ -368,7 +369,7 @@ public class ApplicationController { } } - private ActivateResult unexpectedDeployment(ApplicationId applicationId, Zone zone, ApplicationPackage applicationPackage) { + private ActivateResult unexpectedDeployment(ApplicationId applicationId, ZoneId zone, ApplicationPackage applicationPackage) { Log logEntry = new Log(); logEntry.level = "WARNING"; logEntry.time = clock.instant().toEpochMilli(); @@ -405,9 +406,9 @@ public class ApplicationController { private LockedApplication deleteUnreferencedDeploymentJobs(LockedApplication application) { for (DeploymentJobs.JobType job : application.deploymentJobs().jobStatus().keySet()) { - Optional<Zone> zone = job.zone(controller.system()); + Optional<ZoneId> zone = job.zone(controller.system()); - if ( ! job.isProduction() || (zone.isPresent() && application.deploymentSpec().includes(zone.get().environment(), zone.map(Zone::region)))) + if ( ! job.isProduction() || (zone.isPresent() && application.deploymentSpec().includes(zone.get().environment(), zone.map(ZoneId::region)))) continue; application = application.withoutDeploymentJob(job); } @@ -466,7 +467,7 @@ public class ApplicationController { } /** Get an available rotation, if deploying to a production zone and a service ID is specified */ - private Optional<Rotation> getRotation(Application application, Zone zone, RotationLock lock) { + private Optional<Rotation> getRotation(Application application, ZoneId zone, RotationLock lock) { if (zone.environment() != Environment.prod || !application.deploymentSpec().globalServiceId().isPresent()) { return Optional.empty(); @@ -581,7 +582,7 @@ public class ApplicationController { } /** Deactivate application in the given zone */ - public void deactivate(Application application, Zone zone) { + public void deactivate(Application application, ZoneId zone) { deactivate(application, zone, Optional.empty(), false); } @@ -590,7 +591,7 @@ public class ApplicationController { deactivate(application, deployment.zone(), Optional.of(deployment), requireThatDeploymentHasExpired); } - private void deactivate(Application application, Zone zone, Optional<Deployment> deployment, + private void deactivate(Application application, ZoneId zone, Optional<Deployment> deployment, boolean requireThatDeploymentHasExpired) { if (requireThatDeploymentHasExpired && deployment.isPresent() && ! DeploymentExpirer.hasExpired(controller.zoneRegistry(), deployment.get(), clock.instant())) @@ -605,7 +606,7 @@ public class ApplicationController { * * @return the application with the deployment in the given zone removed */ - private LockedApplication deactivate(LockedApplication application, Zone zone) { + private LockedApplication deactivate(LockedApplication application, ZoneId zone) { try { configserverClient.deactivate(new DeploymentId(application.id(), zone)); } @@ -635,7 +636,7 @@ public class ApplicationController { } /** Returns whether a direct deployment to given zone is allowed */ - private static boolean canDeployDirectlyTo(Zone zone, DeployOptions options) { + private static boolean canDeployDirectlyTo(ZoneId zone, DeployOptions options) { return ! options.screwdriverBuildJob.isPresent() || options.screwdriverBuildJob.get().screwdriverId == null || zone.environment().isManuallyDeployed(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java index d96739dd0a0..afc1ece8074 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java @@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.curator.Lock; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService.ApplicationMetrics; @@ -78,27 +79,27 @@ public class LockedApplication extends Application { return with(newDeployment); } - public LockedApplication withClusterUtilization(Zone zone, Map<ClusterSpec.Id, ClusterUtilization> clusterUtilization) { + public LockedApplication withClusterUtilization(ZoneId zone, Map<ClusterSpec.Id, ClusterUtilization> clusterUtilization) { Deployment deployment = deployments().get(zone); if (deployment == null) return this; // No longer deployed in this zone. return with(deployment.withClusterUtils(clusterUtilization)); } - public LockedApplication withClusterInfo(Zone zone, Map<ClusterSpec.Id, ClusterInfo> clusterInfo) { + public LockedApplication withClusterInfo(ZoneId zone, Map<ClusterSpec.Id, ClusterInfo> clusterInfo) { Deployment deployment = deployments().get(zone); if (deployment == null) return this; // No longer deployed in this zone. return with(deployment.withClusterInfo(clusterInfo)); } - public LockedApplication with(Zone zone, DeploymentMetrics deploymentMetrics) { + public LockedApplication with(ZoneId zone, DeploymentMetrics deploymentMetrics) { Deployment deployment = deployments().get(zone); if (deployment == null) return this; // No longer deployed in this zone. return with(deployment.withMetrics(deploymentMetrics)); } - public LockedApplication withoutDeploymentIn(Zone zone) { - Map<Zone, Deployment> deployments = new LinkedHashMap<>(deployments()); + public LockedApplication withoutDeploymentIn(ZoneId zone) { + Map<ZoneId, Deployment> deployments = new LinkedHashMap<>(deployments()); deployments.remove(zone); return new LockedApplication(new Builder(this).with(deployments)); } @@ -149,7 +150,7 @@ public class LockedApplication extends Application { /** Don't expose non-leaf sub-objects. */ private LockedApplication with(Deployment deployment) { - Map<Zone, Deployment> deployments = new LinkedHashMap<>(deployments()); + Map<ZoneId, Deployment> deployments = new LinkedHashMap<>(deployments()); deployments.put(deployment.zone(), deployment); return new LockedApplication(new Builder(this).with(deployments)); } @@ -160,7 +161,7 @@ public class LockedApplication extends Application { private final ApplicationId applicationId; private DeploymentSpec deploymentSpec; private ValidationOverrides validationOverrides; - private Map<Zone, Deployment> deployments; + private Map<ZoneId, Deployment> deployments; private DeploymentJobs deploymentJobs; private Optional<Change> deploying; private boolean hasOutstandingChange; @@ -191,7 +192,7 @@ public class LockedApplication extends Application { return this; } - private Builder with(Map<Zone, Deployment> deployments) { + private Builder with(Map<ZoneId, Deployment> deployments) { this.deployments = deployments; return this; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java index 98f8c2a3d99..49e688a8b0e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java @@ -8,12 +8,12 @@ import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId; import java.time.Instant; import java.util.Collection; -import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -177,9 +177,9 @@ public class DeploymentJobs { productionCdUsCentral2 ("production-cd-us-central-2", zone(SystemName.cd, "prod", "cd-us-central-2")); private final String jobName; - private final ImmutableMap<SystemName, Zone> zones; + private final ImmutableMap<SystemName, ZoneId> zones; - JobType(String jobName, Zone... zones) { + JobType(String jobName, ZoneId... zones) { this.jobName = jobName; this.zones = ImmutableMap.copyOf(Stream.of(zones).collect(Collectors.toMap(zone -> zone.system(), zone -> zone))); @@ -188,7 +188,7 @@ public class DeploymentJobs { public String jobName() { return jobName; } /** Returns the zone for this job in the given system, or empty if this job does not have a zone */ - public Optional<Zone> zone(SystemName system) { + public Optional<ZoneId> zone(SystemName system) { return Optional.ofNullable(zones.get(system)); } @@ -207,7 +207,7 @@ public class DeploymentJobs { /** Returns the region of this job type, or null if it does not have a region */ public Optional<RegionName> region(SystemName system) { - return zone(system).map(Zone::region); + return zone(system).map(ZoneId::region); } public static JobType fromJobName(String jobName) { @@ -217,7 +217,7 @@ public class DeploymentJobs { } /** Returns the job type for the given zone */ - public static Optional<JobType> from(SystemName system, Zone zone) { + public static Optional<JobType> from(SystemName system, ZoneId zone) { return Stream.of(values()) .filter(job -> job.zone(system).filter(zone::equals).isPresent()) .findAny(); @@ -232,11 +232,11 @@ public class DeploymentJobs { return from(system, new Zone(environment, region)); } - private static Zone zone(SystemName system, String environment, String region) { + private static ZoneId zone(SystemName system, String environment, String region) { return new Zone(system, Environment.from(environment), RegionName.from(region)); } - private static Zone zone(String environment, String region) { + private static ZoneId zone(String environment, String region) { return new Zone(Environment.from(environment), RegionName.from(region)); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentOrder.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentOrder.java index aa4d07634db..01d4ed4506a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentOrder.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentOrder.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.deployment; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.LockedApplication; @@ -105,7 +106,7 @@ public class DeploymentOrder { /** Returns deployments sorted according to declared zones */ public List<Deployment> sortBy(List<DeploymentSpec.DeclaredZone> zones, Collection<Deployment> deployments) { - List<Zone> productionZones = zones.stream() + List<ZoneId> productionZones = zones.stream() .filter(z -> z.region().isPresent()) .map(z -> new Zone(z.environment(), z.region().get())) .collect(toList()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java index dada11ca436..f0c950b024b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java @@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.controller.deployment; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.SystemName; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.ApplicationController; import com.yahoo.vespa.hosted.controller.Controller; @@ -358,7 +358,7 @@ public class DeploymentTrigger { */ private boolean isOnNewerVersionInProductionThan(Version version, Application application, JobType job) { if ( ! job.isProduction()) return false; - Optional<Zone> zone = job.zone(controller.system()); + Optional<ZoneId> zone = job.zone(controller.system()); if ( ! zone.isPresent()) return false; Deployment existingDeployment = application.deployments().get(zone.get()); if (existingDeployment == null) return false; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterUtilizationMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterUtilizationMaintainer.java index 0d472ab0910..58e32344372 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterUtilizationMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterUtilizationMaintainer.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService; @@ -29,7 +29,7 @@ public class ClusterUtilizationMaintainer extends Maintainer { this.controller = controller; } - private Map<ClusterSpec.Id, ClusterUtilization> getUpdatedClusterUtilizations(ApplicationId app, Zone zone) { + private Map<ClusterSpec.Id, ClusterUtilization> getUpdatedClusterUtilizations(ApplicationId app, ZoneId zone) { Map<String, MetricsService.SystemMetrics> systemMetrics = controller.metricsService().getSystemMetrics(app, zone); Map<ClusterSpec.Id, ClusterUtilization> utilizationMap = new HashMap<>(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index c71409aaba9..12441504ca2 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -9,6 +9,7 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; @@ -194,7 +195,7 @@ public class ApplicationSerializer { object.setDouble(clusterUtilsDiskBusyField, utils.getDiskBusy()); } - private void zoneToSlime(Zone zone, Cursor object) { + private void zoneToSlime(ZoneId zone, Cursor object) { object.setString(environmentField, zone.environment().value()); object.setString(regionField, zone.region().value()); } 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 e8b68d0c55a..c9ce0b76520 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 @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.io.IOUtils; import com.yahoo.jdisc.http.HttpRequest.Method; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; @@ -83,8 +83,8 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { ObjectMapper mapper = new ObjectMapper(); DiscoveryResponseStructure responseStructure = new DiscoveryResponseStructure(); - List<Zone> zones = zoneRegistry.zones(); - for (Zone zone : zones) { + List<ZoneId> zones = zoneRegistry.zones(); + for (ZoneId zone : zones) { if (!"".equals(proxyRequest.getEnvironment()) && !proxyRequest.getEnvironment().equals(zone.environment().value())) { continue; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index d64f07906ab..08d973dba52 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -11,6 +11,7 @@ import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -821,7 +822,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { private HttpResponse deactivate(String tenantName, String applicationName, String instanceName, String environment, String region) { Application application = controller.applications().require(ApplicationId.from(tenantName, applicationName, instanceName)); - Zone zone = new Zone(Environment.from(environment), RegionName.from(region)); + ZoneId zone = new Zone(Environment.from(environment), RegionName.from(region)); Deployment deployment = application.deployments().get(zone); if (deployment == null) { // Attempt to deactivate application even if the deployment is not known by the controller diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java index 6a448e475c5..0b0a2c3ad52 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.restapi.application; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.slime.Cursor; import com.yahoo.slime.JsonFormat; @@ -30,7 +30,7 @@ import java.util.regex.Pattern; */ class ServiceApiResponse extends HttpResponse { - private final Zone zone; + private final ZoneId zone; private final ApplicationId application; private final List<URI> configServerURIs; private final Slime slime; @@ -40,7 +40,7 @@ class ServiceApiResponse extends HttpResponse { private String serviceName = null; private String restPath = null; - public ServiceApiResponse(Zone zone, ApplicationId application, List<URI> configServerURIs, URI requestUri) { + public ServiceApiResponse(ZoneId zone, ApplicationId application, List<URI> configServerURIs, URI requestUri) { super(200); this.zone = zone; this.application = application; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java index 3a3fd445bcf..aecd3847653 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.restapi.zone.v1; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -70,7 +70,7 @@ public class ZoneApiHandler extends LoggingRequestHandler { private HttpResponse root(HttpRequest request) { List<Environment> environments = zoneRegistry.zones().stream() - .map(Zone::environment) + .map(ZoneId::environment) .distinct() .sorted(Comparator.comparing(Environment::value)) .collect(Collectors.toList()); @@ -89,7 +89,7 @@ public class ZoneApiHandler extends LoggingRequestHandler { } private HttpResponse environment(HttpRequest request, Environment environment) { - List<Zone> zones = zoneRegistry.zones().stream() + List<ZoneId> zones = zoneRegistry.zones().stream() .filter(zone -> zone.environment() == environment) .collect(Collectors.toList()); Slime slime = new Slime(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java index 529b2b25785..3f85b0116ad 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.restapi.zone.v2; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -81,7 +81,7 @@ public class ZoneApiHandler extends LoggingRequestHandler { } Environment environment = Environment.from(path.get("environment")); RegionName region = RegionName.from(path.get("region")); - Optional<Zone> zone = zoneRegistry.getZone(environment, region); + Optional<ZoneId> zone = zoneRegistry.getZone(environment, region); if (!zone.isPresent()) { throw new IllegalArgumentException("No such zone: " + environment.value() + "." + region.value()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index c41fc20d5c2..eca381754d6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -11,6 +11,7 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.config.SlimeUtils; import com.yahoo.vespa.hosted.controller.api.Tenant; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions; @@ -493,7 +494,7 @@ public class ControllerTest { public void testGlobalRotations() throws IOException { // Setup tester and app def ControllerTester tester = new ControllerTester(); - Zone zone = Zone.defaultZone(); + ZoneId zone = Zone.defaultZone(); ApplicationId appId = tester.applicationId("tenant", "app1", "default"); DeploymentId deployId = new DeploymentId(appId, zone); 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 18332942c24..b4f06f3b423 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 @@ -8,6 +8,7 @@ import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; import java.net.URI; @@ -24,9 +25,9 @@ import java.util.Optional; */ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry { - private final Map<Zone, Duration> deploymentTimeToLive = new HashMap<>(); + private final Map<ZoneId, Duration> deploymentTimeToLive = new HashMap<>(); private final Map<Environment, RegionName> defaultRegionForEnvironment = new HashMap<>(); - private List<Zone> zones = new ArrayList<>(); + private List<ZoneId> zones = new ArrayList<>(); private SystemName system = SystemName.main; @Inject @@ -36,7 +37,7 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry this.zones.add(new Zone(SystemName.main, Environment.from("prod"), RegionName.from("us-west-1"))); } - public ZoneRegistryMock setDeploymentTimeToLive(Zone zone, Duration duration) { + public ZoneRegistryMock setDeploymentTimeToLive(ZoneId zone, Duration duration) { deploymentTimeToLive.put(zone, duration); return this; } @@ -46,7 +47,7 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry return this; } - public ZoneRegistryMock setZones(List<Zone> zones) { + public ZoneRegistryMock setZones(List<ZoneId> zones) { this.zones = zones; return this; } @@ -62,12 +63,12 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry } @Override - public List<Zone> zones() { + public List<ZoneId> zones() { return Collections.unmodifiableList(zones); } @Override - public Optional<Zone> getZone(Environment environment, RegionName region) { + public Optional<ZoneId> getZone(Environment environment, RegionName region) { return zones().stream().filter(z -> z.environment().equals(environment) && z.region().equals(region)).findFirst(); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java index 2dc6471effb..a58d2d0fa39 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.integration; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import java.util.HashMap; import java.util.Map; @@ -18,12 +18,12 @@ public class MockMetricsService implements com.yahoo.vespa.hosted.controller.api } @Override - public DeploymentMetrics getDeploymentMetrics(ApplicationId application, Zone zone) { + public DeploymentMetrics getDeploymentMetrics(ApplicationId application, ZoneId zone) { return new DeploymentMetrics(1, 2, 3, 4, 5); } @Override - public Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, Zone zone) { + public Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, ZoneId zone) { Map<String, SystemMetrics> result = new HashMap<>(); SystemMetrics system = new SystemMetrics(55.54, 69.90, 34.59); result.put("default", system); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java index a00665b77cb..e03a550686f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java @@ -5,6 +5,7 @@ import com.yahoo.application.container.handler.Request; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.vespa.hosted.controller.ZoneRegistryMock; import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; @@ -21,12 +22,12 @@ import java.util.List; public class ZoneApiTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/responses/"; - private static final List<Zone> zones = Arrays.asList( + private static final List<ZoneId> zones = Arrays.asList( new Zone(Environment.prod, RegionName.from("us-north-1")), new Zone(Environment.dev, RegionName.from("us-north-2")), new Zone(Environment.test, RegionName.from("us-north-3")), new Zone(Environment.staging, RegionName.from("us-north-4")) - ); + ); private ContainerControllerTester tester; diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java index 63899d808f9..3874d50f0ed 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java @@ -5,6 +5,7 @@ import com.yahoo.application.container.handler.Request.Method; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; +import com.yahoo.config.provision.ZoneId; import com.yahoo.text.Utf8; import com.yahoo.vespa.hosted.controller.ConfigServerProxyMock; import com.yahoo.vespa.hosted.controller.ZoneRegistryMock; @@ -26,12 +27,12 @@ import static org.junit.Assert.assertFalse; public class ZoneApiTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/responses/"; - private static final List<Zone> zones = Arrays.asList( + private static final List<ZoneId> zones = Arrays.asList( new Zone(Environment.prod, RegionName.from("us-north-1")), new Zone(Environment.dev, RegionName.from("us-north-2")), new Zone(Environment.test, RegionName.from("us-north-3")), new Zone(Environment.staging, RegionName.from("us-north-4")) - ); + ); private ContainerControllerTester tester; private ConfigServerProxyMock proxy; |