From 37d3328448f06483237cb29261c8f1ea922bbf96 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Fri, 5 Nov 2021 15:51:04 +0100 Subject: Move Status class to RoutingPolicy --- .../persistence/RoutingPolicySerializer.java | 5 +- .../persistence/ZoneRoutingPolicySerializer.java | 2 +- .../restapi/routing/RoutingApiHandler.java | 2 +- .../hosted/controller/routing/RoutingPolicies.java | 4 +- .../hosted/controller/routing/RoutingPolicy.java | 43 ++++++++++++++++++ .../vespa/hosted/controller/routing/Status.java | 53 ---------------------- .../controller/routing/ZoneRoutingPolicy.java | 7 +-- .../controller/deployment/DeploymentContext.java | 3 +- .../persistence/RoutingPolicySerializerTest.java | 11 ++--- .../controller/routing/RoutingPoliciesTest.java | 10 ++-- 10 files changed, 64 insertions(+), 76 deletions(-) delete mode 100644 controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java (limited to 'controller-server') 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 e80ee283aee..04d1a4c7433 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 @@ -14,7 +14,6 @@ import com.yahoo.vespa.hosted.controller.application.EndpointId; 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; import java.time.Instant; import java.util.Collections; @@ -88,8 +87,8 @@ public class RoutingPolicySerializer { SlimeUtils.optionalString(inspect.field(dnsZoneField)), instanceEndpoints, applicationEndpoints, - new Status(inspect.field(loadBalancerActiveField).asBool(), - globalRoutingFromSlime(inspect.field(globalRoutingField))))); + new RoutingPolicy.Status(inspect.field(loadBalancerActiveField).asBool(), + globalRoutingFromSlime(inspect.field(globalRoutingField))))); }); return Collections.unmodifiableMap(policies); } 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 957c9166d28..5932c54650b 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 @@ -37,7 +37,7 @@ public class ZoneRoutingPolicySerializer { public Slime toSlime(ZoneRoutingPolicy policy) { var slime = new Slime(); var root = slime.setObject(); - routingPolicySerializer.globalRoutingToSlime(policy.globalRouting(), root.setObject(GLOBAL_ROUTING_FIELD)); + routingPolicySerializer.globalRoutingToSlime(policy.routingStatus(), root.setObject(GLOBAL_ROUTING_FIELD)); return slime; } 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 e47dd45e4d7..50fccc19752 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 @@ -230,7 +230,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { private void toSlime(ZoneId zone, Cursor zoneObject) { if (controller.zoneRegistry().zones().directlyRouted().ids().contains(zone)) { var zonePolicy = controller.routing().policies().get(zone); - zoneStatusToSlime(zoneObject, zonePolicy.zone(), zonePolicy.globalRouting(), RoutingMethod.exclusive); + zoneStatusToSlime(zoneObject, zonePolicy.zone(), zonePolicy.routingStatus(), RoutingMethod.exclusive); } else { // Rotation status per zone only exposes in/out status, no agent or time of change. var in = controller.serviceRegistry().configServer().getGlobalRotationStatus(zone); 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 b86e3637fdb..af3171181a2 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 @@ -248,7 +248,7 @@ public class RoutingPolicies { var newPolicy = new RoutingPolicy(policyId, loadBalancer.hostname().get(), loadBalancer.dnsZone(), allocation.instanceEndpointsOf(loadBalancer), allocation.applicationEndpointsOf(loadBalancer), - new Status(isActive(loadBalancer), RoutingStatus.DEFAULT)); + new RoutingPolicy.Status(isActive(loadBalancer), RoutingStatus.DEFAULT)); // Preserve global routing status for existing policy if (existingPolicy != null) { newPolicy = newPolicy.with(newPolicy.status().with(existingPolicy.status().routingStatus())); @@ -389,7 +389,7 @@ 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().value() == RoutingStatus.Value.out) || + return (zonePolicy.isPresent() && zonePolicy.get().routingStatus().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/RoutingPolicy.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java index ba8bf9c88ba..be8e49cf661 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 @@ -142,4 +142,47 @@ public class RoutingPolicy { .routingMethod(routingMethod); } + /** The status of a routing policy */ + public static class Status { + + private final boolean active; + private final RoutingStatus routingStatus; + + /** DO NOT USE. Public for serialization purposes */ + public Status(boolean active, RoutingStatus routingStatus) { + this.active = active; + this.routingStatus = Objects.requireNonNull(routingStatus, "globalRouting 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); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Status status = (Status) o; + return active == status.active && + routingStatus.equals(status.routingStatus); + } + + @Override + public int hashCode() { + return Objects.hash(active, routingStatus); + } + + } + } 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 deleted file mode 100644 index 28ca6b7e1ac..00000000000 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/Status.java +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.routing; - -import java.util.Objects; - -/** - * Represents the status of a routing policy. - * - * This is immutable. - * - * @author mpolden - */ -public class Status { - - private final boolean active; - private final RoutingStatus routingStatus; - - /** DO NOT USE. Public for serialization purposes */ - public Status(boolean active, RoutingStatus routingStatus) { - this.active = active; - this.routingStatus = Objects.requireNonNull(routingStatus, "globalRouting 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); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Status status = (Status) o; - return active == status.active && - routingStatus.equals(status.routingStatus); - } - - @Override - public int hashCode() { - 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 4a45d4e411a..60605df1002 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 @@ -6,7 +6,8 @@ import com.yahoo.config.provision.zone.ZoneId; import java.util.Objects; /** - * Represents the DNS routing policy for a zone. This takes precedence over of an individual {@link RoutingPolicy}. + * Represents the DNS routing policy for a zone. This takes precedence over of a deployment-specific + * {@link RoutingPolicy}. * * This is immutable. * @@ -27,8 +28,8 @@ public class ZoneRoutingPolicy { return zone; } - /** The status of global routing */ - public RoutingStatus globalRouting() { + /** Routing status of this policy */ + public RoutingStatus routingStatus() { return 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 7cb245bd82a..b9c1e9f3e72 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 @@ -38,7 +38,6 @@ import com.yahoo.vespa.hosted.controller.maintenance.NameServiceDispatcher; 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; import javax.security.auth.x500.X500Principal; import java.math.BigInteger; @@ -245,7 +244,7 @@ public class DeploymentContext { Optional.empty(), Set.of(EndpointId.of("default")), Set.of(), - new Status(false, RoutingStatus.DEFAULT))); + new RoutingPolicy.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 b867e7639e2..2e36b8969ba 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 @@ -10,7 +10,6 @@ import com.yahoo.vespa.hosted.controller.application.EndpointId; 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; import org.junit.Test; import java.time.Instant; @@ -43,16 +42,16 @@ public class RoutingPolicySerializerTest { Optional.of("zone1"), instanceEndpoints, applicationEndpoints, - new Status(true, RoutingStatus.DEFAULT)), + new RoutingPolicy.Status(true, RoutingStatus.DEFAULT)), id2, new RoutingPolicy(id2, HostName.from("long-and-ugly-name-2"), Optional.empty(), instanceEndpoints, Set.of(), - new Status(false, - new RoutingStatus(RoutingStatus.Value.out, - RoutingStatus.Agent.tenant, - Instant.ofEpochSecond(123))))); + new RoutingPolicy.Status(false, + new RoutingStatus(RoutingStatus.Value.out, + RoutingStatus.Agent.tenant, + Instant.ofEpochSecond(123))))); var serialized = serializer.fromSlime(owner, serializer.toSlime(policies)); assertEquals(policies.size(), serialized.size()); for (Iterator it1 = policies.values().iterator(), it2 = serialized.values().iterator(); it1.hasNext();) { 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 943dd89efa7..afcc5e14d82 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 @@ -572,15 +572,15 @@ public class RoutingPoliciesTest { assertTrue("Global routing status for policy remains " + RoutingStatus.Value.in, policies.values().stream() .map(RoutingPolicy::status) - .map(Status::routingStatus) + .map(RoutingPolicy.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(RoutingStatus.Value.out, zonePolicy.globalRouting().value()); - assertEquals(RoutingStatus.Agent.operator, zonePolicy.globalRouting().agent()); - assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), zonePolicy.globalRouting().changedAt()); + assertEquals(RoutingStatus.Value.out, zonePolicy.routingStatus().value()); + assertEquals(RoutingStatus.Agent.operator, zonePolicy.routingStatus().agent()); + assertEquals(changedAt.truncatedTo(ChronoUnit.MILLIS), zonePolicy.routingStatus().changedAt()); // Setting status per deployment does not affect status as entire zone is out tester.routingPolicies().setRoutingStatus(context1.deploymentIdIn(zone2), RoutingStatus.Value.in, RoutingStatus.Agent.tenant); @@ -668,7 +668,7 @@ public class RoutingPoliciesTest { // Setting zone (containing active deployment) out puts all deployments in tester.routingPolicies().setRoutingStatus(zone1, RoutingStatus.Value.out); context.flushDnsUpdates(); - assertEquals(RoutingStatus.Value.out, tester.routingPolicies().get(zone1).globalRouting().value()); + assertEquals(RoutingStatus.Value.out, tester.routingPolicies().get(zone1).routingStatus().value()); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 0L, zone2, 0L)); // Setting zone back in removes the currently inactive deployment -- cgit v1.2.3