aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-01-27 14:05:57 +0100
committerjonmv <venstad@gmail.com>2023-01-27 14:05:57 +0100
commit117b75ee2f3b4c20ab5982f57cab39e5489598ef (patch)
treef6bcb2c5a5eba24af427f5649f044d53a5222630 /config-provisioning
parentdc4e5e85caef5d5279649359a16310e825540486 (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.java45
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 {