summaryrefslogtreecommitdiffstats
path: root/orchestrator
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2020-02-28 17:49:28 +0100
committerHåkon Hallingstad <hakon@verizonmedia.com>2020-02-28 17:49:28 +0100
commite4a06ace71acac5aa1e18176f7253649883fbaed (patch)
treeea3ba924e2b50f7248f0b14d7f75779fb9abfe1b /orchestrator
parentd38df0da567e9f57082214961bc653a9e5a7c336 (diff)
Moved to more specific methods on ServiceMonitor
Diffstat (limited to 'orchestrator')
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java6
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java1
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java15
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java5
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java11
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java3
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java6
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java5
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 {