aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2023-11-08 20:53:30 +0100
committerGitHub <noreply@github.com>2023-11-08 20:53:30 +0100
commit3f64e725fc1a746dc2dc7cfc76e3c157f789614e (patch)
treee534732423e4c5860ea9c15d33fcff057f3a7c4b
parentda812cb1b70ea1df826d085937673d5ed43ead96 (diff)
parent0fac6f7366e4dd6648fac0bb32086d67bfb07e2c (diff)
Merge pull request #29291 from vespa-engine/jonmv/preprovision-lbsv8.256.22
Break dependency cycle
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java19
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java13
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);
+ }
+
}