diff options
Diffstat (limited to 'service-monitor/src')
3 files changed, 26 insertions, 13 deletions
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 50ea31eb9c4..0a40555036c 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 @@ -17,6 +17,7 @@ import com.yahoo.vespa.service.slobrok.SlobrokMonitorManagerImpl; import java.util.Map; public class ServiceMonitorImpl implements ServiceMonitor { + private final ServiceModelCache serviceModelProvider; @Inject @@ -37,12 +38,8 @@ public class ServiceMonitorImpl implements ServiceMonitor { } @Override - public Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances() { - return serviceModelProvider.get().getAllApplicationInstances(); - } - - @Override public ServiceModel getServiceModelSnapshot() { return serviceModelProvider.get(); } + } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java index b62552188e1..ed72893400a 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java @@ -4,9 +4,13 @@ package com.yahoo.vespa.service.monitor; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; +import com.yahoo.vespa.applicationmodel.ServiceCluster; import com.yahoo.vespa.applicationmodel.ServiceInstance; +import java.util.Arrays; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -20,9 +24,11 @@ import java.util.stream.Collectors; public class ServiceModel { private final Map<ApplicationInstanceReference, ApplicationInstance> applications; + private final Map<HostName, ApplicationInstance> applicationsByHostName; public ServiceModel(Map<ApplicationInstanceReference, ApplicationInstance> applications) { this.applications = Collections.unmodifiableMap(applications); + this.applicationsByHostName = Collections.unmodifiableMap(applicationsByHostNames(applications.values())); } public Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances() { @@ -33,6 +39,10 @@ public class ServiceModel { return Optional.ofNullable(applications.get(reference)); } + public Map<HostName, ApplicationInstance> getApplicationsByHostName() { + return applicationsByHostName; + } + public Map<HostName, List<ServiceInstance>> getServiceInstancesByHostName() { return applications.values().stream() .flatMap(application -> application.serviceClusters().stream()) @@ -40,4 +50,17 @@ public class ServiceModel { .collect(Collectors.groupingBy(ServiceInstance::hostName, Collectors.toList())); } + private static Map<HostName, ApplicationInstance> applicationsByHostNames(Collection<ApplicationInstance> applications) { + Map<HostName, ApplicationInstance> hosts = new HashMap<>(); + for (ApplicationInstance application : applications) + for (ServiceCluster cluster : application.serviceClusters()) + for (ServiceInstance instance : cluster.serviceInstances()) { + ApplicationInstance previous = hosts.put(instance.hostName(), application); + if (previous != null && ! previous.equals(application)) + throw new IllegalStateException("Major assumption broken: Multiple application instances contain host " + + instance.hostName().s() + ": " + Arrays.asList(previous, application)); + } + return hosts; + } + } 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 5ed34673da5..49539c61e5d 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 @@ -1,11 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.monitor; -import com.yahoo.vespa.applicationmodel.ApplicationInstance; -import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; - -import java.util.Map; - /** * The service monitor interface. A service monitor provides up to date information about the liveness status * (up, down or not known) of each service instance in a Vespa zone @@ -15,11 +10,9 @@ import java.util.Map; public interface ServiceMonitor { /** - * Returns the current liveness status (up, down or unknown) of all instances + * Returns a ServiceModel which contains the current liveness status (up, down or unknown) of all instances * of all services of all clusters of all applications in a zone. */ - Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances(); - ServiceModel getServiceModelSnapshot(); } |