diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-11-05 15:14:09 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-11-08 10:44:19 +0100 |
commit | fd25b2ebd97a8f2b5f608ef3f0c5e884b55ac4cc (patch) | |
tree | db765b2a368be589f663a932abf9a7d6001680b7 /controller-server | |
parent | d4e336a38d8a6222053dc68447b707b172d7ef79 (diff) |
Rename GlobalRouting -> RoutingStatus
Diffstat (limited to 'controller-server')
13 files changed, 151 insertions, 150 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java index 652f85a7508..e10dcfd3b3b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java @@ -29,7 +29,7 @@ import com.yahoo.vespa.hosted.controller.deployment.Step; import com.yahoo.vespa.hosted.controller.dns.NameServiceQueue; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest; import com.yahoo.vespa.hosted.controller.notification.Notification; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicyId; import com.yahoo.vespa.hosted.controller.routing.ZoneRoutingPolicy; @@ -535,7 +535,7 @@ public class CuratorDb { public ZoneRoutingPolicy readZoneRoutingPolicy(ZoneId zone) { return readSlime(zoneRoutingPolicyPath(zone)).map(data -> zoneRoutingPolicySerializer.fromSlime(zone, data)) - .orElse(new ZoneRoutingPolicy(zone, GlobalRouting.DEFAULT_STATUS)); + .orElse(new ZoneRoutingPolicy(zone, RoutingStatus.DEFAULT)); } // -------------- Application endpoint certificates ---------------------------- diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java index d707b769f29..e80ee283aee 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java @@ -11,7 +11,7 @@ import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.application.EndpointId; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicyId; import com.yahoo.vespa.hosted.controller.routing.Status; @@ -66,7 +66,7 @@ public class RoutingPolicySerializer { var applicationEndpointsArray = policyObject.setArray(applicationEndpointsField); policy.applicationEndpoints().forEach(endpointId -> applicationEndpointsArray.addString(endpointId.id())); policyObject.setBool(loadBalancerActiveField, policy.status().isActive()); - globalRoutingToSlime(policy.status().globalRouting(), policyObject.setObject(globalRoutingField)); + globalRoutingToSlime(policy.status().routingStatus(), policyObject.setObject(globalRoutingField)); }); return slime; } @@ -94,17 +94,17 @@ public class RoutingPolicySerializer { return Collections.unmodifiableMap(policies); } - public void globalRoutingToSlime(GlobalRouting globalRouting, Cursor object) { - object.setString(statusField, globalRouting.status().name()); - object.setString(agentField, globalRouting.agent().name()); - object.setLong(changedAtField, globalRouting.changedAt().toEpochMilli()); + public void globalRoutingToSlime(RoutingStatus routingStatus, Cursor object) { + object.setString(statusField, routingStatus.value().name()); + object.setString(agentField, routingStatus.agent().name()); + object.setLong(changedAtField, routingStatus.changedAt().toEpochMilli()); } - public GlobalRouting globalRoutingFromSlime(Inspector object) { - var status = GlobalRouting.Status.valueOf(object.field(statusField).asString()); - var agent = GlobalRouting.Agent.valueOf(object.field(agentField).asString()); + public RoutingStatus globalRoutingFromSlime(Inspector object) { + var status = RoutingStatus.Value.valueOf(object.field(statusField).asString()); + var agent = RoutingStatus.Agent.valueOf(object.field(agentField).asString()); var changedAt = SlimeUtils.optionalInstant(object.field(changedAtField)).orElse(Instant.EPOCH); - return new GlobalRouting(status, agent, changedAt); + return new RoutingStatus(status, agent, changedAt); } } 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 17b15230458..ba565a63996 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 @@ -100,7 +100,7 @@ import com.yahoo.vespa.hosted.controller.persistence.SupportAccessSerializer; import com.yahoo.vespa.hosted.controller.rotation.RotationId; import com.yahoo.vespa.hosted.controller.rotation.RotationState; import com.yahoo.vespa.hosted.controller.rotation.RotationStatus; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.security.AccessControlRequests; import com.yahoo.vespa.hosted.controller.security.Credentials; import com.yahoo.vespa.hosted.controller.support.access.SupportAccess; @@ -1561,8 +1561,8 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { /** Set the global endpoint status for given deployment. This only applies to global endpoints backed by a cloud service */ private void setGlobalEndpointStatus(DeploymentId deployment, boolean inService, HttpRequest request) { - var agent = isOperator(request) ? GlobalRouting.Agent.operator : GlobalRouting.Agent.tenant; - var status = inService ? GlobalRouting.Status.in : GlobalRouting.Status.out; + var agent = isOperator(request) ? RoutingStatus.Agent.operator : RoutingStatus.Agent.tenant; + var status = inService ? RoutingStatus.Value.in : RoutingStatus.Value.out; controller.routing().policies().setRoutingStatus(deployment, status, agent); } @@ -1570,7 +1570,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { private void setGlobalRotationStatus(DeploymentId deployment, boolean inService, HttpRequest request) { var requestData = toSlime(request.getData()).get(); var reason = mandatory("reason", requestData).asString(); - var agent = isOperator(request) ? GlobalRouting.Agent.operator : GlobalRouting.Agent.tenant; + var agent = isOperator(request) ? RoutingStatus.Agent.operator : RoutingStatus.Agent.tenant; long timestamp = controller.clock().instant().getEpochSecond(); var status = inService ? EndpointStatus.Status.in : EndpointStatus.Status.out; var endpointStatus = new EndpointStatus(status, reason, agent.name(), timestamp); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java index 334ab0b9f73..e47dd45e4d7 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java @@ -24,7 +24,7 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.application.Endpoint; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.yolean.Exceptions; import java.net.URI; @@ -210,7 +210,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { private HttpResponse setZoneStatus(Path path, boolean in) { var zone = zoneFrom(path); if (controller.zoneRegistry().zones().directlyRouted().ids().contains(zone)) { - var status = in ? GlobalRouting.Status.in : GlobalRouting.Status.out; + var status = in ? RoutingStatus.Value.in : RoutingStatus.Value.out; controller.routing().policies().setRoutingStatus(zone, status); } else { controller.serviceRegistry().configServer().setGlobalRotationStatus(zone, in); @@ -234,8 +234,8 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { } else { // Rotation status per zone only exposes in/out status, no agent or time of change. var in = controller.serviceRegistry().configServer().getGlobalRotationStatus(zone); - var globalRouting = new GlobalRouting(in ? GlobalRouting.Status.in : GlobalRouting.Status.out, - GlobalRouting.Agent.operator, Instant.EPOCH); + var globalRouting = new RoutingStatus(in ? RoutingStatus.Value.in : RoutingStatus.Value.out, + RoutingStatus.Agent.operator, Instant.EPOCH); zoneStatusToSlime(zoneObject, zone, globalRouting, RoutingMethod.shared); } } @@ -243,8 +243,8 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { private HttpResponse setDeploymentStatus(Path path, boolean in) { var deployment = deploymentFrom(path); var instance = controller.applications().requireInstance(deployment.applicationId()); - var status = in ? GlobalRouting.Status.in : GlobalRouting.Status.out; - var agent = GlobalRouting.Agent.operator; // Always operator as this is an operator API + var status = in ? RoutingStatus.Value.in : RoutingStatus.Value.out; + var agent = RoutingStatus.Agent.operator; // Always operator as this is an operator API requireDeployment(deployment, instance); // Set rotation status, if rotations can route to this zone @@ -297,33 +297,33 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { } - private Optional<GlobalRouting> sharedGlobalRoutingStatus(DeploymentId deploymentId) { + private Optional<RoutingStatus> sharedGlobalRoutingStatus(DeploymentId deploymentId) { if (rotationCanRouteTo(deploymentId.zoneId())) { var rotationStatus = controller.routing().globalRotationStatus(deploymentId); // Status is equal across all global endpoints, as the status is per deployment, not per endpoint. var endpointStatus = rotationStatus.values().stream().findFirst(); if (endpointStatus.isPresent()) { var changedAt = Instant.ofEpochSecond(endpointStatus.get().getEpoch()); - GlobalRouting.Agent agent; + RoutingStatus.Agent agent; try { - agent = GlobalRouting.Agent.valueOf(endpointStatus.get().getAgent()); + agent = RoutingStatus.Agent.valueOf(endpointStatus.get().getAgent()); } catch (IllegalArgumentException e) { - agent = GlobalRouting.Agent.unknown; + agent = RoutingStatus.Agent.unknown; } var status = endpointStatus.get().getStatus() == EndpointStatus.Status.in - ? GlobalRouting.Status.in - : GlobalRouting.Status.out; - return Optional.of(new GlobalRouting(status, agent, changedAt)); + ? RoutingStatus.Value.in + : RoutingStatus.Value.out; + return Optional.of(new RoutingStatus(status, agent, changedAt)); } } return Optional.empty(); } - private List<GlobalRouting> directGlobalRoutingStatus(DeploymentId deploymentId) { + private List<RoutingStatus> directGlobalRoutingStatus(DeploymentId deploymentId) { return controller.routing().policies().get(deploymentId).values().stream() .filter(p -> ! p.instanceEndpoints().isEmpty()) // This policy does not apply to a global endpoint .filter(p -> controller.zoneRegistry().routingMethods(p.id().zone()).contains(RoutingMethod.exclusive)) - .map(p -> p.status().globalRouting()) + .map(p -> p.status().routingStatus()) .collect(Collectors.toList()); } @@ -335,23 +335,23 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { return controller.zoneRegistry().routingMethods(zone).stream().anyMatch(RoutingMethod::isShared); } - private static void zoneStatusToSlime(Cursor object, ZoneId zone, GlobalRouting globalRouting, RoutingMethod method) { + private static void zoneStatusToSlime(Cursor object, ZoneId zone, RoutingStatus routingStatus, RoutingMethod method) { object.setString("routingMethod", asString(method)); object.setString("environment", zone.environment().value()); object.setString("region", zone.region().value()); - object.setString("status", asString(globalRouting.status())); - object.setString("agent", asString(globalRouting.agent())); - object.setLong("changedAt", globalRouting.changedAt().toEpochMilli()); + object.setString("status", asString(routingStatus.value())); + object.setString("agent", asString(routingStatus.agent())); + object.setLong("changedAt", routingStatus.changedAt().toEpochMilli()); } - private static void deploymentStatusToSlime(Cursor object, DeploymentId deployment, GlobalRouting globalRouting, RoutingMethod method) { + private static void deploymentStatusToSlime(Cursor object, DeploymentId deployment, RoutingStatus routingStatus, RoutingMethod method) { object.setString("routingMethod", asString(method)); object.setString("instance", deployment.applicationId().serializedForm()); object.setString("environment", deployment.zoneId().environment().value()); object.setString("region", deployment.zoneId().region().value()); - object.setString("status", asString(globalRouting.status())); - object.setString("agent", asString(globalRouting.agent())); - object.setLong("changedAt", globalRouting.changedAt().toEpochMilli()); + object.setString("status", asString(routingStatus.value())); + object.setString("agent", asString(routingStatus.agent())); + object.setLong("changedAt", routingStatus.changedAt().toEpochMilli()); } private static void endpointToSlime(Cursor object, Endpoint endpoint) { @@ -401,15 +401,15 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { return "true".equals(request.getProperty("recursive")); } - private static String asString(GlobalRouting.Status status) { - switch (status) { + private static String asString(RoutingStatus.Value value) { + switch (value) { case in: return "in"; case out: return "out"; default: return "unknown"; } } - private static String asString(GlobalRouting.Agent agent) { + private static String asString(RoutingStatus.Agent agent) { switch (agent) { case operator: return "operator"; case system: return "system"; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java index fdfb224b8ca..b86e3637fdb 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java @@ -100,9 +100,9 @@ public class RoutingPolicies { } /** Set the status of all global endpoints in given zone */ - public void setRoutingStatus(ZoneId zone, GlobalRouting.Status status) { + public void setRoutingStatus(ZoneId zone, RoutingStatus.Value value) { try (var lock = db.lockRoutingPolicies()) { - db.writeZoneRoutingPolicy(new ZoneRoutingPolicy(zone, GlobalRouting.status(status, GlobalRouting.Agent.operator, + db.writeZoneRoutingPolicy(new ZoneRoutingPolicy(zone, RoutingStatus.create(value, RoutingStatus.Agent.operator, controller.clock().instant()))); Map<ApplicationId, Map<RoutingPolicyId, RoutingPolicy>> allPolicies = db.readRoutingPolicies(); for (var applicationPolicies : allPolicies.values()) { @@ -112,13 +112,13 @@ public class RoutingPolicies { } /** Set the status of all global endpoints for given deployment */ - public void setRoutingStatus(DeploymentId deployment, GlobalRouting.Status status, GlobalRouting.Agent agent) { + public void setRoutingStatus(DeploymentId deployment, RoutingStatus.Value value, RoutingStatus.Agent agent) { try (var lock = db.lockRoutingPolicies()) { var policies = get(deployment.applicationId()); var newPolicies = new LinkedHashMap<>(policies); for (var policy : policies.values()) { if (!policy.appliesTo(deployment)) continue; - var newPolicy = policy.with(policy.status().with(GlobalRouting.status(status, agent, + var newPolicy = policy.with(policy.status().with(RoutingStatus.create(value, agent, controller.clock().instant()))); newPolicies.put(policy.id(), newPolicy); } @@ -248,10 +248,10 @@ public class RoutingPolicies { var newPolicy = new RoutingPolicy(policyId, loadBalancer.hostname().get(), loadBalancer.dnsZone(), allocation.instanceEndpointsOf(loadBalancer), allocation.applicationEndpointsOf(loadBalancer), - new Status(isActive(loadBalancer), GlobalRouting.DEFAULT_STATUS)); + new Status(isActive(loadBalancer), RoutingStatus.DEFAULT)); // Preserve global routing status for existing policy if (existingPolicy != null) { - newPolicy = newPolicy.with(newPolicy.status().with(existingPolicy.status().globalRouting())); + newPolicy = newPolicy.with(newPolicy.status().with(existingPolicy.status().routingStatus())); } updateZoneDnsOf(newPolicy); policies.put(newPolicy.id(), newPolicy); @@ -374,12 +374,12 @@ public class RoutingPolicies { return Collections.unmodifiableMap(routingTable); } - /** Returns whether the endpoints of given policy are globally configured {@link GlobalRouting.Status#out} */ + /** Returns whether the endpoints of given policy are globally configured {@link RoutingStatus.Value#out} */ private static boolean isConfiguredOut(ZoneRoutingPolicy zonePolicy, RoutingPolicy policy, Set<ZoneId> inactiveZones) { return isConfiguredOut(policy, Optional.of(zonePolicy), inactiveZones); } - /** Returns whether the endpoints of given policy are configured {@link GlobalRouting.Status#out} */ + /** Returns whether the endpoints of given policy are configured {@link RoutingStatus.Value#out} */ private static boolean isConfiguredOut(RoutingPolicy policy, Set<ZoneId> inactiveZones) { return isConfiguredOut(policy, Optional.empty(), inactiveZones); } @@ -389,8 +389,8 @@ public class RoutingPolicies { // - zone level (ZoneRoutingPolicy, only applies to global endpoints) // - deployment level (RoutingPolicy) // - application package level (deployment.xml) - return (zonePolicy.isPresent() && zonePolicy.get().globalRouting().status() == GlobalRouting.Status.out) || - policy.status().globalRouting().status() == GlobalRouting.Status.out || + return (zonePolicy.isPresent() && zonePolicy.get().globalRouting().value() == RoutingStatus.Value.out) || + policy.status().routingStatus().value() == RoutingStatus.Value.out || inactiveZones.contains(policy.id().zone()); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/GlobalRouting.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingStatus.java index 1b97397b7c2..58f0005d488 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/GlobalRouting.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingStatus.java @@ -5,34 +5,35 @@ import java.time.Instant; import java.util.Objects; /** - * Represents the global routing status of a {@link RoutingPolicy} or {@link ZoneRoutingPolicy}. This contains the - * time global routing status was last changed and who changed it. + * Represents the routing status of a {@link RoutingPolicy} or {@link ZoneRoutingPolicy}. + * + * This describes which agent last changed the routing status and at which time. * * This is immutable. * * @author mpolden */ -public class GlobalRouting { +public class RoutingStatus { - public static final GlobalRouting DEFAULT_STATUS = new GlobalRouting(Status.in, Agent.system, Instant.EPOCH); + public static final RoutingStatus DEFAULT = new RoutingStatus(Value.in, Agent.system, Instant.EPOCH); - private final Status status; + private final Value value; private final Agent agent; private final Instant changedAt; /** DO NOT USE. Public for serialization purposes */ - public GlobalRouting(Status status, Agent agent, Instant changedAt) { - this.status = Objects.requireNonNull(status, "status must be non-null"); + public RoutingStatus(Value value, Agent agent, Instant changedAt) { + this.value = Objects.requireNonNull(value, "value must be non-null"); this.agent = Objects.requireNonNull(agent, "agent must be non-null"); this.changedAt = Objects.requireNonNull(changedAt, "changedAt must be non-null"); } /** - * The wanted status of this. The system will try to set this status, but there are constraints that may lead to - * the effective status not matching this. See {@link RoutingPolicies}. + * The wanted value of this. The system will try to set this value, but there are constraints that may lead to + * the effective value not matching this. See {@link RoutingPolicies}. */ - public Status status() { - return status; + public Value value() { + return value; } /** The agent who last changed this */ @@ -49,28 +50,28 @@ public class GlobalRouting { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - GlobalRouting that = (GlobalRouting) o; - return status == that.status && + RoutingStatus that = (RoutingStatus) o; + return value == that.value && agent == that.agent && changedAt.equals(that.changedAt); } @Override public int hashCode() { - return Objects.hash(status, agent, changedAt); + return Objects.hash(value, agent, changedAt); } @Override public String toString() { - return "status " + status + ", changed by " + agent + " @ " + changedAt; + return "status " + value + ", changed by " + agent + " @ " + changedAt; } - public static GlobalRouting status(Status status, Agent agent, Instant instant) { - return new GlobalRouting(status, agent, instant); + public static RoutingStatus create(Value value, Agent agent, Instant instant) { + return new RoutingStatus(value, agent, instant); } // Used in serialization. Do not change. - public enum Status { + public enum Value { /** Status is determined by health checks **/ in, @@ -83,7 +84,7 @@ public class GlobalRouting { operator, tenant, system, - unknown, // For compatibility old values from /routing/v1 on config server, which may contain a specific user name. + unknown, // For compatibility old values from /routing/v1 on config server, which may contain a specific username. } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java index c0918a7cbb4..28ca6b7e1ac 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java @@ -13,12 +13,12 @@ import java.util.Objects; public class Status { private final boolean active; - private final GlobalRouting globalRouting; + private final RoutingStatus routingStatus; /** DO NOT USE. Public for serialization purposes */ - public Status(boolean active, GlobalRouting globalRouting) { + public Status(boolean active, RoutingStatus routingStatus) { this.active = active; - this.globalRouting = Objects.requireNonNull(globalRouting, "globalRouting must be non-null"); + this.routingStatus = Objects.requireNonNull(routingStatus, "globalRouting must be non-null"); } /** Returns whether this is considered active according to the load balancer status */ @@ -26,14 +26,14 @@ public class Status { return active; } - /** Return status of global routing */ - public GlobalRouting globalRouting() { - return globalRouting; + /** Return status of routing */ + public RoutingStatus routingStatus() { + return routingStatus; } - /** Returns a copy of this with global routing changed */ - public Status with(GlobalRouting globalRouting) { - return new Status(active, globalRouting); + /** Returns a copy of this with routing status changed */ + public Status with(RoutingStatus routingStatus) { + return new Status(active, routingStatus); } @Override @@ -42,12 +42,12 @@ public class Status { if (o == null || getClass() != o.getClass()) return false; Status status = (Status) o; return active == status.active && - globalRouting.equals(status.globalRouting); + routingStatus.equals(status.routingStatus); } @Override public int hashCode() { - return Objects.hash(active, globalRouting); + return Objects.hash(active, routingStatus); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/ZoneRoutingPolicy.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/ZoneRoutingPolicy.java index 8d7d17e9736..4a45d4e411a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/ZoneRoutingPolicy.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/ZoneRoutingPolicy.java @@ -15,11 +15,11 @@ import java.util.Objects; public class ZoneRoutingPolicy { private final ZoneId zone; - private final GlobalRouting globalRouting; + private final RoutingStatus routingStatus; - public ZoneRoutingPolicy(ZoneId zone, GlobalRouting globalRouting) { + public ZoneRoutingPolicy(ZoneId zone, RoutingStatus routingStatus) { this.zone = Objects.requireNonNull(zone, "zone must be non-null"); - this.globalRouting = Objects.requireNonNull(globalRouting, "globalRouting must be non-null"); + this.routingStatus = Objects.requireNonNull(routingStatus, "globalRouting must be non-null"); } /** The zone this applies to */ @@ -28,8 +28,8 @@ public class ZoneRoutingPolicy { } /** The status of global routing */ - public GlobalRouting globalRouting() { - return globalRouting; + public RoutingStatus globalRouting() { + return routingStatus; } @Override @@ -38,12 +38,12 @@ public class ZoneRoutingPolicy { if (o == null || getClass() != o.getClass()) return false; ZoneRoutingPolicy that = (ZoneRoutingPolicy) o; return zone.equals(that.zone) && - globalRouting.equals(that.globalRouting); + routingStatus.equals(that.routingStatus); } @Override public int hashCode() { - return Objects.hash(zone, globalRouting); + return Objects.hash(zone, routingStatus); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index f5173b7bdf4..7cb245bd82a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -35,7 +35,7 @@ import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.integration.ConfigServerMock; import com.yahoo.vespa.hosted.controller.maintenance.JobRunner; import com.yahoo.vespa.hosted.controller.maintenance.NameServiceDispatcher; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicyId; import com.yahoo.vespa.hosted.controller.routing.Status; @@ -245,7 +245,7 @@ public class DeploymentContext { Optional.empty(), Set.of(EndpointId.of("default")), Set.of(), - new Status(false, GlobalRouting.DEFAULT_STATUS))); + new Status(false, RoutingStatus.DEFAULT))); tester.controller().curator().writeRoutingPolicies(instanceId, policies); return this; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java index f4475038b17..b867e7639e2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java @@ -7,7 +7,7 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.EndpointId; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicyId; import com.yahoo.vespa.hosted.controller.routing.Status; @@ -43,15 +43,15 @@ public class RoutingPolicySerializerTest { Optional.of("zone1"), instanceEndpoints, applicationEndpoints, - new Status(true, GlobalRouting.DEFAULT_STATUS)), + new Status(true, RoutingStatus.DEFAULT)), id2, new RoutingPolicy(id2, HostName.from("long-and-ugly-name-2"), Optional.empty(), instanceEndpoints, Set.of(), new Status(false, - new GlobalRouting(GlobalRouting.Status.out, - GlobalRouting.Agent.tenant, + new RoutingStatus(RoutingStatus.Value.out, + RoutingStatus.Agent.tenant, Instant.ofEpochSecond(123))))); var serialized = serializer.fromSlime(owner, serializer.toSlime(policies)); assertEquals(policies.size(), serialized.size()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java index 4cc6bd93d01..234de233571 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.config.provision.zone.ZoneId; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.ZoneRoutingPolicy; import org.junit.Test; @@ -20,8 +20,8 @@ public class ZoneRoutingPolicySerializerTest { var serializer = new ZoneRoutingPolicySerializer(new RoutingPolicySerializer()); var zone = ZoneId.from("prod", "us-north-1"); var policy = new ZoneRoutingPolicy(zone, - GlobalRouting.status(GlobalRouting.Status.out, GlobalRouting.Agent.operator, - Instant.ofEpochMilli(123))); + RoutingStatus.create(RoutingStatus.Value.out, RoutingStatus.Agent.operator, + Instant.ofEpochMilli(123))); var serialized = serializer.fromSlime(zone, serializer.toSlime(policy)); assertEquals(policy, serialized); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index e204a8f820d..e322205f064 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -67,7 +67,7 @@ import com.yahoo.vespa.hosted.controller.notification.Notification; import com.yahoo.vespa.hosted.controller.notification.NotificationSource; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import com.yahoo.vespa.hosted.controller.routing.GlobalRouting; +import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.security.AthenzCredentials; import com.yahoo.vespa.hosted.controller.security.AthenzTenantSpec; import com.yahoo.vespa.hosted.controller.support.access.SupportAccessGrant; @@ -957,14 +957,14 @@ public class ApplicationApiTest extends ControllerContainerTest { new File("global-rotation-put.json")); // Status of routing policy is changed - assertGlobalRouting(app.deploymentIdIn(westZone), GlobalRouting.Status.out, GlobalRouting.Agent.tenant); + assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.out, RoutingStatus.Agent.tenant); // DELETE global rotation override status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation/override", DELETE) .userIdentity(USER_ID) .data("{\"reason\":\"unit-test\"}"), new File("global-rotation-delete.json")); - assertGlobalRouting(app.deploymentIdIn(westZone), GlobalRouting.Status.in, GlobalRouting.Agent.tenant); + assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.in, RoutingStatus.Agent.tenant); // SET global rotation override status by operator addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); @@ -972,7 +972,7 @@ public class ApplicationApiTest extends ControllerContainerTest { .userIdentity(HOSTED_VESPA_OPERATOR) .data("{\"reason\":\"unit-test\"}"), new File("global-rotation-put.json")); - assertGlobalRouting(app.deploymentIdIn(westZone), GlobalRouting.Status.out, GlobalRouting.Agent.operator); + assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.out, RoutingStatus.Agent.operator); } @Test @@ -1865,14 +1865,14 @@ public class ApplicationApiTest extends ControllerContainerTest { "Failed to deploy: Out of capacity"); } - private void assertGlobalRouting(DeploymentId deployment, GlobalRouting.Status status, GlobalRouting.Agent agent) { + private void assertGlobalRouting(DeploymentId deployment, RoutingStatus.Value value, RoutingStatus.Agent agent) { var changedAt = tester.controller().clock().instant(); var westPolicies = tester.controller().routing().policies().get(deployment); assertEquals(1, westPolicies.size()); var westPolicy = westPolicies.values().iterator().next(); - assertEquals(status, westPolicy.status().globalRouting().status()); - assertEquals(agent, westPolicy.status().globalRouting().agent()); - assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), westPolicy.status().globalRouting().changedAt()); + assertEquals(value, westPolicy.status().routingStatus().value()); + assertEquals(agent, westPolicy.status().routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), westPolicy.status().routingStatus().changedAt()); } private static class RequestBuilder implements Supplier<Request> { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java index 5fffa640811..943dd89efa7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java @@ -166,8 +166,8 @@ public class RoutingPoliciesTest { tester.policiesOf(context.instance().id()).size()); // A zone in shared region is set out - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), GlobalRouting.Status.out, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), RoutingStatus.Value.out, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); // Weight of inactive zone is set to zero @@ -177,16 +177,16 @@ public class RoutingPoliciesTest { // Other zone in shared region is set out. Entire record group for the region is removed as all zones in the // region are out (weight sum = 0) - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), GlobalRouting.Status.out, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), RoutingStatus.Value.out, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 1L)); // Everything is set back in - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), GlobalRouting.Status.in, - GlobalRouting.Agent.tenant); - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), GlobalRouting.Status.in, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), RoutingStatus.Value.in, + RoutingStatus.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), RoutingStatus.Value.in, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 1L, zone3, 1L, @@ -481,8 +481,8 @@ public class RoutingPoliciesTest { // Global routing status is overridden in one zone var changedAt = tester.controllerTester().clock().instant(); - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), GlobalRouting.Status.out, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.out, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); // Inactive zone is removed from global DNS record @@ -491,15 +491,15 @@ public class RoutingPoliciesTest { // Status details is stored in policy var policy1 = tester.routingPolicies().get(context.deploymentIdIn(zone1)).values().iterator().next(); - assertEquals(GlobalRouting.Status.out, policy1.status().globalRouting().status()); - assertEquals(GlobalRouting.Agent.tenant, policy1.status().globalRouting().agent()); - assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.status().globalRouting().changedAt()); + assertEquals(RoutingStatus.Value.out, policy1.status().routingStatus().value()); + assertEquals(RoutingStatus.Agent.tenant, policy1.status().routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.status().routingStatus().changedAt()); // Other zone remains in var policy2 = tester.routingPolicies().get(context.deploymentIdIn(zone2)).values().iterator().next(); - assertEquals(GlobalRouting.Status.in, policy2.status().globalRouting().status()); - assertEquals(GlobalRouting.Agent.system, policy2.status().globalRouting().agent()); - assertEquals(Instant.EPOCH, policy2.status().globalRouting().changedAt()); + assertEquals(RoutingStatus.Value.in, policy2.status().routingStatus().value()); + assertEquals(RoutingStatus.Agent.system, policy2.status().routingStatus().agent()); + assertEquals(Instant.EPOCH, policy2.status().routingStatus().changedAt()); // Next deployment does not affect status context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); @@ -510,15 +510,15 @@ public class RoutingPoliciesTest { // Deployment is set back in tester.controllerTester().clock().advance(Duration.ofHours(1)); changedAt = tester.controllerTester().clock().instant(); - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), GlobalRouting.Status.in, GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.in, RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1, zone2); tester.assertTargets(context.instanceId(), EndpointId.of("r1"), 0, zone1, zone2); policy1 = tester.routingPolicies().get(context.deploymentIdIn(zone1)).values().iterator().next(); - assertEquals(GlobalRouting.Status.in, policy1.status().globalRouting().status()); - assertEquals(GlobalRouting.Agent.tenant, policy1.status().globalRouting().agent()); - assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.status().globalRouting().changedAt()); + assertEquals(RoutingStatus.Value.in, policy1.status().routingStatus().value()); + assertEquals(RoutingStatus.Agent.tenant, policy1.status().routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.status().routingStatus().changedAt()); // Deployment is set out through a new deployment.xml var applicationPackage2 = applicationPackageBuilder() @@ -563,37 +563,37 @@ public class RoutingPoliciesTest { } // Set zone out - tester.routingPolicies().setRoutingStatus(zone2, GlobalRouting.Status.out); + tester.routingPolicies().setRoutingStatus(zone2, RoutingStatus.Value.out); context1.flushDnsUpdates(); tester.assertTargets(context1.instanceId(), EndpointId.defaultId(), 0, zone1); tester.assertTargets(context2.instanceId(), EndpointId.defaultId(), 0, zone1); for (var context : contexts) { var policies = tester.routingPolicies().get(context.instanceId()); - assertTrue("Global routing status for policy remains " + GlobalRouting.Status.in, + assertTrue("Global routing status for policy remains " + RoutingStatus.Value.in, policies.values().stream() .map(RoutingPolicy::status) - .map(Status::globalRouting) - .map(GlobalRouting::status) - .allMatch(status -> status == GlobalRouting.Status.in)); + .map(Status::routingStatus) + .map(RoutingStatus::value) + .allMatch(status -> status == RoutingStatus.Value.in)); } var changedAt = tester.controllerTester().clock().instant(); var zonePolicy = tester.controllerTester().controller().curator().readZoneRoutingPolicy(zone2); - assertEquals(GlobalRouting.Status.out, zonePolicy.globalRouting().status()); - assertEquals(GlobalRouting.Agent.operator, zonePolicy.globalRouting().agent()); + assertEquals(RoutingStatus.Value.out, zonePolicy.globalRouting().value()); + assertEquals(RoutingStatus.Agent.operator, zonePolicy.globalRouting().agent()); assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), zonePolicy.globalRouting().changedAt()); // Setting status per deployment does not affect status as entire zone is out - tester.routingPolicies().setRoutingStatus(context1.deploymentIdIn(zone2), GlobalRouting.Status.in, GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context1.deploymentIdIn(zone2), RoutingStatus.Value.in, RoutingStatus.Agent.tenant); context1.flushDnsUpdates(); tester.assertTargets(context1.instanceId(), EndpointId.defaultId(), 0, zone1); tester.assertTargets(context2.instanceId(), EndpointId.defaultId(), 0, zone1); // Set single deployment out - tester.routingPolicies().setRoutingStatus(context1.deploymentIdIn(zone2), GlobalRouting.Status.out, GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context1.deploymentIdIn(zone2), RoutingStatus.Value.out, RoutingStatus.Agent.tenant); context1.flushDnsUpdates(); // Set zone back in. Deployment set explicitly out, remains out, the rest are in - tester.routingPolicies().setRoutingStatus(zone2, GlobalRouting.Status.in); + tester.routingPolicies().setRoutingStatus(zone2, RoutingStatus.Value.in); context1.flushDnsUpdates(); tester.assertTargets(context1.instanceId(), EndpointId.defaultId(), 0, zone1); tester.assertTargets(context2.instanceId(), EndpointId.defaultId(), 0, zone1, zone2); @@ -647,41 +647,41 @@ public class RoutingPoliciesTest { tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1, zone2); // Global routing status is overridden for one deployment - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), GlobalRouting.Status.out, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.out, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone2); // Setting other deployment out implicitly sets all deployments in. Weight is set to zero, but that has no // impact on routing decisions when the weight sum is zero - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), GlobalRouting.Status.out, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), RoutingStatus.Value.out, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 0L, zone2, 0L)); // One inactive deployment is put back in. Global DNS record now points to the only active deployment - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), GlobalRouting.Status.in, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.in, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1); // Setting zone (containing active deployment) out puts all deployments in - tester.routingPolicies().setRoutingStatus(zone1, GlobalRouting.Status.out); + tester.routingPolicies().setRoutingStatus(zone1, RoutingStatus.Value.out); context.flushDnsUpdates(); - assertEquals(GlobalRouting.Status.out, tester.routingPolicies().get(zone1).globalRouting().status()); + assertEquals(RoutingStatus.Value.out, tester.routingPolicies().get(zone1).globalRouting().value()); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 0L, zone2, 0L)); // Setting zone back in removes the currently inactive deployment - tester.routingPolicies().setRoutingStatus(zone1, GlobalRouting.Status.in); + tester.routingPolicies().setRoutingStatus(zone1, RoutingStatus.Value.in); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1); // Inactive deployment is set in - tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), GlobalRouting.Status.in, - GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), RoutingStatus.Value.in, + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); for (var policy : tester.routingPolicies().get(context.instanceId()).values()) { - assertSame(GlobalRouting.Status.in, policy.status().globalRouting().status()); + assertSame(RoutingStatus.Value.in, policy.status().routingStatus().value()); } tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1, zone2); } @@ -763,12 +763,12 @@ public class RoutingPoliciesTest { mainZone2, 9)); // Changing routing status updates weight - tester.routingPolicies().setRoutingStatus(mainZone2, GlobalRouting.Status.out, RoutingStatus.Agent.tenant); + tester.routingPolicies().setRoutingStatus(mainZone2, RoutingStatus.Value.out, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a1"), ClusterSpec.Id.from("c1"), 1, Map.of(betaZone2, 1, mainZone2, 0)); - tester.routingPolicies().setRoutingStatus(mainZone2, GlobalRouting.Status.in, GlobalRouting.Agent.tenant); + tester.routingPolicies().setRoutingStatus(mainZone2, RoutingStatus.Value.in, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a1"), ClusterSpec.Id.from("c1"), 1, Map.of(betaZone2, 1, |