diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2021-09-13 16:41:21 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2021-09-13 16:41:21 +0200 |
commit | a3fcef7201b804437becb7773821bb1457a1c8ce (patch) | |
tree | 42db280ea8d99bcb80378e907db8aa3ba6262cc6 /service-monitor | |
parent | dc4fd3d892d799cee3016f04f134bd1baa5c9ce6 (diff) |
Add ServiceStatus.UNKNOWN
Diffstat (limited to 'service-monitor')
8 files changed, 27 insertions, 14 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 d6e15f6af4e..fd7c77e2a20 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 @@ -9,6 +9,8 @@ import com.yahoo.vespa.applicationmodel.ConfigId; import com.yahoo.vespa.applicationmodel.ServiceStatus; import com.yahoo.vespa.applicationmodel.ServiceStatusInfo; import com.yahoo.vespa.applicationmodel.ServiceType; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.service.duper.DuperModelManager; import com.yahoo.vespa.service.executor.RunletExecutorImpl; import com.yahoo.vespa.service.manager.HealthMonitorApi; @@ -54,13 +56,14 @@ public class HealthMonitorManager implements MonitorManager, HealthMonitorApi { private final ApplicationHealthMonitorFactory applicationHealthMonitorFactory; @Inject - public HealthMonitorManager(DuperModelManager duperModel) { + public HealthMonitorManager(DuperModelManager duperModel, FlagSource flagSource) { this(duperModel, new StateV1HealthModel( TARGET_HEALTH_STALENESS, HEALTH_REQUEST_TIMEOUT, KEEP_ALIVE, - new RunletExecutorImpl(THREAD_POOL_SIZE))); + new RunletExecutorImpl(THREAD_POOL_SIZE), + Flags.USE_UNKNOWN_SERVICE_STATUS.bindTo(flagSource).value())); } private HealthMonitorManager(DuperModelManager duperModel, StateV1HealthModel healthModel) { diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthEndpoint.java b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthEndpoint.java index 73f0480bf96..2128d2b77c3 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthEndpoint.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthEndpoint.java @@ -20,6 +20,7 @@ class StateV1HealthEndpoint implements HealthEndpoint { private final Duration connectionKeepAlive; private final Duration delay; private final RunletExecutor executor; + private boolean useUnknownServiceStatus; StateV1HealthEndpoint(ServiceId serviceId, HostName hostname, @@ -27,10 +28,12 @@ class StateV1HealthEndpoint implements HealthEndpoint { Duration delay, Duration requestTimeout, Duration connectionKeepAlive, - RunletExecutor executor) { + RunletExecutor executor, + boolean useUnknownServiceStatus) { this.serviceId = serviceId; this.delay = delay; this.executor = executor; + this.useUnknownServiceStatus = useUnknownServiceStatus; this.url = uncheck(() -> new URL("http", hostname.value(), port, "/state/v1/health")); this.requestTimeout = requestTimeout; this.connectionKeepAlive = connectionKeepAlive; @@ -43,7 +46,7 @@ class StateV1HealthEndpoint implements HealthEndpoint { @Override public HealthMonitor startMonitoring() { - StateV1HealthUpdater updater = new StateV1HealthUpdater(url, requestTimeout, connectionKeepAlive); + var updater = new StateV1HealthUpdater(url, requestTimeout, connectionKeepAlive, useUnknownServiceStatus); return new StateV1HealthMonitor(updater, executor, delay); } 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 0408e0134ea..81a6d6d6013 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 @@ -30,15 +30,18 @@ public class StateV1HealthModel implements AutoCloseable { private final Duration requestTimeout; private final Duration connectionKeepAlive; private final RunletExecutor executor; + private final boolean useUnknownServiceStatus; StateV1HealthModel(Duration targetHealthStaleness, Duration requestTimeout, Duration connectionKeepAlive, - RunletExecutor executor) { + RunletExecutor executor, + boolean useUnknownServiceStatus) { this.targetHealthStaleness = targetHealthStaleness; this.requestTimeout = requestTimeout; this.connectionKeepAlive = connectionKeepAlive; this.executor = executor; + this.useUnknownServiceStatus = useUnknownServiceStatus; } Map<ServiceId, HealthEndpoint> extractHealthEndpoints(ApplicationInfo application) { @@ -57,7 +60,8 @@ public class StateV1HealthModel implements AutoCloseable { targetHealthStaleness, requestTimeout, connectionKeepAlive, - executor); + executor, + useUnknownServiceStatus); endpoints.put(serviceId, endpoint); break; // Avoid >1 endpoints per serviceId } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthUpdater.java b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthUpdater.java index 5813e2cef39..c544ea4b8b4 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthUpdater.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthUpdater.java @@ -24,13 +24,16 @@ class StateV1HealthUpdater implements HealthUpdater { private final String endpoint; private final StateV1HealthClient healthClient; - private volatile ServiceStatusInfo serviceStatusInfo = new ServiceStatusInfo(ServiceStatus.NOT_CHECKED); + private volatile ServiceStatusInfo serviceStatusInfo; - StateV1HealthUpdater(URL url, Duration requestTimeout, Duration connectionKeepAlive) { - this(url.toString(), new StateV1HealthClient(url, requestTimeout, connectionKeepAlive)); + StateV1HealthUpdater(URL url, Duration requestTimeout, Duration connectionKeepAlive, + boolean useUnknownServiceStatus) { + this(url.toString(), new StateV1HealthClient(url, requestTimeout, connectionKeepAlive), useUnknownServiceStatus); } - StateV1HealthUpdater(String endpoint, StateV1HealthClient healthClient) { + StateV1HealthUpdater(String endpoint, StateV1HealthClient healthClient, boolean useUnknownServiceStatus) { + var serviceStatus = useUnknownServiceStatus ? ServiceStatus.UNKNOWN : ServiceStatus.NOT_CHECKED; + this.serviceStatusInfo = new ServiceStatusInfo(serviceStatus); this.endpoint = endpoint; this.healthClient = healthClient; } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceStatusProvider.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceStatusProvider.java index 9486bf505ab..891fbbd1885 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceStatusProvider.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceStatusProvider.java @@ -17,7 +17,7 @@ public interface ServiceStatusProvider { * Get the {@link ServiceStatus} of a particular service. * * <p>{@link ServiceStatus#NOT_CHECKED NOT_CHECKED} must be returned if the - * service status provider does does not monitor the service status for + * service status provider does not monitor the service status for * the particular application, cluster, service type, and config id. */ ServiceStatusInfo getStatus(ApplicationId applicationId, 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 94f9e8e0999..70454ffdd58 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 @@ -41,7 +41,7 @@ public class StateV1HealthModelTest { private final List<HostName> hostnames = Stream.of("host1", "host2").map(HostName::from).collect(Collectors.toList()); private final ApplicationInfo proxyHostApplicationInfo = proxyHostApplication.makeApplicationInfo(hostnames); - private final StateV1HealthModel model = new StateV1HealthModel(healthStaleness, requestTimeout, keepAlive, executor); + private final StateV1HealthModel model = new StateV1HealthModel(healthStaleness, requestTimeout, keepAlive, executor, false); @Test public void test() { diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthMonitorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthMonitorTest.java index e3fb7d08d93..bec33a7dbfd 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthMonitorTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthMonitorTest.java @@ -17,7 +17,7 @@ public class StateV1HealthMonitorTest { public void downThenUpThenDown() throws Exception { StateV1HealthClient client = mock(StateV1HealthClient.class); - StateV1HealthUpdater updater = new StateV1HealthUpdater("https://foo/state/v1/health", client); + StateV1HealthUpdater updater = new StateV1HealthUpdater("https://foo/state/v1/health", client, false); RunletExecutor executor = new RunletExecutorImpl(2); try (StateV1HealthMonitor monitor = new StateV1HealthMonitor(updater, executor, Duration.ofMillis(10))) { assertEquals(ServiceStatus.NOT_CHECKED, monitor.getStatus().serviceStatus()); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthUpdaterTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthUpdaterTest.java index bb60d049aa8..833507dfb6e 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthUpdaterTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthUpdaterTest.java @@ -165,6 +165,6 @@ public class StateV1HealthUpdaterTest { private StateV1HealthUpdater makeUpdater(CloseableHttpClient client, Function<HttpEntity, String> getContentFunction) { ApacheHttpClient apacheHttpClient = new ApacheHttpClient(url, client); StateV1HealthClient healthClient = new StateV1HealthClient(apacheHttpClient, getContentFunction); - return new StateV1HealthUpdater(url.toString(), healthClient); + return new StateV1HealthUpdater(url.toString(), healthClient, false); } }
\ No newline at end of file |