diff options
6 files changed, 33 insertions, 34 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 1181cbba7de..b3c136d33ae 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -263,9 +263,9 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye hostProvisioner.ifPresent(provisioner -> provisioner.restart(applicationId, hostFilter)); } - public HttpResponse filedistributionStatus(Tenant tenant, ApplicationId applicationId) { + public HttpResponse filedistributionStatus(Tenant tenant, ApplicationId applicationId, Duration timeout) { Application application = getApplication(tenant, applicationId); - return fileDistributionStatus.status(application); + return fileDistributionStatus.status(application, timeout); } public Tenant verifyTenantAndApplication(ApplicationId applicationId) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/FileDistributionStatus.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/FileDistributionStatus.java index 67cce912395..0abc66e4761 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/FileDistributionStatus.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/FileDistributionStatus.java @@ -12,6 +12,7 @@ import com.yahoo.jrt.Transport; import com.yahoo.slime.Cursor; import com.yahoo.vespa.config.server.http.JSONResponse; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -30,20 +31,20 @@ public class FileDistributionStatus extends AbstractComponent { private final Supervisor supervisor = new Supervisor(new Transport()); - public StatusAllHosts status(Application application) { + public StatusAllHosts status(Application application, Duration timeout) { List<HostStatus> hostStatuses = new ArrayList<>(); application.getModel().getHosts() .forEach(host -> host.getServices() .stream() .filter(service -> "configproxy".equals(service.getServiceType())) - .forEach(service -> hostStatuses.add(getHostStatus(service.getHostName(), getRpcPort(service))))); + .forEach(service -> hostStatuses.add(getHostStatus(service.getHostName(), getRpcPort(service), timeout)))); return createStatusForAllHosts(hostStatuses); } - HostStatus getHostStatus(String hostname, int port) { + HostStatus getHostStatus(String hostname, int port, Duration timeout) { Target target = supervisor.connect(new Spec(hostname, port)); Request request = new Request("filedistribution.getActiveFileReferencesStatus"); - target.invokeSync(request, 1.0); + target.invokeSync(request, timeout.getSeconds()); HostStatus hostStatus = createHostStatusFromResponse(hostname, request); target.close(); return hostStatus; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java index e8db448b245..5208853dcde 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java @@ -1,13 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http; -import com.google.inject.Inject; - import com.yahoo.config.provision.ApplicationLockException; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; -import com.yahoo.container.logging.AccessLog; import com.yahoo.log.LogLevel; import com.yahoo.config.provision.OutOfCapacityException; import com.yahoo.vespa.config.server.ActivationConflictException; @@ -15,7 +12,7 @@ import com.yahoo.yolean.Exceptions; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.concurrent.Executor; +import java.time.Duration; /** * Super class for http handlers, that takes care of checking valid @@ -23,7 +20,6 @@ import java.util.concurrent.Executor; * implement the handleMETHOD methods that it supports. * * @author hmusum - * @since 5.1.14 */ public class HttpHandler extends LoggingRequestHandler { @@ -71,6 +67,17 @@ public class HttpHandler extends LoggingRequestHandler { } } + protected static Duration getRequestTimeout(HttpRequest request, Duration defaultTimeout) { + if (!request.hasProperty("timeout")) { + return defaultTimeout; + } + try { + return Duration.ofSeconds((long) Double.parseDouble(request.getProperty("timeout"))); + } catch (Exception e) { + return defaultTimeout; + } + } + private String getMessage(Exception e, HttpRequest request) { if (request.getBooleanProperty("debug")) { StringWriter sw = new StringWriter(); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java index 5acb6e81a83..4f7548d82ce 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java @@ -1,11 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http; -import com.google.inject.Inject; - import com.yahoo.config.provision.ApplicationId; import com.yahoo.container.jdisc.HttpRequest; -import com.yahoo.container.logging.AccessLog; import com.yahoo.jdisc.application.BindingMatch; import com.yahoo.slime.Slime; import com.yahoo.vespa.config.server.ApplicationRepository; @@ -14,8 +11,6 @@ import com.yahoo.vespa.config.server.TimeoutBudget; import java.time.Clock; import java.time.Duration; -import java.util.concurrent.Executor; - /** * Super class for session handlers, that takes care of checking valid @@ -23,7 +18,6 @@ import java.util.concurrent.Executor; * implement the handleMETHOD methods that it supports. * * @author hmusum - * @since 5.1.14 */ public class SessionHandler extends HttpHandler { @@ -74,18 +68,6 @@ public class SessionHandler extends HttpHandler { return new TimeoutBudget(Clock.systemUTC(), getRequestTimeout(request, defaultTimeout)); } - - protected static Duration getRequestTimeout(HttpRequest request, Duration defaultTimeout) { - if (!request.hasProperty("timeout")) { - return defaultTimeout; - } - try { - return Duration.ofSeconds((long) Double.parseDouble(request.getProperty("timeout"))); - } catch (Exception e) { - return defaultTimeout; - } - } - public static DeployHandlerLogger createLogger(Slime deployLog, HttpRequest request, ApplicationId app) { return createLogger(deployLog, request.getBooleanProperty("verbose"), app); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index 876966c6550..7be7bfb47e1 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -26,6 +26,7 @@ import com.yahoo.vespa.config.server.tenant.Tenant; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import java.time.Duration; /** * Operations on applications (delete, wait for config convergence, restart, application content etc.) @@ -93,7 +94,8 @@ public class ApplicationHandler extends HttpHandler { } if (isFiledistributionStatusRequest(request)) { - return applicationRepository.filedistributionStatus(tenant, applicationId); + Duration timeout = HttpHandler.getRequestTimeout(request, Duration.ofSeconds(5)); + return applicationRepository.filedistributionStatus(tenant, applicationId, timeout); } return new GetApplicationResponse(Response.Status.OK, applicationRepository.getApplicationGeneration(tenant, applicationId)); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/FileDistributionStatusTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/FileDistributionStatusTest.java index 35a86ad4757..c78f4fe1b3a 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/FileDistributionStatusTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/FileDistributionStatusTest.java @@ -16,6 +16,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.io.IOException; +import java.time.Duration; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -34,6 +35,8 @@ import static com.yahoo.vespa.config.server.application.FileDistributionStatus.S */ public class FileDistributionStatusTest { + private final Duration timeout = Duration.ofMillis(100); + private TenantName tenant = TenantName.from("mytenant"); private ApplicationId appId = ApplicationId.from(tenant, ApplicationName.from("myapp"), InstanceName.from("myinstance")); private Application application; @@ -48,7 +51,7 @@ public class FileDistributionStatusTest { FileDistributionStatus status = new MockStatus(statusFinished("localhost", Status.FINISHED, fileReferenceStatuses)); application = createApplication("localhost"); - HttpResponse response = status.status(application); + HttpResponse response = getStatus(status, application); assertResponse(200, "{" + "\"hosts\":[" + @@ -68,7 +71,7 @@ public class FileDistributionStatusTest { FileDistributionStatus status = new MockStatus(statusWithError("localhost2", Status.IN_PROGRESS, fileReferenceStatuses, "")); application = createApplication("localhost2"); - HttpResponse response = status.status(application); + HttpResponse response = getStatus(status, application); assertResponse(200, "{" + "\"hosts\":[" + @@ -97,7 +100,7 @@ public class FileDistributionStatusTest { FileDistributionStatus status = new MockStatus(new HashSet<>(Arrays.asList(localhost, localhost2))); application = createApplication("localhost", "localhost2"); - HttpResponse response = status.status(application); + HttpResponse response = getStatus(status, application); assertResponse(200, "{" + "\"hosts\":[" + @@ -140,6 +143,10 @@ public class FileDistributionStatusTest { return new Application(mockModel, new ServerCache(), 3, Version.fromIntValues(0, 0, 0), MetricUpdater.createTestUpdater(), appId); } + HttpResponse getStatus(FileDistributionStatus fileDistributionStatus, Application application) { + return fileDistributionStatus.status(application, timeout); + } + private static class MockStatus extends FileDistributionStatus { private final Map<String, HostStatus> statuses = new HashMap<>(); @@ -155,7 +162,7 @@ public class FileDistributionStatusTest { } @Override - HostStatus getHostStatus(String hostname, int port) { + HostStatus getHostStatus(String hostname, int port, Duration timeout) { return statuses.get(hostname); } } |