summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2019-06-07 19:32:02 +0200
committerValerij Fredriksen <valerij92@gmail.com>2019-06-07 20:16:36 +0200
commit18664b4d1f2f7d8f4e16328d645a5c39aaad911e (patch)
tree0325865c3664a00df04c2e233fbd2d68db7591c2
parent9518f88e048e3f85b709a3ad86906fab16e31b65 (diff)
Simplify health monitoring
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/health/HealthMonitorManager.java18
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java23
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java60
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java20
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"));