summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/EndpointsChecker.java38
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java4
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/NodeResourcesTest.java6
3 files changed, 29 insertions, 19 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 d9ced0177e5..c33a575e9b7 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
@@ -19,29 +19,37 @@ import java.util.Optional;
*/
public interface EndpointsChecker {
- record Endpoint(ClusterSpec.Id clusterName,
+ record Endpoint(ApplicationId applicationId,
+ ClusterSpec.Id clusterName,
HttpURL url,
Optional<InetAddress> ipAddress,
Optional<DomainName> canonicalName,
- boolean isPublic) { }
+ boolean isPublic,
+ CloudAccount account) { }
/** Status sorted by increasing readiness. */
enum Status { endpointsUnavailable, containersUnhealthy, available }
- record Availability(Status status, String message) { }
+ record Availability(Status status, String message) {
+ public static final Availability ready = new Availability(Status.available, "Endpoints are ready.");
+ }
interface HostNameResolver { Optional<InetAddress> resolve(DomainName hostName); }
interface CNameResolver { Optional<DomainName> resolve(DomainName hostName); }
- interface ContainerHealthChecker { boolean healthy(Endpoint endpoint); }
+ interface HealthChecker { Availability healthy(Endpoint endpoint); }
+
+ interface HealthCheckerProvider {
+ default HealthChecker getHealthChecker() { return __ -> Availability.ready; }
+ }
- static EndpointsChecker of(ContainerHealthChecker containerHealthChecker) {
- return zoneEndpoints -> endpointsAvailable(zoneEndpoints, EndpointsChecker::resolveHostName, EndpointsChecker::resolveCname, containerHealthChecker);
+ static EndpointsChecker of(HealthChecker healthChecker) {
+ return zoneEndpoints -> endpointsAvailable(zoneEndpoints, EndpointsChecker::resolveHostName, EndpointsChecker::resolveCname, healthChecker);
}
- static EndpointsChecker mock(HostNameResolver hostNameResolver, CNameResolver cNameResolver, ContainerHealthChecker containerHealthChecker) {
- return zoneEndpoints -> endpointsAvailable(zoneEndpoints, hostNameResolver, cNameResolver, containerHealthChecker);
+ static EndpointsChecker mock(HostNameResolver hostNameResolver, CNameResolver cNameResolver, HealthChecker healthChecker) {
+ return zoneEndpoints -> endpointsAvailable(zoneEndpoints, hostNameResolver, cNameResolver, healthChecker);
}
Availability endpointsAvailable(List<Endpoint> zoneEndpoints);
@@ -49,7 +57,7 @@ public interface EndpointsChecker {
private static Availability endpointsAvailable(List<Endpoint> zoneEndpoints,
HostNameResolver hostNameResolver,
CNameResolver cNameResolver,
- ContainerHealthChecker containerHealthChecker) {
+ HealthChecker healthChecker) {
if (zoneEndpoints.isEmpty())
return new Availability(Status.endpointsUnavailable, "Endpoints not yet ready.");
@@ -89,11 +97,13 @@ public interface EndpointsChecker {
}
}
- for (Endpoint endpoint : zoneEndpoints)
- if ( ! containerHealthChecker.healthy(endpoint))
- return new Availability(Status.containersUnhealthy, "Failed to get enough healthy responses from " + endpoint.url());
-
- return new Availability(Status.available, "Endpoints are ready");
+ Availability availability = Availability.ready;
+ for (Endpoint endpoint : zoneEndpoints) {
+ Availability candidate = healthChecker.healthy(endpoint);
+ if (candidate.status.compareTo(availability.status) < 0)
+ availability = candidate;
+ }
+ return availability;
}
/** Returns the IP address of the given host name, if any. */
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
index 8004d4dc951..9ca10091129 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
@@ -117,7 +117,7 @@ public class NodeResources {
}
public boolean isDefault() { return this == getDefault(); }
- public static Architecture getDefault() { return x86_64; }
+ public static Architecture getDefault() { return any; }
}
@@ -498,7 +498,7 @@ public class NodeResources {
if (cpu == 0) cpu = 0.5;
if (cpu == 2 && mem == 8 ) cpu = 1.5;
if (cpu == 2 && mem == 12 ) cpu = 2.3;
- return new NodeResources(cpu, mem, dsk, 0.3, DiskSpeed.getDefault(), StorageType.getDefault(), Architecture.x86_64);
+ return new NodeResources(cpu, mem, dsk, 0.3, DiskSpeed.getDefault(), StorageType.getDefault(), Architecture.any);
}
private static double validate(double value, String valueName) {
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeResourcesTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeResourcesTest.java
index 9351254034e..ae052c03556 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeResourcesTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeResourcesTest.java
@@ -20,11 +20,11 @@ public class NodeResourcesTest {
@Test
void testToString() {
- assertEquals("[vcpu: 1.0, memory: 10.0 Gb, disk 100.0 Gb, architecture: x86_64]",
+ assertEquals("[vcpu: 1.0, memory: 10.0 Gb, disk 100.0 Gb, architecture: any]",
new NodeResources(1., 10., 100., 0).toString());
- assertEquals("[vcpu: 0.3, memory: 3.3 Gb, disk 33.3 Gb, bandwidth: 0.3 Gbps, architecture: x86_64]",
+ assertEquals("[vcpu: 0.3, memory: 3.3 Gb, disk 33.3 Gb, bandwidth: 0.3 Gbps, architecture: any]",
new NodeResources(1 / 3., 10 / 3., 100 / 3., 0.3).toString());
- assertEquals("[vcpu: 0.7, memory: 9.0 Gb, disk 66.7 Gb, bandwidth: 0.7 Gbps, architecture: x86_64]",
+ assertEquals("[vcpu: 0.7, memory: 9.0 Gb, disk 66.7 Gb, bandwidth: 0.7 Gbps, architecture: any]",
new NodeResources(2 / 3., 8.97, 200 / 3., 0.67).toString());
}