From 0fac6f7366e4dd6648fac0bb32086d67bfb07e2c Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 8 Nov 2023 20:46:51 +0100 Subject: Break dependency cycle --- .../yahoo/vespa/hosted/provision/NodeRepository.java | 19 ++++++++++++++++++- .../provisioning/ProvisionServiceProvider.java | 13 ++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index dfbe41e31d7..a4a4c42d9c1 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -7,6 +7,8 @@ import com.yahoo.concurrent.maintenance.JobControl; import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.EndpointsChecker.HealthChecker; +import com.yahoo.config.provision.EndpointsChecker.HealthCheckerProvider; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.Zone; import com.yahoo.config.provisioning.NodeRepositoryConfig; @@ -19,6 +21,8 @@ import com.yahoo.vespa.hosted.provision.Node.State; import com.yahoo.vespa.hosted.provision.applications.Applications; import com.yahoo.vespa.hosted.provision.archive.ArchiveUriManager; import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb; +import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; +import com.yahoo.vespa.hosted.provision.lb.LoadBalancerInstance; import com.yahoo.vespa.hosted.provision.lb.LoadBalancers; import com.yahoo.vespa.hosted.provision.maintenance.InfrastructureVersions; import com.yahoo.vespa.hosted.provision.node.Agent; @@ -34,6 +38,7 @@ import com.yahoo.vespa.hosted.provision.provisioning.FirmwareChecks; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; import com.yahoo.vespa.hosted.provision.provisioning.NodeResourceLimits; import com.yahoo.vespa.hosted.provision.provisioning.ProvisionServiceProvider; +import com.yahoo.vespa.hosted.provision.provisioning.ProvisionServiceProvider.ProtoHealthChecker; import com.yahoo.vespa.orchestrator.Orchestrator; import java.time.Clock; @@ -45,7 +50,7 @@ import java.util.Optional; * * @author bratseth */ -public class NodeRepository extends AbstractComponent { +public class NodeRepository extends AbstractComponent implements HealthCheckerProvider { private final CuratorDb db; private final Clock clock; @@ -67,6 +72,7 @@ public class NodeRepository extends AbstractComponent { private final MetricsDb metricsDb; private final Orchestrator orchestrator; private final int spareCount; + private final ProtoHealthChecker healthChecker; private final JacksonFlag sharedHosts; /** @@ -142,6 +148,7 @@ public class NodeRepository extends AbstractComponent { this.orchestrator = orchestrator; this.spareCount = spareCount; this.sharedHosts = PermanentFlags.SHARED_HOST.bindTo(flagSource()); + this.healthChecker = provisionServiceProvider.getHealthChecker(); nodes.rewrite(); } @@ -250,4 +257,14 @@ public class NodeRepository extends AbstractComponent { return Optional.of(image).filter(s -> !s.isEmpty()).map(DockerImage::fromString); } + @Override + public HealthChecker getHealthChecker() { + return endpoint -> healthChecker.healthy(endpoint, + loadBalancers.list(endpoint.applicationId()) + .cluster(endpoint.clusterName()) + .first() + .flatMap(LoadBalancer::instance) + .flatMap(LoadBalancerInstance::idSeed)); + } + } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java index 601a4008110..7b7971318cd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java @@ -1,17 +1,20 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; +import com.yahoo.config.provision.EndpointsChecker.Availability; +import com.yahoo.config.provision.EndpointsChecker.Endpoint; import com.yahoo.config.provision.EndpointsChecker.HealthCheckerProvider; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService; import java.util.Optional; +import java.util.UUID; /** * Injectable component that provides provision service for load-balancers and hosts * * @author freva */ -public interface ProvisionServiceProvider extends HealthCheckerProvider { +public interface ProvisionServiceProvider { Optional getLoadBalancerService(); @@ -19,4 +22,12 @@ public interface ProvisionServiceProvider extends HealthCheckerProvider { HostResourcesCalculator getHostResourcesCalculator(); + default ProtoHealthChecker getHealthChecker() { + return (endpoint, idSeed) -> Availability.ready; + } + + interface ProtoHealthChecker { + Availability healthy(Endpoint endpoint, Optional idSeed); + } + } -- cgit v1.2.3