diff options
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java | 19 |
1 files changed, 18 insertions, 1 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)); + } + } |