diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-28 17:49:28 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-28 17:49:28 +0100 |
commit | e4a06ace71acac5aa1e18176f7253649883fbaed (patch) | |
tree | ea3ba924e2b50f7248f0b14d7f75779fb9abfe1b /orchestrator | |
parent | d38df0da567e9f57082214961bc653a9e5a7c336 (diff) |
Moved to more specific methods on ServiceMonitor
Diffstat (limited to 'orchestrator')
8 files changed, 39 insertions, 13 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 554b6e11501..acf3fe7f9b2 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java @@ -1,10 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.orchestrator; -import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; 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; @@ -16,5 +18,5 @@ public interface InstanceLookupService { Optional<ApplicationInstance> findInstanceById(ApplicationInstanceReference applicationInstanceReference); Optional<ApplicationInstance> findInstanceByHost(HostName hostName); Set<ApplicationInstanceReference> knownInstances(); - + List<ServiceInstance> findServicesOnHost(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 d0062966a6d..6639a3032dc 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java @@ -106,6 +106,7 @@ public class OrchestratorImpl implements Orchestrator { @Override public Host getHost(HostName hostName) throws HostNameNotFoundException { ApplicationInstance applicationInstance = getApplicationInstance(hostName); + instanceLookupService.findServicesOnHost(hostName); List<ServiceInstance> serviceInstances = applicationInstance .serviceClusters().stream() .flatMap(cluster -> cluster.serviceInstances().stream()) 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 1a859cfacc5..30f5233d0c6 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java @@ -5,13 +5,12 @@ 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.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; /** * Uses slobrok data (a.k.a. heartbeat) to implement {@link InstanceLookupService}. @@ -29,17 +28,21 @@ public class ServiceMonitorInstanceLookupService implements InstanceLookupServic @Override public Optional<ApplicationInstance> findInstanceById(ApplicationInstanceReference applicationInstanceReference) { - return serviceMonitor.getServiceModelSnapshot().getApplicationInstance(applicationInstanceReference); + return serviceMonitor.getApplication(applicationInstanceReference); } @Override - public Optional<ApplicationInstance> findInstanceByHost(HostName hostName) { - return Optional.ofNullable(serviceMonitor.getServiceModelSnapshot().getApplicationsByHostName().get(hostName)); + public Optional<ApplicationInstance> findInstanceByHost(HostName hostname) { + return serviceMonitor.getApplication(hostname); } @Override public Set<ApplicationInstanceReference> knownInstances() { - return serviceMonitor.getServiceModelSnapshot().getAllApplicationInstances().keySet(); + return serviceMonitor.getAllApplicationInstanceReferences(); } + @Override + public List<ServiceInstance> findServicesOnHost(HostName hostName) { + return serviceMonitor.getServiceInstancesOn(hostName); + } } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java index fbb8f445db0..cfdda3250f6 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java @@ -33,7 +33,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.time.Instant; import java.util.List; -import java.util.Set; import java.util.TreeMap; import java.util.stream.Collectors; @@ -70,8 +69,8 @@ public class InstanceResource { @GET @Produces(MediaType.APPLICATION_JSON) - public Set<ApplicationInstanceReference> getAllInstances() { - return instanceLookupService.knownInstances(); + public List<ApplicationInstanceReference> getAllInstances() { + return instanceLookupService.knownInstances().stream().sorted().collect(Collectors.toList()); } @GET 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 a54f5284ee0..07acc0dad81 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java @@ -17,6 +17,7 @@ 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; @@ -154,6 +155,16 @@ 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 static Set<HostName> getContentHosts(ApplicationInstanceReference appRef) { Set<HostName> hosts = apps.stream() .filter(application -> application.reference().equals(appRef)) diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java index bfe4b523e4a..0869fde3422 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java @@ -30,6 +30,7 @@ import com.yahoo.vespa.orchestrator.status.HostStatus; import com.yahoo.vespa.orchestrator.status.MutableStatusRegistry; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.orchestrator.status.ZookeeperStatusService; +import com.yahoo.vespa.service.model.ServiceModelCache; import com.yahoo.vespa.service.monitor.ServiceModel; import org.junit.Before; import org.junit.Test; @@ -416,7 +417,7 @@ public class OrchestratorImplTest { ServiceStatus.NOT_CHECKED))))); InstanceLookupService lookupService = new ServiceMonitorInstanceLookupService( - () -> new ServiceModel(Map.of(reference, applicationInstance))); + new ServiceModelCache(() -> new ServiceModel(Map.of(reference, applicationInstance)), new TestTimer())); orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(), clusterControllerClientFactory, applicationApiFactory), clusterControllerClientFactory, diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java index eff222bc074..991b5837111 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java @@ -32,7 +32,9 @@ import com.yahoo.vespa.orchestrator.status.HostStatus; import com.yahoo.vespa.orchestrator.status.MutableStatusRegistry; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.orchestrator.status.ZookeeperStatusService; +import com.yahoo.vespa.service.model.ServiceModelCache; import com.yahoo.vespa.service.monitor.ServiceModel; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import com.yahoo.yolean.Exceptions; import java.time.Clock; @@ -58,10 +60,12 @@ class ModelTestUtils { private final ClusterControllerClientFactory clusterControllerClientFactory = new ClusterControllerClientFactoryMock(); private final Map<HostName, HostStatus> hostStatusMap = new HashMap<>(); private final StatusService statusService = new ZookeeperStatusService(new MockCurator(), mock(Metric.class), new TestTimer()); + private final TestTimer timer = new TestTimer(); + private final ServiceMonitor serviceMonitor = new ServiceModelCache(() -> new ServiceModel(applications), timer); private final Orchestrator orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(), clusterControllerClientFactory, applicationApiFactory()), clusterControllerClientFactory, statusService, - new ServiceMonitorInstanceLookupService(() -> new ServiceModel(applications)), + new ServiceMonitorInstanceLookupService(serviceMonitor), 0, new ManualClock(), applicationApiFactory(), 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 bfa68145828..a84f99dff34 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 @@ -110,6 +110,11 @@ public class HostResourceTest { public Set<ApplicationInstanceReference> knownInstances() { return Collections.emptySet(); } + + @Override + public List<ServiceInstance> findServicesOnHost(HostName hostName) { + return List.of(); + } }; private static class AlwaysAllowPolicy implements Policy { |