diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-28 23:34:16 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-28 23:34:16 +0100 |
commit | 159a116ae750968719de8a63052431ea0de11a31 (patch) | |
tree | 03cb3b040d1c8fe3693ef522599f90c1fd1f989e | |
parent | 7d515c403035aeef430507acb6a166b6cfdba9ee (diff) |
Only build part of application instance for host resource
9 files changed, 28 insertions, 53 deletions
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java index acf3fe7f9b2..2978b091548 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java @@ -4,9 +4,7 @@ package com.yahoo.vespa.orchestrator; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.applicationmodel.ServiceInstance; -import java.util.List; import java.util.Optional; import java.util.Set; @@ -18,5 +16,10 @@ public interface InstanceLookupService { Optional<ApplicationInstance> findInstanceById(ApplicationInstanceReference applicationInstanceReference); Optional<ApplicationInstance> findInstanceByHost(HostName hostName); Set<ApplicationInstanceReference> knownInstances(); - List<ServiceInstance> findServicesOnHost(HostName hostName); + + /** + * Returns an application instance that may not contain more services and clusters than + * those related to the host. + */ + Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname); } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java index 6639a3032dc..d9d41cdaecc 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java @@ -105,8 +105,10 @@ public class OrchestratorImpl implements Orchestrator { @Override public Host getHost(HostName hostName) throws HostNameNotFoundException { - ApplicationInstance applicationInstance = getApplicationInstance(hostName); - instanceLookupService.findServicesOnHost(hostName); + ApplicationInstance applicationInstance = instanceLookupService + .findInstancePossiblyNarrowedToHost(hostName) + .orElseThrow(() -> new HostNameNotFoundException(hostName)); + List<ServiceInstance> serviceInstances = applicationInstance .serviceClusters().stream() .flatMap(cluster -> cluster.serviceInstances().stream()) @@ -114,7 +116,6 @@ public class OrchestratorImpl implements Orchestrator { .collect(Collectors.toList()); HostInfo hostInfo = statusService.getHostInfo(applicationInstance.reference(), hostName); - HostStatus hostStatus = getNodeStatus(applicationInstance.reference(), hostName); return new Host(hostName, hostInfo, applicationInstance.reference(), serviceInstances); } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java index 30f5233d0c6..d7a630707b8 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java @@ -5,10 +5,8 @@ import com.google.inject.Inject; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.applicationmodel.ServiceInstance; import com.yahoo.vespa.service.monitor.ServiceMonitor; -import java.util.List; import java.util.Optional; import java.util.Set; @@ -42,7 +40,7 @@ public class ServiceMonitorInstanceLookupService implements InstanceLookupServic } @Override - public List<ServiceInstance> findServicesOnHost(HostName hostName) { - return serviceMonitor.getServiceInstancesOn(hostName); + public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { + return serviceMonitor.getApplicationNarrowedTo(hostname); } } diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java index 07acc0dad81..7a62a29dff2 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java @@ -17,7 +17,6 @@ import com.yahoo.vespa.orchestrator.model.NodeGroup; import com.yahoo.vespa.orchestrator.model.VespaModelUtil; import java.util.HashSet; -import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -156,13 +155,8 @@ public class DummyInstanceLookupService implements InstanceLookupService { } @Override - public List<ServiceInstance> findServicesOnHost(HostName hostName) { - return apps.stream() - .flatMap(application -> application.serviceClusters().stream()) - .flatMap(cluster -> cluster.serviceInstances().stream()) - .filter(service -> service.hostName().equals(hostName)) - .sorted() - .collect(Collectors.toList()); + public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { + return findInstanceByHost(hostname); } public static Set<HostName> getContentHosts(ApplicationInstanceReference appRef) { diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java index a84f99dff34..4a7be5f3ab6 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java @@ -112,8 +112,8 @@ public class HostResourceTest { } @Override - public List<ServiceInstance> findServicesOnHost(HostName hostName) { - return List.of(); + public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { + return Optional.empty(); } }; diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java index 86bb892b162..cce14c12195 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java @@ -6,7 +6,6 @@ import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.applicationmodel.ServiceInstance; import com.yahoo.vespa.service.monitor.ServiceModel; import com.yahoo.vespa.service.monitor.ServiceStatusProvider; @@ -55,21 +54,10 @@ public class ModelGenerator { return generator.makeApplicationInstance(serviceStatusProvider); } - public List<ServiceInstance> toServices(ApplicationInfo applicationInfo, - HostName hostname, - ServiceStatusProvider serviceStatusProvider) { + public ApplicationInstance toApplicationNarrowedToHost(ApplicationInfo applicationInfo, + HostName hostname, + ServiceStatusProvider serviceStatusProvider) { var generator = new ApplicationInstanceGenerator(applicationInfo, zone); - ApplicationInstance applicationInstance = generator.makeApplicationInstanceLimitedTo( - hostname, serviceStatusProvider); - - List<ServiceInstance> serviceInstances = applicationInstance.serviceClusters().stream() - .flatMap(cluster -> cluster.serviceInstances().stream()) - .collect(Collectors.toList()); - - if (serviceInstances.size() > 0) { - return serviceInstances; - } - - return List.of(); + return generator.makeApplicationInstanceLimitedTo(hostname, serviceStatusProvider); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceModelProvider.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceModelProvider.java index d3d7c151a9b..35c72ba03fb 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceModelProvider.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceModelProvider.java @@ -72,14 +72,15 @@ public class ServiceModelProvider implements ServiceMonitor { } @Override - public List<ServiceInstance> getServiceInstancesOn(HostName hostname) { + public Optional<ApplicationInstance> getApplicationNarrowedTo(HostName hostname) { Optional<ApplicationInfo> applicationInfo = duperModelManager.getApplicationInfo(toConfigProvisionHostName(hostname)); if (applicationInfo.isEmpty()) { - return List.of(); + return Optional.empty(); } - return modelGenerator.toServices(applicationInfo.get(), hostname, serviceStatusProvider); + return Optional.of(modelGenerator.toApplicationNarrowedToHost( + applicationInfo.get(), hostname, serviceStatusProvider)); } @Override diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java index a37a52f775e..d3297d711ff 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java @@ -69,8 +69,8 @@ public class ServiceMonitorImpl implements ServiceMonitor { } @Override - public List<ServiceInstance> getServiceInstancesOn(HostName hostname) { - return delegate.getServiceInstancesOn(hostname); + public Optional<ApplicationInstance> getApplicationNarrowedTo(HostName hostname) { + return delegate.getApplicationNarrowedTo(hostname); } @Override diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java index 8ad77213bc1..f3d02992cdc 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; /** * The service monitor interface. A service monitor provides up to date information about the liveness status @@ -39,17 +38,8 @@ public interface ServiceMonitor { return getServiceModelSnapshot().getApplicationInstance(reference); } - default List<ServiceInstance> getServiceInstancesOn(HostName hostname) { - ApplicationInstance application = getServiceModelSnapshot().getApplicationsByHostName().get(hostname); - if (application == null) { - return List.of(); - } - - return application - .serviceClusters().stream() - .flatMap(cluster -> cluster.serviceInstances().stream()) - .filter(serviceInstance -> hostname.equals(serviceInstance.hostName())) - .collect(Collectors.toList()); + default Optional<ApplicationInstance> getApplicationNarrowedTo(HostName hostname) { + return Optional.ofNullable(getServiceModelSnapshot().getApplicationsByHostName().get(hostname)); } default Map<HostName, List<ServiceInstance>> getServicesByHostname() { |