summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java1
-rw-r--r--configserver/pom.xml12
-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.java19
-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/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/v2/ApplicationContentHandlerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java8
-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
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/orchestrator/Orchestrator.java15
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/OrchestratorMock.java1
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java2
-rw-r--r--serviceview/src/main/java/com/yahoo/vespa/serviceview/bindings/ApplicationView.java4
24 files changed, 203 insertions, 26 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
index 122d2bf18e3..dbc57dd5abd 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
@@ -9,7 +9,6 @@ import com.yahoo.cloud.config.ApplicationIdConfig;
* @author Ulf Lilleengen
* @author vegard
* @author bratseth
- * @since 5.1
*/
public final class ApplicationId implements Comparable<ApplicationId> {
diff --git a/configserver/pom.xml b/configserver/pom.xml
index 2aeecb1ba2f..a9cade47446 100644
--- a/configserver/pom.xml
+++ b/configserver/pom.xml
@@ -47,6 +47,18 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>orchestrator</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>application-model</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>config-bundle</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
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..f05ea5eee8d 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));
}
@@ -150,6 +154,11 @@ public class ApplicationHandler extends HttpHandler {
"http://*/application/v2/tenant/*/application/*");
}
+ private static boolean isIsSuspendedRequest(HttpRequest request) {
+ return getBindingMatch(request).groupCount() == 4 &&
+ request.getUri().getPath().endsWith("/suspended");
+ }
+
private static boolean isLogRequest(HttpRequest request) {
return getBindingMatch(request).groupCount() == 4 &&
request.getUri().getPath().endsWith("/logs");
@@ -228,4 +237,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/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/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..149b2e17bd9 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;
@@ -72,7 +73,9 @@ public class ApplicationHandlerTest {
tenantRepository.addTenant(TenantBuilder.create(componentRegistry, foobar));
provisioner = new SessionHandlerTest.MockProvisioner();
applicationRepository = new ApplicationRepository(tenantRepository,
- provisioner, Clock.systemUTC());
+ provisioner,
+ new OrchestratorMock(),
+ Clock.systemUTC());
listApplicationsHandler = new ListApplicationsHandler(ListApplicationsHandler.testOnlyContext(),
tenantRepository,
Zone.defaultZone());
@@ -150,7 +153,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>"));
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; }
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/orchestrator/Orchestrator.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/orchestrator/Orchestrator.java
index b5d41b7fbb4..ba4e7ab7b7c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/orchestrator/Orchestrator.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/orchestrator/Orchestrator.java
@@ -9,23 +9,28 @@ import java.util.List;
* @author bakksjo
*/
public interface Orchestrator {
+
/**
- * Invokes orchestrator suspend of a host.
- * @throws OrchestratorException if suspend was denied.
+ * Suspends a host.
+ *
+ * @throws OrchestratorException if suspend was denied
* @throws OrchestratorNotFoundException if host is unknown to the orchestrator
*/
void suspend(String hostName);
/**
- * Invokes orchestrator resume of a host.
+ * Resumes a host.
+ *
* @throws OrchestratorException if resume was denied
* @throws OrchestratorNotFoundException if host is unknown to the orchestrator
*/
void resume(String hostName);
/**
- * Invokes orchestrator suspend hosts.
- * @throws OrchestratorException if batch suspend was denied.
+ * Suspends a list of nodes on a parent.
+ *
+ * @throws OrchestratorException if batch suspend was denied
*/
void suspend(String parentHostName, List<String> hostNames);
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/OrchestratorMock.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/OrchestratorMock.java
index b38f8c91245..c71b0783d69 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/OrchestratorMock.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/OrchestratorMock.java
@@ -78,4 +78,5 @@ public class OrchestratorMock implements Orchestrator {
public void suspendAll(HostName parentHostname, List<HostName> hostNames) {
hostNames.forEach(this::suspend);
}
+
}
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java
index ab61a51c418..b2be4fe52ec 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java
@@ -33,6 +33,7 @@ public interface Orchestrator {
/**
* Get orchestrator information related to a host.
+ *
* @throws HostNameNotFoundException
*/
Host getHost(HostName hostName) throws HostNameNotFoundException;
@@ -119,4 +120,5 @@ public interface Orchestrator {
* @param appId Identifier of the application to resume
*/
void suspend(ApplicationId appId) throws ApplicationStateChangeDeniedException, ApplicationIdNotFoundException;
+
}
diff --git a/serviceview/src/main/java/com/yahoo/vespa/serviceview/bindings/ApplicationView.java b/serviceview/src/main/java/com/yahoo/vespa/serviceview/bindings/ApplicationView.java
index 00503212750..c3fb3616ca9 100644
--- a/serviceview/src/main/java/com/yahoo/vespa/serviceview/bindings/ApplicationView.java
+++ b/serviceview/src/main/java/com/yahoo/vespa/serviceview/bindings/ApplicationView.java
@@ -6,8 +6,10 @@ import java.util.List;
/**
* All clusters of a deployed application.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class ApplicationView {
+
public List<ClusterView> clusters;
+
}