aboutsummaryrefslogtreecommitdiffstats
path: root/configserver/src
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-10-26 09:47:59 +0200
committerHåkon Hallingstad <hakon@oath.com>2018-10-26 09:47:59 +0200
commitc38756932d7d14ac2479d6788d86f48e8f738d56 (patch)
treef81bf4a81dc747fb746f9f7638d6d83922f90730 /configserver/src
parent67878e49f9442d43d42d35f0ebbb57735ad2edbf (diff)
parentb04d5cf8899eefa65cbc0112404e72285959cba8 (diff)
Merge branch 'master' into hakonhall/enforce-cc-timeouts-in-orchestrator-2
Diffstat (limited to 'configserver/src')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java20
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java20
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsResponse.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java7
-rw-r--r--configserver/src/main/resources/configserver-app/services.xml3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java15
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/application/OrchestratorMock.java83
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/HandlerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java25
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java6
22 files changed, 205 insertions, 29 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 3e11637b801..0594524af37 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
@@ -53,6 +53,7 @@ import com.yahoo.vespa.config.server.session.SilentDeployLogger;
import com.yahoo.vespa.config.server.tenant.Rotations;
import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
+import com.yahoo.vespa.orchestrator.Orchestrator;
import java.io.File;
import java.io.IOException;
@@ -94,31 +95,36 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
private final DeployLogger logger = new SilentDeployLogger();
private final ConfigserverConfig configserverConfig;
private final FileDistributionStatus fileDistributionStatus;
+ private final Orchestrator orchestrator;
@Inject
public ApplicationRepository(TenantRepository tenantRepository,
HostProvisionerProvider hostProvisionerProvider,
ConfigConvergenceChecker configConvergenceChecker,
HttpProxy httpProxy,
- ConfigserverConfig configserverConfig) {
+ ConfigserverConfig configserverConfig,
+ Orchestrator orchestrator) {
this(tenantRepository, hostProvisionerProvider.getHostProvisioner(),
- configConvergenceChecker, httpProxy, configserverConfig, Clock.systemUTC(), new FileDistributionStatus());
+ configConvergenceChecker, httpProxy, configserverConfig, orchestrator,
+ Clock.systemUTC(), new FileDistributionStatus());
}
// For testing
public ApplicationRepository(TenantRepository tenantRepository,
Provisioner hostProvisioner,
+ Orchestrator orchestrator,
Clock clock) {
- this(tenantRepository, hostProvisioner, clock, new ConfigserverConfig(new ConfigserverConfig.Builder()));
+ this(tenantRepository, hostProvisioner, orchestrator, clock, new ConfigserverConfig(new ConfigserverConfig.Builder()));
}
// For testing
public ApplicationRepository(TenantRepository tenantRepository,
Provisioner hostProvisioner,
+ Orchestrator orchestrator,
Clock clock,
ConfigserverConfig configserverConfig) {
this(tenantRepository, Optional.of(hostProvisioner), new ConfigConvergenceChecker(), new HttpProxy(new SimpleHttpFetcher()),
- configserverConfig, clock, new FileDistributionStatus());
+ configserverConfig, orchestrator, clock, new FileDistributionStatus());
}
private ApplicationRepository(TenantRepository tenantRepository,
@@ -126,6 +132,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
ConfigConvergenceChecker configConvergenceChecker,
HttpProxy httpProxy,
ConfigserverConfig configserverConfig,
+ Orchestrator orchestrator,
Clock clock,
FileDistributionStatus fileDistributionStatus) {
this.tenantRepository = tenantRepository;
@@ -134,6 +141,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
this.httpProxy = httpProxy;
this.clock = clock;
this.configserverConfig = configserverConfig;
+ this.orchestrator = orchestrator;
this.fileDistributionStatus = fileDistributionStatus;
}
@@ -387,6 +395,10 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
hostProvisioner.ifPresent(provisioner -> provisioner.restart(applicationId, hostFilter));
}
+ public boolean isSuspended(ApplicationId application) {
+ return orchestrator.getAllSuspendedApplications().contains(application);
+ }
+
public HttpResponse filedistributionStatus(ApplicationId applicationId, Duration timeout) {
return fileDistributionStatus.status(getApplication(applicationId), timeout);
}
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 a3c17f3a89e..be99212c176 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
@@ -28,9 +28,9 @@ import java.time.Duration;
* Operations on applications (delete, wait for config convergence, restart, application content etc.)
*
* @author hmusum
- * @since 5.4
*/
public class ApplicationHandler extends HttpHandler {
+
private final Zone zone;
private final ApplicationRepository applicationRepository;
@@ -102,6 +102,10 @@ public class ApplicationHandler extends HttpHandler {
return applicationRepository.getLogs(applicationId, apiParams);
}
+ if (isIsSuspendedRequest(request)) {
+ return new ApplicationSuspendedResponse(applicationRepository.isSuspended(applicationId));
+ }
+
return new GetApplicationResponse(Response.Status.OK, applicationRepository.getApplicationGeneration(applicationId));
}
@@ -142,6 +146,7 @@ public class ApplicationHandler extends HttpHandler {
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/content/*",
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus",
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart",
+ "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/suspended",
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge",
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge/*",
"http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/clustercontroller/*/status/*",
@@ -150,6 +155,11 @@ public class ApplicationHandler extends HttpHandler {
"http://*/application/v2/tenant/*/application/*");
}
+ private static boolean isIsSuspendedRequest(HttpRequest request) {
+ return getBindingMatch(request).groupCount() == 7 &&
+ request.getUri().getPath().endsWith("/suspended");
+ }
+
private static boolean isLogRequest(HttpRequest request) {
return getBindingMatch(request).groupCount() == 4 &&
request.getUri().getPath().endsWith("/logs");
@@ -228,4 +238,12 @@ public class ApplicationHandler extends HttpHandler {
object.setLong("generation", generation);
}
}
+
+ private static class ApplicationSuspendedResponse extends JSONResponse {
+ ApplicationSuspendedResponse(boolean suspended) {
+ super(Response.Status.OK);
+ object.setBool("suspended", suspended);
+ }
+ }
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
index 15401709f1c..56895e3516e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
@@ -23,9 +23,9 @@ import java.util.List;
* Handler for listing currently active applications for a tenant.
*
* @author Ulf Lilleengen
- * @since 5.1
*/
public class ListApplicationsHandler extends HttpHandler {
+
private final TenantRepository tenantRepository;
private final Zone zone;
@@ -40,7 +40,7 @@ public class ListApplicationsHandler extends HttpHandler {
@Override
public HttpResponse handleGET(HttpRequest request) {
TenantName tenantName = Utils.getTenantNameFromApplicationsRequest(request);
- final String urlBase = Utils.getUrlBase(request, "/application/v2/tenant/" + tenantName + "/application/");
+ String urlBase = Utils.getUrlBase(request, "/application/v2/tenant/" + tenantName + "/application/");
List<ApplicationId> applicationIds = listApplicationIds(tenantName);
Collection<String> applicationUrls = Collections2.transform(applicationIds, new Function<ApplicationId, String>() {
@@ -67,4 +67,5 @@ public class ListApplicationsHandler extends HttpHandler {
sb.append("/instance/").append(id.instance().value());
return sb.toString();
}
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsResponse.java
index 3089216f433..a4527305abb 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsResponse.java
@@ -15,10 +15,11 @@ import java.util.Collection;
* Response that lists applications.
*
* @author Ulf Lilleengen
- * @since 5.1
*/
public class ListApplicationsResponse extends HttpResponse {
+
private final Slime slime = new Slime();
+
public ListApplicationsResponse(int status, Collection<String> applications) {
super(status);
Cursor array = slime.setArray();
@@ -36,4 +37,5 @@ public class ListApplicationsResponse extends HttpResponse {
public String getContentType() {
return HttpConfigResponse.JSON_CONTENT_TYPE;
}
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
index 4eefcc0ca75..95a71881b47 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListTenantsResponse.java
@@ -11,7 +11,6 @@ import com.yahoo.vespa.config.server.http.SessionResponse;
* Tenant list response
*
* @author vegardh
- *
*/
public class ListTenantsResponse extends SessionResponse {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
index 99320df11df..bb2b57ba45c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/PrepareResult.java
@@ -32,4 +32,5 @@ public class PrepareResult {
public Slime deployLog() {
return deployLog;
}
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
index e482bec9ed9..2ccef8b85df 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java
@@ -24,7 +24,6 @@ import com.yahoo.vespa.config.server.http.Utils;
* Handler that activates a session given by tenant and id (PUT).
*
* @author vegardh
- * @since 5.1
*/
public class SessionActiveHandler extends SessionHandler {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
index 15faf267cce..94137f58a39 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandler.java
@@ -18,17 +18,16 @@ import com.yahoo.vespa.config.server.http.Utils;
* in the session's application package
*
* @author Ulf Lilleengen
- * @since 5.1
*/
public class SessionContentHandler extends SessionHandler {
+
private final TenantRepository tenantRepository;
private final ContentHandler contentHandler = new ContentHandler();
@Inject
public SessionContentHandler(SessionHandler.Context ctx,
ApplicationRepository applicationRepository,
- TenantRepository tenantRepository)
- {
+ TenantRepository tenantRepository) {
super(ctx, applicationRepository);
this.tenantRepository = tenantRepository;
}
@@ -53,7 +52,7 @@ public class SessionContentHandler extends SessionHandler {
}
private SessionContentRequestV2 getContentRequest(HttpRequest request) {
- final TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
+ TenantName tenantName = Utils.getTenantNameFromSessionRequest(request);
validateRequest(tenantName);
long sessionId = getSessionIdV2(request);
String contentPath = SessionContentRequestV2.getContentPath(request);
diff --git a/configserver/src/main/resources/configserver-app/services.xml b/configserver/src/main/resources/configserver-app/services.xml
index 60dd7b0cea2..8521ca8b31f 100644
--- a/configserver/src/main/resources/configserver-app/services.xml
+++ b/configserver/src/main/resources/configserver-app/services.xml
@@ -133,6 +133,7 @@
<binding>https://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/content/*</binding>
<binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus</binding>
<binding>https://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus</binding>
+ <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/suspended</binding>
<binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart</binding>
<binding>https://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart</binding>
<binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/converge</binding>
@@ -192,5 +193,7 @@
<preprocess:include file='configserver-config.xml' required='false' />
<preprocess:include file='configserver-components.xml' required='false' />
+
+ <preprocess:include file='zookeeper-server-config.xml' required='false' />
</jdisc>
</services>
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
index ef25effbc64..694464ee578 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
@@ -19,6 +19,7 @@ import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.io.IOUtils;
import com.yahoo.test.ManualClock;
import com.yahoo.text.Utf8;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.deploy.DeployTester;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.http.v2.PrepareResult;
@@ -76,6 +77,7 @@ public class ApplicationRepositoryTest {
private ApplicationRepository applicationRepository;
private TenantRepository tenantRepository;
private SessionHandlerTest.MockProvisioner provisioner;
+ private OrchestratorMock orchestrator;
private TimeoutBudget timeoutBudget;
@Rule
@@ -90,8 +92,9 @@ public class ApplicationRepositoryTest {
tenantRepository.addTenant(tenant1);
tenantRepository.addTenant(tenant2);
tenantRepository.addTenant(tenant3);
+ orchestrator = new OrchestratorMock();
provisioner = new SessionHandlerTest.MockProvisioner();
- applicationRepository = new ApplicationRepository(tenantRepository, provisioner, clock);
+ applicationRepository = new ApplicationRepository(tenantRepository, provisioner, orchestrator, clock);
timeoutBudget = new TimeoutBudget(clock, Duration.ofSeconds(60));
}
@@ -118,6 +121,14 @@ public class ApplicationRepositoryTest {
}
@Test
+ public void testSuspension() {
+ deployApp(testApp);
+ assertFalse(applicationRepository.isSuspended(applicationId()));
+ orchestrator.suspend(applicationId());
+ assertTrue(applicationRepository.isSuspended(applicationId()));
+ }
+
+ @Test
public void getLogs() {
WireMockServer wireMock = new WireMockServer(wireMockConfig().port(8080));
wireMock.start();
@@ -197,7 +208,7 @@ public class ApplicationRepositoryTest {
tenantRepository.addTenant(tenant1);
Provisioner provisioner = new SessionHandlerTest.MockProvisioner();
- applicationRepository = new ApplicationRepository(tenantRepository, provisioner, clock);
+ applicationRepository = new ApplicationRepository(tenantRepository, provisioner, orchestrator, clock);
timeoutBudget = new TimeoutBudget(clock, Duration.ofSeconds(60));
// TODO: Deploy an app with a bundle or file that will be a file reference, too much missing in test setup to get this working now
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/OrchestratorMock.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/OrchestratorMock.java
new file mode 100644
index 00000000000..e61d3710fac
--- /dev/null
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/OrchestratorMock.java
@@ -0,0 +1,83 @@
+package com.yahoo.vespa.config.server.application;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.applicationmodel.HostName;
+import com.yahoo.vespa.orchestrator.Host;
+import com.yahoo.vespa.orchestrator.Orchestrator;
+import com.yahoo.vespa.orchestrator.model.NodeGroup;
+import com.yahoo.vespa.orchestrator.status.ApplicationInstanceStatus;
+import com.yahoo.vespa.orchestrator.status.HostStatus;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * (Only the suspended applications part of this is in use)
+ *
+ * @author bratseth
+ */
+public class OrchestratorMock implements Orchestrator {
+
+ private final Set<HostName> suspendedHosts = new HashSet<>();
+ private final Set<ApplicationId> suspendedApplications = new HashSet<>();
+
+ @Override
+ public Host getHost(HostName hostName) {
+ return null;
+ }
+
+ @Override
+ public HostStatus getNodeStatus(HostName hostName) {
+ return suspendedHosts.contains(hostName) ? HostStatus.ALLOWED_TO_BE_DOWN : HostStatus.NO_REMARKS;
+ }
+
+ @Override
+ public void setNodeStatus(HostName hostName, HostStatus state) {}
+
+ @Override
+ public void resume(HostName hostName) {
+ suspendedHosts.remove(hostName);
+ }
+
+ @Override
+ public void suspend(HostName hostName) {
+ suspendedHosts.add(hostName);
+ }
+
+ @Override
+ public void suspendGroup(NodeGroup nodeGroup) {
+ nodeGroup.getHostNames().forEach(this::suspend);
+ }
+
+ @Override
+ public ApplicationInstanceStatus getApplicationInstanceStatus(ApplicationId appId) {
+ return suspendedApplications.contains(appId)
+ ? ApplicationInstanceStatus.ALLOWED_TO_BE_DOWN : ApplicationInstanceStatus.NO_REMARKS;
+ }
+
+ @Override
+ public Set<ApplicationId> getAllSuspendedApplications() {
+ return Collections.unmodifiableSet(suspendedApplications);
+ }
+
+ @Override
+ public void resume(ApplicationId appId) {
+ suspendedApplications.remove(appId);
+ }
+
+ @Override
+ public void suspend(ApplicationId appId) {
+ suspendedApplications.add(appId);
+ }
+
+ @Override
+ public void acquirePermissionToRemove(HostName hostName) {}
+
+ @Override
+ public void suspendAll(HostName parentHostname, List<HostName> hostNames) {
+ hostNames.forEach(this::suspend);
+ }
+
+}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index 0d2654d693e..952d757be53 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -29,6 +29,7 @@ import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TimeoutBudget;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.v2.PrepareResult;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
@@ -122,7 +123,11 @@ public class DeployTester {
catch (Exception e) {
throw new IllegalArgumentException(e);
}
- applicationRepository = new ApplicationRepository(tenantRepository, new ProvisionerAdapter(provisioner), clock, configserverConfig);
+ applicationRepository = new ApplicationRepository(tenantRepository,
+ new ProvisionerAdapter(provisioner),
+ new OrchestratorMock(),
+ clock,
+ configserverConfig);
}
public Tenant tenant() {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HandlerTest.java
index 5097ed1d67c..0e2cee24b60 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HandlerTest.java
@@ -13,7 +13,6 @@ import static org.junit.Assert.*;
* Base class for handler tests
*
* @author hmusum
- * @since 5.1.14
*/
public class HandlerTest {
@@ -49,4 +48,5 @@ public class HandlerTest {
public static void assertHttpStatusCodeAndMessage(HttpResponse response, int statusCode, String contentType, String message) throws IOException {
assertHttpStatusCodeErrorCodeAndMessage(response, statusCode, null, contentType, message);
}
+
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java
index 738903910f3..a2c63047878 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java
@@ -21,11 +21,10 @@ import static org.junit.Assert.assertEquals;
public class LogRetrieverTest {
- private String logServerHostName = "http://localhost:8080/";
private LogRetriever logRetriever;
@Rule
- public final WireMockRule wireMock = new WireMockRule(options().port(8080), true);
+ public final WireMockRule wireMock = new WireMockRule(options().dynamicPort(), true);
@Before
public void setup() {
@@ -36,7 +35,8 @@ public class LogRetrieverTest {
public void testThatLogHandlerPropagatesResponseBody() throws IOException {
String expectedBody = "{logs-json}";
stubFor(get(urlEqualTo("/")).willReturn(okJson(expectedBody)));
- HttpResponse response = logRetriever.getLogs(logServerHostName);
+ String logServerUri = "http://localhost:" + wireMock.port() +"/";
+ HttpResponse response = logRetriever.getLogs(logServerUri);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
response.render(byteArrayOutputStream);
assertEquals(expectedBody, byteArrayOutputStream.toString());
@@ -44,9 +44,9 @@ public class LogRetrieverTest {
}
@Test
- public void testThatNotFoundLogServerReturns404() throws IOException {
+ public void testThatNotFoundLogServerReturns404() {
stubFor(get(urlEqualTo("/")).willReturn(aResponse().withStatus(200)));
- HttpResponse response = logRetriever.getLogs("http://wrong-host:8080/");
+ HttpResponse response = logRetriever.getLogs("http://wrong-host:" + wireMock.port() + "/");
assertEquals(404, response.getStatus());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
index 221d134c0f5..b0bb3bf244f 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
@@ -10,6 +10,7 @@ import com.yahoo.jdisc.Response;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.ContentHandlerTestBase;
import com.yahoo.vespa.config.server.session.Session;
import com.yahoo.vespa.config.server.tenant.Tenant;
@@ -66,6 +67,7 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
Zone.defaultZone(),
new ApplicationRepository(tenantRepository,
new MockProvisioner(),
+ new OrchestratorMock(),
clock));
pathPrefix = createPath(idTenant1, Zone.defaultZone());
baseUrl = baseServer + pathPrefix;
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
index c8c1815bba0..2c84e2d8ad4 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
@@ -16,6 +16,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.ConfigConvergenceChecker;
import com.yahoo.vespa.config.server.application.HttpProxy;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.StaticResponse;
@@ -59,10 +60,12 @@ public class ApplicationHandlerTest {
private final static TenantName mytenantName = TenantName.from("mytenant");
private final static TenantName foobar = TenantName.from("foobar");
private final static ApplicationId applicationId = new ApplicationId.Builder().applicationName(ApplicationName.defaultName()).tenant(mytenantName).build();
+
private TenantRepository tenantRepository;
private ApplicationRepository applicationRepository;
private SessionHandlerTest.MockProvisioner provisioner;
private MockStateApiFactory stateApiFactory = new MockStateApiFactory();
+ private OrchestratorMock orchestrator;
@Before
public void setup() {
@@ -71,8 +74,11 @@ public class ApplicationHandlerTest {
tenantRepository.addTenant(TenantBuilder.create(componentRegistry, mytenantName));
tenantRepository.addTenant(TenantBuilder.create(componentRegistry, foobar));
provisioner = new SessionHandlerTest.MockProvisioner();
+ orchestrator = new OrchestratorMock();
applicationRepository = new ApplicationRepository(tenantRepository,
- provisioner, Clock.systemUTC());
+ provisioner,
+ orchestrator,
+ Clock.systemUTC());
listApplicationsHandler = new ListApplicationsHandler(ListApplicationsHandler.testOnlyContext(),
tenantRepository,
Zone.defaultZone());
@@ -135,6 +141,14 @@ public class ApplicationHandlerTest {
}
@Test
+ public void testSuspended() throws Exception {
+ applicationRepository.deploy(testApp, prepareParams(applicationId));
+ assertSuspended(false, applicationId, Zone.defaultZone());
+ orchestrator.suspend(applicationId);
+ assertSuspended(true, applicationId, Zone.defaultZone());
+ }
+
+ @Test
public void testConverge() throws Exception {
applicationRepository.deploy(testApp, prepareParams(applicationId));
converge(applicationId, Zone.defaultZone());
@@ -150,7 +164,8 @@ public class ApplicationHandlerTest {
HostProvisionerProvider.withProvisioner(provisioner),
new ConfigConvergenceChecker(stateApiFactory),
mockHttpProxy,
- new ConfigserverConfig(new ConfigserverConfig.Builder()));
+ new ConfigserverConfig(new ConfigserverConfig.Builder()),
+ new OrchestratorMock());
ApplicationHandler mockHandler = createApplicationHandler(applicationRepository);
when(mockHttpProxy.get(any(), eq(host), eq("container-clustercontroller"), eq("clustercontroller-status/v1/clusterName1")))
.thenReturn(new StaticResponse(200, "text/html", "<html>...</html>"));
@@ -237,6 +252,12 @@ public class ApplicationHandlerTest {
assertApplicationGeneration(toUrlPath(applicationId, zone, fullAppIdInUrl), expectedGeneration);
}
+ private void assertSuspended(boolean expectedValue, ApplicationId application, Zone zone) throws IOException {
+ String restartUrl = toUrlPath(application, zone, true) + "/suspended";
+ HttpResponse response = createApplicationHandler().handle(HttpRequest.createTestRequest(restartUrl, com.yahoo.jdisc.http.HttpRequest.Method.GET));
+ HandlerTest.assertHttpStatusCodeAndMessage(response, 200, "{\"suspended\":" + expectedValue + "}");
+ }
+
private String toUrlPath(ApplicationId application, Zone zone, boolean fullAppIdInUrl) {
String url = "http://myhost:14000/application/v2/tenant/" + application.tenant().value() + "/application/" + application.application().value();
if (fullAppIdInUrl)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
index b4e3f2374be..aab5fc68d1d 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
@@ -23,6 +23,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.SuperModelGenerationCounter;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.MemoryTenantApplications;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
import com.yahoo.vespa.config.server.deploy.ZooKeeperClient;
@@ -360,7 +361,10 @@ public class SessionActiveHandlerTest extends SessionHandlerTest {
private SessionActiveHandler createHandler() {
return new SessionActiveHandler(SessionActiveHandler.testOnlyContext(),
- new ApplicationRepository(tenantRepository, hostProvisioner, clock),
+ new ApplicationRepository(tenantRepository,
+ hostProvisioner,
+ new OrchestratorMock(),
+ clock),
tenantRepository,
Zone.defaultZone());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
index 1428e384f2b..42b3fadc0de 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
@@ -10,6 +10,7 @@ import com.yahoo.jdisc.http.HttpRequest;
import com.yahoo.text.Utf8;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.ContentHandlerTestBase;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.tenant.TenantBuilder;
@@ -169,7 +170,10 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase {
private SessionContentHandler createHandler() {
return new SessionContentHandler(
SessionContentHandler.testOnlyContext(),
- new ApplicationRepository(tenantRepository, new SessionHandlerTest.MockProvisioner(), clock),
+ new ApplicationRepository(tenantRepository,
+ new SessionHandlerTest.MockProvisioner(),
+ new OrchestratorMock(),
+ clock),
tenantRepository);
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
index 640f5dafbed..803a87ada1c 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
@@ -9,6 +9,7 @@ import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.MemoryTenantApplications;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.http.CompressedApplicationInputStreamTest;
import com.yahoo.vespa.config.server.http.HandlerTest;
@@ -227,6 +228,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest {
SessionCreateHandler.testOnlyContext(),
new ApplicationRepository(tenantRepository,
new SessionHandlerTest.MockProvisioner(),
+ new OrchestratorMock(),
clock),
tenantRepository,
componentRegistry.getConfigserverConfig());
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
index e9b53c95c70..e8b20217a76 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
@@ -21,6 +21,7 @@ import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.ApplicationSet;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.application.MemoryTenantApplications;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
@@ -385,6 +386,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
SessionPrepareHandler.testOnlyContext(),
new ApplicationRepository(tenantRepository,
new MockProvisioner(),
+ new OrchestratorMock(),
clock),
tenantRepository,
componentRegistry.getConfigserverConfig());
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
index 35b22d19d6a..a4117ee7b51 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
@@ -14,6 +14,7 @@ import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.http.SessionResponse;
import com.yahoo.vespa.config.server.tenant.Tenant;
@@ -38,7 +39,10 @@ public class TenantHandlerTest {
public void setup() {
tenantRepository = new TenantRepository(new TestComponentRegistry.Builder().curator(new MockCurator()).build());
ApplicationRepository applicationRepository =
- new ApplicationRepository(tenantRepository, new SessionHandlerTest.MockProvisioner(), Clock.systemUTC());
+ new ApplicationRepository(tenantRepository,
+ new SessionHandlerTest.MockProvisioner(),
+ new OrchestratorMock(),
+ Clock.systemUTC());
handler = new TenantHandler(TenantHandler.testOnlyContext(), tenantRepository, applicationRepository);
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
index b92feffbb55..659baf5a184 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.maintenance;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.curator.Curator;
@@ -21,7 +22,10 @@ class MaintainerTester {
curator = new MockCurator();
GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder().curator(curator).build();
tenantRepository = new TenantRepository(componentRegistry, false);
- applicationRepository = new ApplicationRepository(tenantRepository, new SessionHandlerTest.MockProvisioner(), Clock.systemUTC());
+ applicationRepository = new ApplicationRepository(tenantRepository,
+ new SessionHandlerTest.MockProvisioner(),
+ new OrchestratorMock(),
+ Clock.systemUTC());
}
Curator curator() { return curator; }