summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-10-09 15:02:26 +0200
committerJon Marius Venstad <venstad@gmail.com>2019-10-09 15:02:26 +0200
commita067eff9ee5a32a5b3f42edb3869a5508b18f7eb (patch)
tree432acaa325188537ac840aef44332b5ce69c9691
parentb8ede085e24ebb386e490966ceb89d6ce3203cbd (diff)
Store prod packages without instance element
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java18
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java54
5 files changed, 55 insertions, 45 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
index 8bfe009677c..5cd29fcd48e 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
@@ -2,6 +2,8 @@
package com.yahoo.vespa.hosted.controller.api.integration.deployment;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.ApplicationName;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
/**
@@ -15,28 +17,28 @@ import com.yahoo.config.provision.zone.ZoneId;
public interface ApplicationStore {
/** Returns the tenant application package of the given version. */
- byte[] get(ApplicationId application, ApplicationVersion applicationVersion);
+ byte[] get(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion);
/** Stores the given tenant application package of the given version. */
- void put(ApplicationId application, ApplicationVersion applicationVersion, byte[] applicationPackage);
+ void put(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion, byte[] applicationPackage);
/** Removes applications older than the given version, for the given application, and returns whether something was removed. */
- boolean prune(ApplicationId application, ApplicationVersion olderThanVersion);
+ boolean prune(TenantName tenant, ApplicationName application, ApplicationVersion olderThanVersion);
/** Removes all application packages for the given application, including any development package. */
- void removeAll(ApplicationId application);
+ void removeAll(TenantName tenant, ApplicationName application);
/** Returns the tester application package of the given version. Does NOT contain the services.xml. */
- byte[] get(TesterId tester, ApplicationVersion applicationVersion);
+ byte[] getTester(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion);
/** Stores the given tester application package of the given version. Does NOT contain the services.xml. */
- void put(TesterId tester, ApplicationVersion applicationVersion, byte[] testerPackage);
+ void putTester(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion, byte[] testerPackage);
/** Removes tester packages older than the given version, for the given tester, and returns whether something was removed. */
- boolean prune(TesterId tester, ApplicationVersion olderThanVersion);
+ boolean pruneTesters(TenantName tenant, ApplicationName application, ApplicationVersion olderThanVersion);
/** Removes all tester packages for the given tester. */
- void removeAll(TesterId tester);
+ void removeAllTesters(TenantName tenant, ApplicationName application);
/** Stores the given application package as the development package for the given application and zone. */
void putDev(ApplicationId application, ZoneId zone, byte[] applicationPackage);
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 8592460a24f..59c81778890 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
@@ -434,7 +434,7 @@ public class ApplicationController {
public ApplicationPackage getApplicationPackage(ApplicationId id, boolean internal, ApplicationVersion version) {
try {
return internal
- ? new ApplicationPackage(applicationStore.get(id, version))
+ ? new ApplicationPackage(applicationStore.get(id.tenant(), id.application(), version))
: new ApplicationPackage(artifactRepository.getApplicationPackage(id, version.id()));
}
catch (RuntimeException e) { // If application has switched deployment pipeline, artifacts stored prior to the switch are in the other artifact store.
@@ -443,7 +443,7 @@ public class ApplicationController {
+ (internal ? "internally" : "externally") + "\nException was: " + Exceptions.toMessageString(e));
return internal
? new ApplicationPackage(artifactRepository.getApplicationPackage(id, version.id()))
- : new ApplicationPackage(applicationStore.get(id, version));
+ : new ApplicationPackage(applicationStore.get(id.tenant(), id.application(), version));
}
catch (RuntimeException s) { // If this fails, too, the first failure is most likely the relevant one.
e.addSuppressed(s);
@@ -759,8 +759,8 @@ public class ApplicationController {
application.get().require(instanceId.instance()).deployments().keySet().stream().map(ZoneId::toString)
.sorted().collect(Collectors.joining(", ")));
- applicationStore.removeAll(instanceId);
- applicationStore.removeAll(TesterId.of(instanceId));
+ applicationStore.removeAll(instanceId.tenant(), instanceId.application());
+ applicationStore.removeAllTesters(instanceId.tenant(), instanceId.application());
Instance instance = application.get().require(instanceId.instance());
instance.rotations().forEach(assignedRotation -> {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
index c07ae8f5571..7c656da3a67 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
@@ -651,7 +651,7 @@ public class InternalStepRunner implements StepRunner {
.map(NodeResources::fromLegacyName)
.orElse(zone.region().value().contains("aws-") ?
DEFAULT_TESTER_RESOURCES_AWS : DEFAULT_TESTER_RESOURCES));
- byte[] testPackage = controller.applications().applicationStore().get(id.tester(), version);
+ byte[] testPackage = controller.applications().applicationStore().getTester(id.application().tenant(), id.application().application(), version);
byte[] deploymentXml = deploymentXml(spec.athenzDomain(), spec.athenzService(zone.environment(), zone.region()));
try (ZipBuilder zipBuilder = new ZipBuilder(testPackage.length + servicesXml.length + 1000)) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index fb1d6e7ad38..fcc7271e44b 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -26,8 +26,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterId;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.Deployment;
-import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
-import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
import com.yahoo.vespa.hosted.controller.persistence.BufferedLogStore;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
@@ -315,12 +313,14 @@ public class JobController {
else
version.set(ApplicationVersion.from(revision, run, authorEmail));
- controller.applications().applicationStore().put(id.defaultInstance(),
+ controller.applications().applicationStore().put(id.tenant(),
+ id.application(),
version.get(),
applicationPackage.zippedContent());
- controller.applications().applicationStore().put(TesterId.of(id.defaultInstance()),
- version.get(),
- testPackageBytes);
+ controller.applications().applicationStore().putTester(id.tenant(),
+ id.application(),
+ version.get(),
+ testPackageBytes);
prunePackages(id);
controller.applications().storeWithUpdatedConfig(application, applicationPackage);
@@ -340,7 +340,7 @@ public class JobController {
.distinct()
.forEach(appVersion -> {
byte[] content = controller.applications().artifacts().getApplicationPackage(instance.id(), appVersion.id());
- controller.applications().applicationStore().put(instance.id(), appVersion, content);
+ controller.applications().applicationStore().put(instance.id().tenant(), instance.id().application(), appVersion, content);
});
}
// Make sure any ongoing upgrade is cancelled, since future jobs will require the tester artifact.
@@ -513,8 +513,8 @@ public class JobController {
.map(Deployment::applicationVersion)
.min(Comparator.comparingLong(applicationVersion -> applicationVersion.buildNumber().getAsLong()))
.ifPresent(oldestDeployed -> {
- controller.applications().applicationStore().prune(id.defaultInstance(), oldestDeployed);
- controller.applications().applicationStore().prune(TesterId.of(id.defaultInstance()), oldestDeployed);
+ controller.applications().applicationStore().prune(id.tenant(), id.application(), oldestDeployed);
+ controller.applications().applicationStore().pruneTesters(id.tenant(), id.application(), oldestDeployed);
});
});
}
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 f59f81e21f2..48d573edd05 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
@@ -2,6 +2,9 @@
package com.yahoo.vespa.hosted.controller.integration;
import com.yahoo.config.provision.ApplicationId;
+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.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
@@ -23,51 +26,56 @@ 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 static ApplicationId appId(TenantName tenant, ApplicationName application) {
+ return ApplicationId.from(tenant, application, InstanceName.defaultName());
+ }
+
+ private static ApplicationId testerId(TenantName tenant, ApplicationName application) {
+ return TesterId.of(appId(tenant, application)).id();
+ }
+
@Override
- public byte[] get(ApplicationId application, ApplicationVersion applicationVersion) {
- assertFalse(application.instance().isTester());
- return requireNonNull(store.get(application).get(applicationVersion));
+ public byte[] get(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion) {
+ return requireNonNull(store.get(appId(tenant, application)).get(applicationVersion));
}
@Override
- public void put(ApplicationId application, ApplicationVersion applicationVersion, byte[] applicationPackage) {
- assertFalse(application.instance().isTester());
- store.putIfAbsent(application, new ConcurrentHashMap<>());
- store.get(application).put(applicationVersion, applicationPackage);
+ public void put(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion, byte[] applicationPackage) {
+ store.putIfAbsent(appId(tenant, application), new ConcurrentHashMap<>());
+ store.get(appId(tenant, application)).put(applicationVersion, applicationPackage);
}
@Override
- public boolean prune(ApplicationId application, ApplicationVersion oldestToRetain) {
- assertFalse(application.instance().isTester());
- return store.containsKey(application)
- && store.get(application).keySet().removeIf(version -> version.compareTo(oldestToRetain) < 0);
+ public boolean prune(TenantName tenant, ApplicationName application, ApplicationVersion oldestToRetain) {
+ return store.containsKey(appId(tenant, application))
+ && store.get(appId(tenant, application)).keySet().removeIf(version -> version.compareTo(oldestToRetain) < 0);
}
@Override
- public void removeAll(ApplicationId application) {
- store.remove(application);
+ public void removeAll(TenantName tenant, ApplicationName application) {
+ store.remove(appId(tenant, application));
}
@Override
- public byte[] get(TesterId tester, ApplicationVersion applicationVersion) {
- return requireNonNull(store.get(tester.id()).get(applicationVersion));
+ public byte[] getTester(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion) {
+ return requireNonNull(store.get(testerId(tenant, application)).get(applicationVersion));
}
@Override
- public void put(TesterId tester, ApplicationVersion applicationVersion, byte[] testerPackage) {
- store.putIfAbsent(tester.id(), new ConcurrentHashMap<>());
- store.get(tester.id()).put(applicationVersion, testerPackage);
+ public void putTester(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion, byte[] testerPackage) {
+ store.putIfAbsent(testerId(tenant, application), new ConcurrentHashMap<>());
+ store.get(testerId(tenant, application)).put(applicationVersion, testerPackage);
}
@Override
- public boolean prune(TesterId tester, ApplicationVersion oldestToRetain) {
- return store.containsKey(tester.id())
- && store.get(tester.id()).keySet().removeIf(version -> version.compareTo(oldestToRetain) < 0);
+ public boolean pruneTesters(TenantName tenant, ApplicationName application, ApplicationVersion oldestToRetain) {
+ return store.containsKey(testerId(tenant, application))
+ && store.get(testerId(tenant, application)).keySet().removeIf(version -> version.compareTo(oldestToRetain) < 0);
}
@Override
- public void removeAll(TesterId tester) {
- store.remove(tester.id());
+ public void removeAllTesters(TenantName tenant, ApplicationName application) {
+ store.remove(testerId(tenant, application));
}
@Override