diff options
6 files changed, 24 insertions, 15 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 426a3a17296..8bfe009677c 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,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.deployment; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.zone.ZoneId; /** * Store for the application and tester packages. @@ -37,10 +38,10 @@ public interface ApplicationStore { /** Removes all tester packages for the given tester. */ void removeAll(TesterId tester); - /** Stores the given application package as the development package for the given application. */ - void putDev(ApplicationId application, byte[] applicationPackage); + /** Stores the given application package as the development package for the given application and zone. */ + void putDev(ApplicationId application, ZoneId zone, byte[] applicationPackage); - /** Returns the development package for the given application. */ - byte[] getDev(ApplicationId application); + /** Returns the development package for the given application and zone. */ + byte[] getDev(ApplicationId application, ZoneId zone); } 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 913773bb9fe..472a0c5fb7e 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 @@ -158,7 +158,8 @@ public class InternalStepRunner implements StepRunner { private Optional<RunStatus> deployReal(RunId id, boolean setTheStage, Versions versions, DualLogger logger) { Optional<ApplicationPackage> applicationPackage = id.type().environment().isManuallyDeployed() - ? Optional.of(new ApplicationPackage(controller.applications().applicationStore().getDev(id.application()))) + ? Optional.of(new ApplicationPackage(controller.applications().applicationStore() + .getDev(id.application(), id.type().zone(controller.system())))) : Optional.empty(); Optional<Version> vespaVersion = id.type().environment().isManuallyDeployed() ? Optional.of(versions.targetPlatform()) 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 915de1f9856..c154feb4abe 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 @@ -308,7 +308,7 @@ public class JobController { last(id, type).filter(run -> ! run.hasEnded()).ifPresent(run -> abortAndWait(run.id())); locked(id, type, __ -> { - controller.applications().applicationStore().putDev(id, applicationPackage.zippedContent()); + controller.applications().applicationStore().putDev(id, type.zone(controller.system()), applicationPackage.zippedContent()); start(id, type, new Versions(platform.orElse(controller.systemVersion()), ApplicationVersion.unknown, Optional.empty(), diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java index bd0c11d20f6..21fd0ec87d4 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java @@ -61,7 +61,7 @@ public abstract class Maintainer extends AbstractComponent implements Runnable { @Override public void run() { try { - if (!permittedSystems.contains(controller.system())) { + if ( ! permittedSystems.contains(controller.system())) { return; } if (jobControl.isActive(name())) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java index 3105cb4143e..b53a7b39d61 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java @@ -19,6 +19,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType; import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud; import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockMailer; +import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import org.junit.Before; import org.junit.Test; @@ -280,7 +281,7 @@ public class InternalStepRunnerTest { @Test public void deployToDev() { ZoneId zone = JobType.devUsEast1.zone(tester.tester().controller().system()); - tester.jobs().deploy(appId, JobType.perfUsEast3, Optional.empty(), applicationPackage); + tester.jobs().deploy(appId, JobType.devUsEast1, Optional.empty(), applicationPackage); tester.runner().run(); RunId id = tester.jobs().last(appId, JobType.devUsEast1).get().id(); assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal)); @@ -293,13 +294,17 @@ public class InternalStepRunnerTest { tester.runner().run(); assertEquals(id.number() + 1, tester.jobs().last(appId, JobType.devUsEast1).get().id().number()); - tester.runner().run(); + ApplicationPackage otherPackage = new ApplicationPackageBuilder().region("us-central-1").build(); + tester.jobs().deploy(appId, JobType.perfUsEast3, Optional.empty(), otherPackage); + + tester.runner().run(); // Job run order determined by JobType enum order per application. tester.configServer().convergeServices(appId, zone); assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal)); + assertEquals(otherPackage.hash(), tester.configServer().application(appId).get().applicationPackage().hash()); tester.configServer().setVersion(appId, zone, version); tester.runner().run(); - assertTrue(tester.jobs().active().isEmpty()); + assertEquals(1, tester.jobs().active().size()); assertEquals(version, tester.tester().application(appId).deployments().get(zone).version()); try { 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 cb307a731b0..f59f81e21f2 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,7 @@ package com.yahoo.vespa.hosted.controller.integration; import com.yahoo.config.provision.ApplicationId; +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; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterId; @@ -20,7 +21,7 @@ import static org.junit.Assert.assertFalse; public class ApplicationStoreMock implements ApplicationStore { private final Map<ApplicationId, Map<ApplicationVersion, byte[]>> store = new ConcurrentHashMap<>(); - private final Map<ApplicationId, byte[]> devStore = new ConcurrentHashMap<>(); + private final Map<ApplicationId, Map<ZoneId, byte[]>> devStore = new ConcurrentHashMap<>(); @Override public byte[] get(ApplicationId application, ApplicationVersion applicationVersion) { @@ -70,13 +71,14 @@ public class ApplicationStoreMock implements ApplicationStore { } @Override - public void putDev(ApplicationId application, byte[] applicationPackage) { - devStore.put(application, applicationPackage); + public void putDev(ApplicationId application, ZoneId zone, byte[] applicationPackage) { + devStore.putIfAbsent(application, new ConcurrentHashMap<>()); + devStore.get(application).put(zone, applicationPackage); } @Override - public byte[] getDev(ApplicationId application) { - return requireNonNull(devStore.get(application)); + public byte[] getDev(ApplicationId application, ZoneId zone) { + return requireNonNull(devStore.get(application).get(zone)); } } |