diff options
Diffstat (limited to 'service-monitor/src/main/java/com/yahoo')
5 files changed, 24 insertions, 11 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, |