diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2019-10-09 15:02:26 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2019-10-09 15:02:26 +0200 |
commit | a067eff9ee5a32a5b3f42edb3869a5508b18f7eb (patch) | |
tree | 432acaa325188537ac840aef44332b5ce69c9691 | |
parent | b8ede085e24ebb386e490966ceb89d6ce3203cbd (diff) |
Store prod packages without instance element
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 |