diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-07 19:32:02 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-07 20:16:36 +0200 |
commit | 18664b4d1f2f7d8f4e16328d645a5c39aaad911e (patch) | |
tree | 0325865c3664a00df04c2e233fbd2d68db7591c2 | |
parent | 9518f88e048e3f85b709a3ad86906fab16e31b65 (diff) |
Simplify health monitoring
4 files changed, 3 insertions, 118 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/health/HealthMonitorManager.java b/service-monitor/src/main/java/com/yahoo/vespa/service/health/HealthMonitorManager.java index 7601cfd2e95..3cc7010e209 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/health/HealthMonitorManager.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/health/HealthMonitorManager.java @@ -10,7 +10,6 @@ import com.yahoo.vespa.applicationmodel.ServiceStatus; import com.yahoo.vespa.applicationmodel.ServiceStatusInfo; import com.yahoo.vespa.applicationmodel.ServiceType; import com.yahoo.vespa.service.duper.DuperModelManager; -import com.yahoo.vespa.service.duper.ZoneApplication; import com.yahoo.vespa.service.executor.RunletExecutorImpl; import com.yahoo.vespa.service.manager.HealthMonitorApi; import com.yahoo.vespa.service.manager.MonitorManager; @@ -77,7 +76,7 @@ public class HealthMonitorManager implements MonitorManager, HealthMonitorApi { @Override public void applicationActivated(ApplicationInfo application) { - if (wouldMonitor(application.getApplicationId())) { + if (duperModel.isSupportedInfraApplication(application.getApplicationId())) { healthMonitors .computeIfAbsent(application.getApplicationId(), applicationHealthMonitorFactory::create) .monitor(application); @@ -103,24 +102,9 @@ public class HealthMonitorManager implements MonitorManager, HealthMonitorApi { return new ServiceStatusInfo(ServiceStatus.NOT_CHECKED); } - if (applicationId.equals(ZoneApplication.getApplicationId())) { - // New: The zone app is health monitored (monitor != null), possibly even the routing cluster - // which is a normal jdisc container (unnecessary but harmless), but the node-admin cluster - // are tenant Docker hosts running host admin that are monitored via /state/v1/health. - if (ZoneApplication.isNodeAdminService(applicationId, clusterId, serviceType)) { - return monitor.getStatus(applicationId, clusterId, serviceType, configId); - } else { - return new ServiceStatusInfo(ServiceStatus.NOT_CHECKED); - } - } - return monitor.getStatus(applicationId, clusterId, serviceType, configId); } - private boolean wouldMonitor(ApplicationId id) { - return duperModel.isSupportedInfraApplication(id) || id.equals(ZoneApplication.getApplicationId()); - } - @Override public List<ApplicationId> getMonitoredApplicationIds() { return Collections.list(healthMonitors.keys()); diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java index 8e3780744f6..0408e0134ea 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java @@ -6,14 +6,11 @@ import com.yahoo.config.model.api.HostInfo; import com.yahoo.config.model.api.PortInfo; import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.provision.HostName; -import com.yahoo.vespa.service.duper.HostAdminApplication; -import com.yahoo.vespa.service.duper.ZoneApplication; import com.yahoo.vespa.service.executor.RunletExecutor; import com.yahoo.vespa.service.model.ApplicationInstanceGenerator; import com.yahoo.vespa.service.monitor.ServiceId; import java.time.Duration; -import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -28,7 +25,7 @@ public class StateV1HealthModel implements AutoCloseable { private static final String PORT_TAG_HTTP = "HTTP"; /** Port tags implying /state/v1/health is served on HTTP. */ - public static final List<String> HTTP_HEALTH_PORT_TAGS = Arrays.asList(PORT_TAG_HTTP, PORT_TAG_STATE); + public static final List<String> HTTP_HEALTH_PORT_TAGS = List.of(PORT_TAG_HTTP, PORT_TAG_STATE); private final Duration targetHealthStaleness; private final Duration requestTimeout; private final Duration connectionKeepAlive; @@ -47,32 +44,16 @@ public class StateV1HealthModel implements AutoCloseable { Map<ServiceId, HealthEndpoint> extractHealthEndpoints(ApplicationInfo application) { Map<ServiceId, HealthEndpoint> endpoints = new HashMap<>(); - boolean isZoneApplication = application.getApplicationId().equals(ZoneApplication.getApplicationId()); - for (HostInfo hostInfo : application.getModel().getHosts()) { HostName hostname = HostName.from(hostInfo.getHostname()); for (ServiceInfo serviceInfo : hostInfo.getServices()) { - - boolean isNodeAdmin = false; - if (isZoneApplication) { - if (ZoneApplication.isNodeAdminServiceInfo(application.getApplicationId(), serviceInfo)) { - isNodeAdmin = true; - } else { - // Only the node admin/host admin cluster of the zone application should be monitored - // TODO: Move the node admin cluster out to a separate infrastructure application - continue; - } - } - ServiceId serviceId = ApplicationInstanceGenerator.getServiceId(application, serviceInfo); for (PortInfo portInfo : serviceInfo.getPorts()) { if (portTaggedWith(portInfo, HTTP_HEALTH_PORT_TAGS)) { - // The host-admin-in-zone-application is one big hack. - int port = isNodeAdmin ? HostAdminApplication.HOST_ADMIN_HEALT_PORT : portInfo.getPort(); StateV1HealthEndpoint endpoint = new StateV1HealthEndpoint( serviceId, hostname, - port, + portInfo.getPort(), targetHealthStaleness, requestTimeout, connectionKeepAlive, diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java index 89bcda05074..008a271f905 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java @@ -3,15 +3,12 @@ package com.yahoo.vespa.service.health; import com.yahoo.config.model.api.ApplicationInfo; import com.yahoo.config.provision.HostName; -import com.yahoo.vespa.applicationmodel.ConfigId; import com.yahoo.vespa.applicationmodel.ServiceStatus; import com.yahoo.vespa.applicationmodel.ServiceStatusInfo; import com.yahoo.vespa.service.duper.ControllerHostApplication; import com.yahoo.vespa.service.duper.DuperModelManager; import com.yahoo.vespa.service.duper.InfraApplication; import com.yahoo.vespa.service.duper.ProxyHostApplication; -import com.yahoo.vespa.service.duper.TestZoneApplication; -import com.yahoo.vespa.service.duper.ZoneApplication; import com.yahoo.vespa.service.monitor.ConfigserverUtil; import org.junit.Before; import org.junit.Test; @@ -22,7 +19,6 @@ import java.util.stream.Stream; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -49,62 +45,6 @@ public class HealthMonitorManagerTest { } @Test - public void verifyZoneApplicationIsMonitored() { - ApplicationInfo zoneApplicationInfo = new TestZoneApplication.Builder() - .addNodeAdminCluster("h1", "h2") - .addRoutingCluster("r1") - .build() - .makeApplicationInfo(); - - verify(monitorFactory, times(0)).create(zoneApplicationInfo.getApplicationId()); - verify(monitor, times(0)).monitor(any()); - manager.applicationActivated(zoneApplicationInfo); - verify(monitorFactory).create(zoneApplicationInfo.getApplicationId()); - verify(monitor).monitor(any()); - - when(monitor.getStatus(any(), any(), any(), any())).thenReturn(new ServiceStatusInfo(ServiceStatus.DOWN)); - verifyNodeAdminGetStatus(0); - assertEquals(ServiceStatus.DOWN, getNodeAdminStatus()); - verifyNodeAdminGetStatus(1); - - verifyRoutingGetStatus(0); - assertEquals(ServiceStatus.NOT_CHECKED, getRoutingStatus()); - verifyRoutingGetStatus(0); - } - - private void verifyNodeAdminGetStatus(int invocations) { - verify(monitor, times(invocations)).getStatus( - eq(ZoneApplication.getApplicationId()), - eq(ZoneApplication.getNodeAdminClusterId()), - any(), - any()); - } - - private void verifyRoutingGetStatus(int invocations) { - verify(monitor, times(invocations)).getStatus( - eq(ZoneApplication.getApplicationId()), - eq(ZoneApplication.getRoutingClusterId()), - any(), - any()); - } - - private ServiceStatus getNodeAdminStatus() { - return manager.getStatus( - ZoneApplication.getApplicationId(), - ZoneApplication.getNodeAdminClusterId(), - ZoneApplication.getNodeAdminServiceType(), - new ConfigId("foo")).serviceStatus(); - } - - private ServiceStatus getRoutingStatus() { - return manager.getStatus( - ZoneApplication.getApplicationId(), - ZoneApplication.getRoutingClusterId(), - ZoneApplication.getRoutingServiceType(), - new ConfigId("bar")).serviceStatus(); - } - - @Test public void infrastructureApplication() { ProxyHostApplication proxyHostApplication = new ProxyHostApplication(); when(duperModel.isSupportedInfraApplication(proxyHostApplication.getApplicationId())).thenReturn(true); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java index 3fce1cca899..a7f632a2084 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java @@ -10,8 +10,6 @@ import com.yahoo.vespa.applicationmodel.ConfigId; import com.yahoo.vespa.applicationmodel.ServiceStatus; import com.yahoo.vespa.applicationmodel.ServiceType; import com.yahoo.vespa.service.duper.ProxyHostApplication; -import com.yahoo.vespa.service.duper.TestZoneApplication; -import com.yahoo.vespa.service.duper.ZoneApplication; import com.yahoo.vespa.service.executor.Cancellable; import com.yahoo.vespa.service.executor.RunletExecutor; import com.yahoo.vespa.service.monitor.ServiceId; @@ -71,24 +69,6 @@ public class StateV1HealthModelTest { } @Test - public void testMonitoringTenantHostHealth() { - ApplicationInfo zoneApplicationInfo = new TestZoneApplication.Builder() - .addNodeAdminCluster("h1") - .addRoutingCluster("r1") - .build() - .makeApplicationInfo(); - - Map<ServiceId, HealthEndpoint> endpoints = model.extractHealthEndpoints(zoneApplicationInfo); - assertEquals(1, endpoints.size()); - HealthEndpoint endpoint = endpoints.values().iterator().next(); - assertEquals("http://h1:8080/state/v1/health", endpoint.description()); - ServiceId serviceId = endpoint.getServiceId(); - assertEquals(ZoneApplication.getApplicationId(), serviceId.getApplicationId()); - assertEquals(ZoneApplication.getNodeAdminClusterId(), serviceId.getClusterId()); - assertEquals(ZoneApplication.getNodeAdminServiceType(), serviceId.getServiceType()); - } - - @Test public void caseInsensitiveTagMatching() { PortInfo portInfo = mock(PortInfo.class); when(portInfo.getTags()).thenReturn(List.of("http", "STATE", "foo")); |