diff options
author | jonmv <venstad@gmail.com> | 2023-01-27 14:05:57 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-01-27 14:05:57 +0100 |
commit | 117b75ee2f3b4c20ab5982f57cab39e5489598ef (patch) | |
tree | f6bcb2c5a5eba24af427f5649f044d53a5222630 /config-provisioning | |
parent | dc4e5e85caef5d5279649359a16310e825540486 (diff) |
Check private endpoints from same-zone config server instead
Diffstat (limited to 'config-provisioning')
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java b/config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java index 94988293d07..d9ced0177e5 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java @@ -17,34 +17,39 @@ import java.util.Optional; /** * @author jonmv */ -public class EndpointsChecker { +public interface EndpointsChecker { - public record Endpoint(ClusterSpec.Id clusterName, - HttpURL url, - Optional<InetAddress> ipAddress, - Optional<DomainName> canonicalName, - boolean isPublic) { } + record Endpoint(ClusterSpec.Id clusterName, + HttpURL url, + Optional<InetAddress> ipAddress, + Optional<DomainName> canonicalName, + boolean isPublic) { } - public enum Status { available, endpointsUnavailable, containersUnhealthy } + /** Status sorted by increasing readiness. */ + enum Status { endpointsUnavailable, containersUnhealthy, available } - public record Availability(Status status, String message) { } + record Availability(Status status, String message) { } - public interface HostNameResolver { Optional<InetAddress> resolve(DomainName hostName); } + interface HostNameResolver { Optional<InetAddress> resolve(DomainName hostName); } - public interface CNameResolver { Optional<DomainName> resolve(DomainName hostName); } + interface CNameResolver { Optional<DomainName> resolve(DomainName hostName); } - public interface ContainerHealthChecker { boolean healthy(Endpoint endpoint); } + interface ContainerHealthChecker { boolean healthy(Endpoint endpoint); } - private EndpointsChecker() { } + static EndpointsChecker of(ContainerHealthChecker containerHealthChecker) { + return zoneEndpoints -> endpointsAvailable(zoneEndpoints, EndpointsChecker::resolveHostName, EndpointsChecker::resolveCname, containerHealthChecker); + } - public static Availability endpointsAvailable(List<Endpoint> zoneEndpoints, ContainerHealthChecker containerHealthChecker) { - return endpointsAvailable(zoneEndpoints, EndpointsChecker::resolveHostName, EndpointsChecker::resolveCname, containerHealthChecker); + static EndpointsChecker mock(HostNameResolver hostNameResolver, CNameResolver cNameResolver, ContainerHealthChecker containerHealthChecker) { + return zoneEndpoints -> endpointsAvailable(zoneEndpoints, hostNameResolver, cNameResolver, containerHealthChecker); } - public static Availability endpointsAvailable(List<Endpoint> zoneEndpoints, - HostNameResolver hostNameResolver, - CNameResolver cNameResolver, - ContainerHealthChecker containerHealthChecker) { + Availability endpointsAvailable(List<Endpoint> zoneEndpoints); + + private static Availability endpointsAvailable(List<Endpoint> zoneEndpoints, + HostNameResolver hostNameResolver, + CNameResolver cNameResolver, + ContainerHealthChecker containerHealthChecker) { if (zoneEndpoints.isEmpty()) return new Availability(Status.endpointsUnavailable, "Endpoints not yet ready."); @@ -92,7 +97,7 @@ public class EndpointsChecker { } /** Returns the IP address of the given host name, if any. */ - static Optional<InetAddress> resolveHostName(DomainName hostname) { + private static Optional<InetAddress> resolveHostName(DomainName hostname) { try { return Optional.of(InetAddress.getByName(hostname.value())); } @@ -102,7 +107,7 @@ public class EndpointsChecker { } /** Returns the host name of the given CNAME, if any. */ - static Optional<DomainName> resolveCname(DomainName endpoint) { + private static Optional<DomainName> resolveCname(DomainName endpoint) { try { InitialDirContext ctx = new InitialDirContext(); try { |