diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2023-11-08 20:53:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-08 20:53:30 +0100 |
commit | 3f64e725fc1a746dc2dc7cfc76e3c157f789614e (patch) | |
tree | e534732423e4c5860ea9c15d33fcff057f3a7c4b /node-repository | |
parent | da812cb1b70ea1df826d085937673d5ed43ead96 (diff) | |
parent | 0fac6f7366e4dd6648fac0bb32086d67bfb07e2c (diff) |
Merge pull request #29291 from vespa-engine/jonmv/preprovision-lbsv8.256.22
Break dependency cycle
Diffstat (limited to 'node-repository')
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<SharedHost> 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<LoadBalancerService> 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<UUID> idSeed); + } + } |