summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-09-03 15:35:23 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-09-03 15:35:23 +0200
commit44da4cfa11687ee78f91086302db26c574b1f642 (patch)
tree12120d6fcdb7076e883733795f15c21672effa7d /controller-server
parent44ff5b1d1caddc5f0e3db3da54a2654e765f7305 (diff)
Store meta data for deployment and deactivation of manual deployments
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java13
2 files changed, 20 insertions, 2 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index 4cd8f56f53d..d8abc77ed06 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -527,6 +527,11 @@ public class ApplicationController {
Optional<Quota> quota = billingController.getQuota(application.tenant(), zone.environment());
+ if (zone.environment().isManuallyDeployed())
+ controller.applications().applicationStore().putMeta(new DeploymentId(application, zone),
+ clock.instant(),
+ applicationPackage.metaDataZip());
+
ConfigServer.PreparedApplication preparedApplication =
configServer.deploy(new DeploymentData(application, zone, applicationPackage.zippedContent(), platform,
endpoints, endpointCertificateMetadata, dockerImageRepo, domain, applicationRoles, quota));
@@ -713,12 +718,14 @@ public class ApplicationController {
* @return the application with the deployment in the given zone removed
*/
private LockedApplication deactivate(LockedApplication application, InstanceName instanceName, ZoneId zone) {
+ DeploymentId id = new DeploymentId(application.get().id().instance(instanceName), zone);
try {
- configServer.deactivate(new DeploymentId(application.get().id().instance(instanceName), zone));
+ configServer.deactivate(id);
} catch (NotFoundException ignored) {
// ok; already gone
} finally {
controller.routing().policies().refresh(application.get().id().instance(instanceName), application.get().deploymentSpec(), zone);
+ applicationStore.putMetaTombstone(id, clock.instant());
}
return application.with(instanceName, instance -> instance.withoutDeploymentIn(zone));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java
index be0cd975190..81bda23146e 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterId;
@@ -14,7 +15,6 @@ import java.time.Instant;
import java.util.Map;
import java.util.NavigableMap;
import java.util.Optional;
-import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -32,6 +32,7 @@ public class ApplicationStoreMock implements ApplicationStore {
private final Map<ApplicationId, Map<ApplicationVersion, byte[]>> store = new ConcurrentHashMap<>();
private final Map<ApplicationId, Map<ZoneId, byte[]>> devStore = new ConcurrentHashMap<>();
private final Map<ApplicationId, NavigableMap<Instant, byte[]>> meta = new ConcurrentHashMap<>();
+ private final Map<DeploymentId, NavigableMap<Instant, byte[]>> metaManual = new ConcurrentHashMap<>();
private static ApplicationId appId(TenantName tenant, ApplicationName application) {
return ApplicationId.from(tenant, application, InstanceName.defaultName());
@@ -120,6 +121,16 @@ public class ApplicationStoreMock implements ApplicationStore {
}
@Override
+ public void putMeta(DeploymentId id, Instant now, byte[] metaZip) {
+ metaManual.computeIfAbsent(id, __ -> new ConcurrentSkipListMap<>()).put(now, metaZip);
+ }
+
+ @Override
+ public void putMetaTombstone(DeploymentId id, Instant now) {
+ putMeta(id, now, tombstone);
+ }
+
+ @Override
public void pruneMeta(Instant oldest) {
for (ApplicationId id : meta.keySet()) {
Instant activeAtOldest = meta.get(id).lowerKey(oldest);