diff options
author | Morten Tokle <mortent@yahooinc.com> | 2023-06-07 09:29:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-07 09:29:59 +0200 |
commit | 962f3358b57857aaa7091a87b749ccdf506ab0f4 (patch) | |
tree | 3b4f022052a8989eeab7eb7902b80fa15464c853 /controller-server | |
parent | dbe7dddf456e56d59c085a00eaa3e34bb4169c76 (diff) | |
parent | 1e55cb6ec6422ad9f3e2b7b656756f3cf1d148b4 (diff) |
Merge pull request #27314 from vespa-engine/mpolden/ignore-non-active-lbs
Avoid maintaining routing policies for non-active load balancers
Diffstat (limited to 'controller-server')
11 files changed, 66 insertions, 115 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java index c76616c6d2c..9e0a94f3e85 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java @@ -112,7 +112,6 @@ public class RoutingController { Set<Endpoint> endpoints = new LinkedHashSet<>(); // To discover the cluster name for a zone-scoped endpoint, we need to read routing policies for (var policy : routingPolicies.read(deployment)) { - if (!policy.status().isActive()) continue; RoutingMethod routingMethod = controller.zoneRegistry().routingMethod(policy.id().zone()); endpoints.addAll(policy.zoneEndpointsIn(controller.system(), routingMethod)); endpoints.add(policy.regionEndpointIn(controller.system(), routingMethod)); 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 47b27aac79a..bc977baf048 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 @@ -67,8 +67,7 @@ public class RoutingPolicySerializer { policy.instanceEndpoints().forEach(endpointId -> instanceEndpointsArray.addString(endpointId.id())); var applicationEndpointsArray = policyObject.setArray(applicationEndpointsField); policy.applicationEndpoints().forEach(endpointId -> applicationEndpointsArray.addString(endpointId.id())); - policyObject.setBool(loadBalancerActiveField, policy.status().isActive()); - globalRoutingToSlime(policy.status().routingStatus(), policyObject.setObject(globalRoutingField)); + globalRoutingToSlime(policy.routingStatus(), policyObject.setObject(globalRoutingField)); if ( ! policy.isPublic()) policyObject.setBool(privateOnlyField, true); }); return slime; @@ -93,8 +92,7 @@ public class RoutingPolicySerializer { SlimeUtils.optionalString(inspect.field(dnsZoneField)), instanceEndpoints, applicationEndpoints, - new RoutingPolicy.Status(inspect.field(loadBalancerActiveField).asBool(), - globalRoutingFromSlime(inspect.field(globalRoutingField))), + routingStatusFromSlime(inspect.field(globalRoutingField)), isPublic)); }); return Collections.unmodifiableList(policies); @@ -106,7 +104,7 @@ public class RoutingPolicySerializer { object.setLong(changedAtField, routingStatus.changedAt().toEpochMilli()); } - public RoutingStatus globalRoutingFromSlime(Inspector object) { + public RoutingStatus routingStatusFromSlime(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); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializer.java index 5932c54650b..d6342bc355f 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializer.java @@ -31,7 +31,7 @@ public class ZoneRoutingPolicySerializer { public ZoneRoutingPolicy fromSlime(ZoneId zone, Slime slime) { var root = slime.get(); - return new ZoneRoutingPolicy(zone, routingPolicySerializer.globalRoutingFromSlime(root.field(GLOBAL_ROUTING_FIELD))); + return new ZoneRoutingPolicy(zone, routingPolicySerializer.routingStatusFromSlime(root.field(GLOBAL_ROUTING_FIELD))); } public Slime toSlime(ZoneRoutingPolicy policy) { 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 59f886bdea6..2726c778218 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 @@ -107,7 +107,7 @@ public class RoutingPolicies { ApplicationId instance = deployment.applicationId(); List<LoadBalancer> loadBalancers = controller.serviceRegistry().configServer() .getLoadBalancers(instance, deployment.zoneId()); - LoadBalancerAllocation allocation = new LoadBalancerAllocation(loadBalancers, deployment, deploymentSpec); + LoadBalancerAllocation allocation = new LoadBalancerAllocation(deployment, deploymentSpec, loadBalancers); Set<ZoneId> inactiveZones = inactiveZones(instance, deploymentSpec); Optional<TenantAndApplicationId> owner = ownerOf(allocation); try (var lock = db.lockRoutingPolicies()) { @@ -147,8 +147,7 @@ public class RoutingPolicies { RoutingPolicyList deploymentPolicies = applicationPolicies.deployment(deployment); Map<RoutingPolicyId, RoutingPolicy> updatedPolicies = new LinkedHashMap<>(applicationPolicies.asMap()); for (var policy : deploymentPolicies) { - var newPolicy = policy.with(policy.status().with(RoutingStatus.create(value, agent, - controller.clock().instant()))); + var newPolicy = policy.with(RoutingStatus.create(value, agent, controller.clock().instant())); updatedPolicies.put(policy.id(), newPolicy); } @@ -360,11 +359,11 @@ public class RoutingPolicies { var newPolicy = new RoutingPolicy(policyId, loadBalancer.hostname(), loadBalancer.ipAddress(), dnsZone, allocation.instanceEndpointsOf(loadBalancer), allocation.applicationEndpointsOf(loadBalancer), - new RoutingPolicy.Status(isActive(loadBalancer), RoutingStatus.DEFAULT), + RoutingStatus.DEFAULT, loadBalancer.isPublic()); // Preserve global routing status for existing policy if (existingPolicy != null) { - newPolicy = newPolicy.with(newPolicy.status().with(existingPolicy.status().routingStatus())); + newPolicy = newPolicy.with(existingPolicy.routingStatus()); } updateZoneDnsOf(newPolicy, loadBalancer, allocation.deployment); policies.put(newPolicy.id(), newPolicy); @@ -553,19 +552,10 @@ public class RoutingPolicies { // - deployment level (RoutingPolicy) // - application package level (deployment.xml) return zonePolicy.routingStatus().value() == RoutingStatus.Value.out || - policy.status().routingStatus().value() == RoutingStatus.Value.out || + policy.routingStatus().value() == RoutingStatus.Value.out || inactiveZones.contains(policy.id().zone()); } - private static boolean isActive(LoadBalancer loadBalancer) { - return switch (loadBalancer.state()) { - // Count reserved as active as we want callers (application API) to see the endpoint as early - // as possible - case reserved, active -> true; - default -> false; - }; - } - /** Represents records for a region-wide endpoint */ private static class RegionEndpoint { @@ -604,20 +594,27 @@ public class RoutingPolicies { } - /** Load balancers allocated to a deployment */ - private static class LoadBalancerAllocation { + /** Active load balancers allocated to a deployment */ + record LoadBalancerAllocation(DeploymentId deployment, + DeploymentSpec deploymentSpec, + List<LoadBalancer> loadBalancers) { - private final DeploymentId deployment; - private final List<LoadBalancer> loadBalancers; - private final DeploymentSpec deploymentSpec; - - private LoadBalancerAllocation(List<LoadBalancer> loadBalancers, DeploymentId deployment, - DeploymentSpec deploymentSpec) { + public LoadBalancerAllocation(DeploymentId deployment, + DeploymentSpec deploymentSpec, + List<LoadBalancer> loadBalancers) { this.deployment = deployment; - this.loadBalancers = List.copyOf(loadBalancers); + this.loadBalancers = loadBalancers.stream().filter(LoadBalancerAllocation::isActive).toList(); this.deploymentSpec = deploymentSpec; } + private static boolean isActive(LoadBalancer loadBalancer) { + return switch (loadBalancer.state()) { + // Count reserved as active as we want to do DNS updates as early as possible + case reserved, active -> true; + default -> false; + }; + } + /** Returns the policy IDs of the load balancers contained in this */ private Set<RoutingPolicyId> asPolicyIds() { return loadBalancers.stream() @@ -637,7 +634,7 @@ public class RoutingPolicies { return Set.of(); } if (instanceSpec.get().globalServiceId().filter(id -> id.equals(loadBalancer.cluster().value())).isPresent()) { - // Legacy assignment always has the default endpoint Id + // Legacy assignment always has the default endpoint ID return Set.of(EndpointId.defaultId()); } return instanceSpec.get().endpoints().stream() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java index 38ecff452c8..b4d83b7ded6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java @@ -28,19 +28,19 @@ public record RoutingPolicy(RoutingPolicyId id, Optional<String> dnsZone, Set<EndpointId> instanceEndpoints, Set<EndpointId> applicationEndpoints, - Status status, + RoutingStatus routingStatus, boolean isPublic) { /** DO NOT USE. Public for serialization purposes */ public RoutingPolicy(RoutingPolicyId id, Optional<DomainName> canonicalName, Optional<String> ipAddress, Optional<String> dnsZone, - Set<EndpointId> instanceEndpoints, Set<EndpointId> applicationEndpoints, Status status, boolean isPublic) { + Set<EndpointId> instanceEndpoints, Set<EndpointId> applicationEndpoints, RoutingStatus routingStatus, boolean isPublic) { this.id = Objects.requireNonNull(id, "id must be non-null"); this.canonicalName = Objects.requireNonNull(canonicalName, "canonicalName must be non-null"); this.ipAddress = Objects.requireNonNull(ipAddress, "ipAddress must be non-null"); this.dnsZone = Objects.requireNonNull(dnsZone, "dnsZone must be non-null"); this.instanceEndpoints = ImmutableSortedSet.copyOf(Objects.requireNonNull(instanceEndpoints, "instanceEndpoints must be non-null")); this.applicationEndpoints = ImmutableSortedSet.copyOf(Objects.requireNonNull(applicationEndpoints, "applicationEndpoints must be non-null")); - this.status = Objects.requireNonNull(status, "status must be non-null"); + this.routingStatus = Objects.requireNonNull(routingStatus, "status must be non-null"); this.isPublic = isPublic; if (canonicalName.isEmpty() == ipAddress.isEmpty()) @@ -82,9 +82,9 @@ public record RoutingPolicy(RoutingPolicyId id, return applicationEndpoints; } - /** Returns the status of this */ - public Status status() { - return status; + /** Return status of routing */ + public RoutingStatus routingStatus() { + return routingStatus; } /** Returns whether this has a load balancer which is available from public internet. */ @@ -98,9 +98,9 @@ public record RoutingPolicy(RoutingPolicyId id, id.zone().equals(deployment.zoneId()); } - /** Returns a copy of this with status set to given status */ - public RoutingPolicy with(Status status) { - return new RoutingPolicy(id, canonicalName, ipAddress, dnsZone, instanceEndpoints, applicationEndpoints, status, isPublic); + /** Returns a copy of this with routing status set to given status */ + public RoutingPolicy with(RoutingStatus routingStatus) { + return new RoutingPolicy(id, canonicalName, ipAddress, dnsZone, instanceEndpoints, applicationEndpoints, routingStatus, isPublic); } /** Returns the zone endpoints of this */ @@ -140,30 +140,4 @@ public record RoutingPolicy(RoutingPolicyId id, .on(Port.fromRoutingMethod(routingMethod)) .routingMethod(routingMethod); } - - /** The status of a routing policy */ - public record Status(boolean active, RoutingStatus routingStatus) { - - /** DO NOT USE. Public for serialization purposes */ - public Status { - Objects.requireNonNull(routingStatus, "routingStatus must be non-null"); - } - - /** Returns whether this is considered active according to the load balancer status */ - public boolean isActive() { - return active; - } - - /** Return status of routing */ - public RoutingStatus routingStatus() { - return routingStatus; - } - - /** Returns a copy of this with routing status changed */ - public Status with(RoutingStatus routingStatus) { - return new Status(active, routingStatus); - } - - } - } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/context/DeploymentRoutingContext.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/context/DeploymentRoutingContext.java index 0b1411d5bc3..2a7e4cb5c14 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/context/DeploymentRoutingContext.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/context/DeploymentRoutingContext.java @@ -146,8 +146,7 @@ public abstract class DeploymentRoutingContext implements RoutingContext { // first matching policy here return controller.policies().read(deployment) .first() - .map(RoutingPolicy::status) - .map(RoutingPolicy.Status::routingStatus) + .map(RoutingPolicy::routingStatus) .orElse(RoutingStatus.DEFAULT); } 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 da982fa67a8..967a821c506 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 @@ -15,7 +15,6 @@ import com.yahoo.security.KeyUtils; import com.yahoo.security.SignatureAlgorithm; import com.yahoo.security.X509CertificateBuilder; import com.yahoo.vespa.hosted.controller.Application; -import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.Instance; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; @@ -53,7 +52,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; -import java.util.OptionalLong; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Supplier; @@ -270,22 +268,6 @@ public class DeploymentContext { } } - /** Add a routing policy for this in given zone, with status set to inactive */ - public DeploymentContext addInactiveRoutingPolicy(ZoneId zone) { - var clusterId = "default-inactive"; - var id = new RoutingPolicyId(instanceId, Id.from(clusterId), zone); - var policies = new LinkedHashMap<>(tester.controller().routing().policies().read(instanceId).asMap()); - policies.put(id, new RoutingPolicy(id, Optional.of(HostName.of("lb-host")), - Optional.empty(), - Optional.empty(), - Set.of(EndpointId.of("default")), - Set.of(), - new RoutingPolicy.Status(false, RoutingStatus.DEFAULT), - true)); - tester.controller().curator().writeRoutingPolicies(instanceId, List.copyOf(policies.values())); - return this; - } - /** Submit given application package for deployment */ public DeploymentContext resubmit(ApplicationPackage applicationPackage) { return submit(applicationPackage, Optional.of(defaultSourceRevision), salt.get(), 0); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index d542c06b5bf..fe74e305b63 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -103,7 +103,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer private final Map<DeploymentId, TestReport> testReport = new HashMap<>(); private final Map<DeploymentId, CloudAccount> cloudAccounts = new HashMap<>(); private final Map<DeploymentId, List<X509Certificate>> additionalCertificates = new HashMap<>(); - private List<SearchNodeMetrics> searchnodeMetrics; + private List<SearchNodeMetrics> searchNodeMetrics; private Version lastPrepareVersion = null; private Consumer<ApplicationId> prepareException = null; @@ -308,7 +308,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer } public void setProtonMetrics(List<SearchNodeMetrics> searchnodeMetrics) { - this.searchnodeMetrics = searchnodeMetrics; + this.searchNodeMetrics = searchnodeMetrics; } public void deferLoadBalancerProvisioningIn(Set<Environment> environments) { @@ -499,7 +499,15 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer applications.remove(deployment); serviceStatus.remove(deployment); - removeLoadBalancers(deployment.applicationId(), deployment.zoneId()); + + // This simulates what a real config server does: It deactivates the LB. Actual removal happens in the background + loadBalancers.computeIfPresent(deployment.zoneId(), (k, old) -> + old.stream().map(lb -> lb.application().equals(deployment.applicationId()) + ? new LoadBalancer(lb.id(), lb.application(), lb.cluster(), lb.hostname(), lb.ipAddress(), + LoadBalancer.State.inactive, lb.dnsZone(), lb.cloudAccount(), + lb.service(), lb.isPublic()) + : lb) + .collect(Collectors.toCollection(LinkedHashSet::new))); } @Override @@ -509,7 +517,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer @Override public List<SearchNodeMetrics> getSearchNodeMetrics(DeploymentId deployment) { - return this.searchnodeMetrics; + return this.searchNodeMetrics; } @Override 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 8e0b1dd1d4e..c1267ad5edf 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 @@ -43,7 +43,7 @@ public class RoutingPolicySerializerTest { Optional.of("zone1"), Set.of(), Set.of(), - new RoutingPolicy.Status(true, RoutingStatus.DEFAULT), + RoutingStatus.DEFAULT, false), new RoutingPolicy(id2, Optional.of(HostName.of("long-and-ugly-name-2")), @@ -51,10 +51,9 @@ public class RoutingPolicySerializerTest { Optional.empty(), instanceEndpoints, Set.of(), - new RoutingPolicy.Status(false, - new RoutingStatus(RoutingStatus.Value.out, - RoutingStatus.Agent.tenant, - Instant.ofEpochSecond(123))), + new RoutingStatus(RoutingStatus.Value.out, + RoutingStatus.Agent.tenant, + Instant.ofEpochSecond(123)), true), new RoutingPolicy(id1, Optional.empty(), @@ -62,7 +61,7 @@ public class RoutingPolicySerializerTest { Optional.of("zone2"), instanceEndpoints, applicationEndpoints, - new RoutingPolicy.Status(true, RoutingStatus.DEFAULT), + RoutingStatus.DEFAULT, true)); var serialized = serializer.fromSlime(owner, serializer.toSlime(policies)); assertEquals(policies.size(), serialized.size()); @@ -75,7 +74,7 @@ public class RoutingPolicySerializerTest { assertEquals(expected.dnsZone(), actual.dnsZone()); assertEquals(expected.instanceEndpoints(), actual.instanceEndpoints()); assertEquals(expected.applicationEndpoints(), actual.applicationEndpoints()); - assertEquals(expected.status(), actual.status()); + assertEquals(expected.routingStatus(), actual.routingStatus()); assertEquals(expected.isPublic(), actual.isPublic()); } } 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 0d1c2c5487f..ac16aa727d5 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 @@ -1625,7 +1625,6 @@ public class ApplicationApiTest extends ControllerContainerTest { .region(zone.region().value()) .build(); app.submit(applicationPackage).deploy(); - app.addInactiveRoutingPolicy(zone); // GET application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", GET) 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 24d5e02240d..772877de8e3 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 @@ -309,10 +309,7 @@ public class RoutingPoliciesTest { // Remove app2 completely tester.controllerTester().controller().applications().requireInstance(context2.instanceId()).deployments().keySet() - .forEach(zone -> { - tester.controllerTester().configServer().removeLoadBalancers(context2.instanceId(), zone); - tester.controllerTester().controller().applications().deactivate(context2.instanceId(), zone); - }); + .forEach(zone -> tester.controllerTester().controller().applications().deactivate(context2.instanceId(), zone)); context2.flushDnsUpdates(); expectedRecords = Set.of( "c0.app1.tenant1.us-west-1.vespa.oath.cloud", @@ -573,15 +570,15 @@ public class RoutingPoliciesTest { // Status details is stored in policy var policy1 = tester.routingPolicies().read(context.deploymentIdIn(zone1)).first().get(); - 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()); + assertEquals(RoutingStatus.Value.out, policy1.routingStatus().value()); + assertEquals(RoutingStatus.Agent.tenant, policy1.routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.routingStatus().changedAt()); // Other zone remains in var policy2 = tester.routingPolicies().read(context.deploymentIdIn(zone2)).first().get(); - assertEquals(RoutingStatus.Value.in, policy2.status().routingStatus().value()); - assertEquals(RoutingStatus.Agent.system, policy2.status().routingStatus().agent()); - assertEquals(Instant.EPOCH, policy2.status().routingStatus().changedAt()); + assertEquals(RoutingStatus.Value.in, policy2.routingStatus().value()); + assertEquals(RoutingStatus.Agent.system, policy2.routingStatus().agent()); + assertEquals(Instant.EPOCH, policy2.routingStatus().changedAt()); // Next deployment does not affect status context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); @@ -598,9 +595,9 @@ public class RoutingPoliciesTest { tester.assertTargets(context.instanceId(), EndpointId.of("r1"), 0, zone1, zone2); policy1 = tester.routingPolicies().read(context.deploymentIdIn(zone1)).first().get(); - 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()); + assertEquals(RoutingStatus.Value.in, policy1.routingStatus().value()); + assertEquals(RoutingStatus.Agent.tenant, policy1.routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), policy1.routingStatus().changedAt()); // Deployment is set out through a new deployment.xml var applicationPackage2 = applicationPackageBuilder() @@ -652,8 +649,7 @@ public class RoutingPoliciesTest { for (var context : contexts) { var policies = tester.routingPolicies().read(context.instanceId()); assertTrue(policies.asList().stream() - .map(RoutingPolicy::status) - .map(RoutingPolicy.Status::routingStatus) + .map(RoutingPolicy::routingStatus) .map(RoutingStatus::value) .allMatch(status -> status == RoutingStatus.Value.in), "Global routing status for policy remains " + RoutingStatus.Value.in); @@ -763,7 +759,7 @@ public class RoutingPoliciesTest { RoutingStatus.Agent.tenant); context.flushDnsUpdates(); for (var policy : tester.routingPolicies().read(context.instanceId())) { - assertSame(RoutingStatus.Value.in, policy.status().routingStatus().value()); + assertSame(RoutingStatus.Value.in, policy.routingStatus().value()); } tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1, zone2); } |