summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authortoby <smorgrav@yahoo-inc.com>2018-08-15 14:22:10 +0200
committertoby <smorgrav@yahoo-inc.com>2018-08-15 14:33:52 +0200
commit8cf86105d90ad2aae9b74abf092e8a450c217863 (patch)
tree22f6867331eb9a3339ca73fcc39af4ccaa6e5572 /controller-server
parent506ea9c1367748ddd4ff20203fc13211d635f5a6 (diff)
Use application store in controller
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java14
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java8
-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/ControllerTester.java16
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java36
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java1
6 files changed, 77 insertions, 16 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 5e775ea6cd3..9f47472284f 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
@@ -25,6 +25,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServ
import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.NoInstanceException;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.PrepareResponse;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.vespa.hosted.controller.api.integration.dns.Record;
@@ -86,6 +87,7 @@ public class ApplicationController {
private final CuratorDb curator;
private final ArtifactRepository artifactRepository;
+ private final ApplicationStore applicationStore;
private final RotationRepository rotationRepository;
private final AthenzClientFactory zmsClientFactory;
private final NameService nameService;
@@ -98,7 +100,7 @@ public class ApplicationController {
ApplicationController(Controller controller, CuratorDb curator,
AthenzClientFactory zmsClientFactory, RotationsConfig rotationsConfig,
NameService nameService, ConfigServer configServer,
- ArtifactRepository artifactRepository,
+ ArtifactRepository artifactRepository, ApplicationStore applicationStore,
RoutingGenerator routingGenerator, BuildService buildService, Clock clock) {
this.controller = controller;
this.curator = curator;
@@ -109,6 +111,7 @@ public class ApplicationController {
this.clock = clock;
this.artifactRepository = artifactRepository;
+ this.applicationStore = applicationStore;
this.rotationRepository = new RotationRepository(rotationsConfig, this, curator);
this.deploymentTrigger = new DeploymentTrigger(controller, buildService, clock);
@@ -143,6 +146,8 @@ public class ApplicationController {
public ArtifactRepository artifacts() { return artifactRepository; }
+ public ApplicationStore applicationStore() { return applicationStore; }
+
/**
* Set the rotations marked as 'global' either 'in' or 'out of' service.
*
@@ -299,7 +304,12 @@ public class ApplicationController {
applicationVersion = preferOldestVersion
? triggered.sourceApplication().orElse(triggered.application())
: triggered.application();
- applicationPackage = new ApplicationPackage(artifactRepository.getApplicationPackage(application.get().id(), applicationVersion.id()));
+
+ if (application.get().deploymentJobs().builtInternally()) {
+ applicationPackage = new ApplicationPackage(applicationStore.getApplicationPackage(application.get().id(), applicationVersion.id()));
+ } else {
+ applicationPackage = new ApplicationPackage(artifactRepository.getApplicationPackage(application.get().id(), applicationVersion.id()));
+ }
validateRun(application.get(), zone, platformVersion, applicationVersion);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
index f8be9f55b84..22af16fdce8 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
@@ -17,6 +17,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.MetricsService;
import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzClientFactory;
import com.yahoo.vespa.hosted.controller.api.integration.chef.Chef;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServer;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
@@ -87,11 +88,12 @@ public class Controller extends AbstractComponent {
ZoneRegistry zoneRegistry, ConfigServer configServer,
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, AthenzClientFactory athenzClientFactory,
- ArtifactRepository artifactRepository, BuildService buildService, LogStore logStore) {
+ ArtifactRepository artifactRepository, ApplicationStore applicationStore,
+ BuildService buildService, LogStore logStore) {
this(curator, rotationsConfig,
gitHub, entityService, organization, globalRoutingService, zoneRegistry,
configServer, metricsService, nameService, routingGenerator, chef,
- Clock.systemUTC(), athenzClientFactory, artifactRepository, buildService,
+ Clock.systemUTC(), athenzClientFactory, artifactRepository, applicationStore, buildService,
logStore, com.yahoo.net.HostName::getLocalhost);
}
@@ -102,6 +104,7 @@ public class Controller extends AbstractComponent {
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, Clock clock,
AthenzClientFactory athenzClientFactory, ArtifactRepository artifactRepository,
+ ApplicationStore applicationStore,
BuildService buildService, LogStore logStore, Supplier<String> hostnameSupplier) {
this.hostnameSupplier = Objects.requireNonNull(hostnameSupplier, "HostnameSupplier cannot be null");
@@ -123,6 +126,7 @@ public class Controller extends AbstractComponent {
Objects.requireNonNull(nameService, "NameService cannot be null"),
configServer,
Objects.requireNonNull(artifactRepository, "ArtifactRepository cannot be null"),
+ Objects.requireNonNull(applicationStore, "ApplicationStore cannot be null"),
Objects.requireNonNull(routingGenerator, "RoutingGenerator cannot be null"),
Objects.requireNonNull(buildService, "BuildService cannot be null"),
clock);
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 cf9da750949..36dab609be3 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
@@ -167,7 +167,9 @@ public class JobController {
controller.applications().store(application.withBuiltInternally(true)));
}
- /** Accepts and stores a new application package and test jar pair under a generated application version key. */
+ /**
+ * Accepts and stores a new application package and test jar pair under a generated application version key.
+ */
public ApplicationVersion submit(ApplicationId id, SourceRevision revision,
byte[] applicationPackage, byte[] applicationTestPackage) {
AtomicReference<ApplicationVersion> version = new AtomicReference<>();
@@ -175,16 +177,16 @@ public class JobController {
long run = nextBuild(id);
version.set(ApplicationVersion.from(revision, run));
- controller.applications().artifacts().putApplicationPackage(id,
- version.get().id(),
- applicationPackage);
- controller.applications().artifacts().putTesterPackage(InternalStepRunner.testerOf(id),
- version.get().id(),
- applicationTestPackage);
+ controller.applications().applicationStore().putApplicationPackage(id,
+ version.get().id(),
+ applicationPackage);
+ controller.applications().applicationStore().putTesterPackage(InternalStepRunner.testerOf(id),
+ version.get().id(),
+ applicationTestPackage);
application = application.withBuiltInternally(true);
controller.applications().store(controller.applications().withUpdatedConfig(application,
- new ApplicationPackage(applicationPackage)));
+ new ApplicationPackage(applicationPackage)));
notifyOfNewSubmission(id, revision, run);
});
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 106cd280098..dcc28360696 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -15,6 +15,7 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService;
import com.yahoo.vespa.hosted.controller.api.integration.chef.ChefMock;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService;
@@ -30,6 +31,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzDbMock;
+import com.yahoo.vespa.hosted.controller.integration.ApplicationStoreMock;
import com.yahoo.vespa.hosted.controller.integration.ArtifactRepositoryMock;
import com.yahoo.vespa.hosted.controller.integration.ConfigServerMock;
import com.yahoo.vespa.hosted.controller.integration.MetricsServiceMock;
@@ -67,6 +69,7 @@ public final class ControllerTester {
private final MemoryNameService nameService;
private final RotationsConfig rotationsConfig;
private final ArtifactRepositoryMock artifactRepository;
+ private final ApplicationStoreMock applicationStore;
private final EntityService entityService;
private final MockBuildService buildService;
private final MetricsServiceMock metricsService;
@@ -78,7 +81,8 @@ public final class ControllerTester {
MetricsServiceMock metricsService) {
this(new AthenzDbMock(), clock, new ConfigServerMock(new ZoneRegistryMock()),
new ZoneRegistryMock(), new GitHubMock(), curatorDb, rotationsConfig,
- new MemoryNameService(), new ArtifactRepositoryMock(), new MemoryEntityService(), new MockBuildService(),
+ new MemoryNameService(), new ArtifactRepositoryMock(), new ApplicationStoreMock(),
+ new MemoryEntityService(), new MockBuildService(),
metricsService, new RoutingGeneratorMock());
}
@@ -102,6 +106,7 @@ public final class ControllerTester {
ConfigServerMock configServer, ZoneRegistryMock zoneRegistry,
GitHubMock gitHub, CuratorDb curator, RotationsConfig rotationsConfig,
MemoryNameService nameService, ArtifactRepositoryMock artifactRepository,
+ ApplicationStoreMock appStoreMock,
EntityService entityService, MockBuildService buildService,
MetricsServiceMock metricsService, RoutingGeneratorMock routingGenerator) {
this.athenzDb = athenzDb;
@@ -113,12 +118,13 @@ public final class ControllerTester {
this.nameService = nameService;
this.rotationsConfig = rotationsConfig;
this.artifactRepository = artifactRepository;
+ this.applicationStore = appStoreMock;
this.entityService = entityService;
this.buildService = buildService;
this.metricsService = metricsService;
this.routingGenerator = routingGenerator;
this.controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry,
- athenzDb, nameService, artifactRepository, entityService, buildService,
+ athenzDb, nameService, artifactRepository, appStoreMock, entityService, buildService,
metricsService, routingGenerator);
// Make root logger use time from manual clock
@@ -158,7 +164,7 @@ public final class ControllerTester {
/** Create a new controller instance. Useful to verify that controller state is rebuilt from persistence */
public final void createNewController() {
controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry, athenzDb,
- nameService, artifactRepository, entityService, buildService, metricsService,
+ nameService, artifactRepository, applicationStore, entityService, buildService, metricsService,
routingGenerator);
}
@@ -272,7 +278,8 @@ public final class ControllerTester {
ConfigServerMock configServer, ManualClock clock,
GitHubMock gitHub, ZoneRegistryMock zoneRegistryMock,
AthenzDbMock athensDb, MemoryNameService nameService,
- ArtifactRepository artifactRepository, EntityService entityService,
+ ArtifactRepository artifactRepository, ApplicationStore applicationStore,
+ EntityService entityService,
BuildService buildService, MetricsServiceMock metricsService,
RoutingGenerator routingGenerator) {
Controller controller = new Controller(curator,
@@ -290,6 +297,7 @@ public final class ControllerTester {
clock,
new AthenzClientFactoryMock(athensDb),
artifactRepository,
+ applicationStore,
buildService,
new MockLogStore(),
() -> "test-controller");
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
new file mode 100644
index 00000000000..bb242dd7989
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java
@@ -0,0 +1,36 @@
+package com.yahoo.vespa.hosted.controller.integration;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ApplicationStoreMock implements ApplicationStore {
+
+ Map<String, byte[]> store = new HashMap<>();
+
+ @Override
+ public byte[] getApplicationPackage(ApplicationId application, String applicationVersion) {
+ return store.get(path(application, applicationVersion));
+ }
+
+ @Override
+ public void putApplicationPackage(ApplicationId application, String applicationVersion, byte[] applicationPackage) {
+ store.put(path(application, applicationVersion), applicationPackage);
+ }
+
+ @Override
+ public void putTesterPackage(ApplicationId tester, String applicationVersion, byte[] testerPackage) {
+ store.put(path(tester, applicationVersion), testerPackage);
+ }
+
+ @Override
+ public byte[] getTesterPackage(ApplicationId tester, String applicationVersion) {
+ return store.get(path(tester, applicationVersion));
+ }
+
+ String path(ApplicationId tester, String applicationVersion) {
+ return tester.toString() + applicationVersion;
+ }
+}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
index 639cfad9958..978e8bce2f4 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
@@ -81,6 +81,7 @@ public class ControllerContainerTest {
" <component id='com.yahoo.vespa.hosted.controller.maintenance.JobControl'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.integration.RoutingGeneratorMock'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.integration.ArtifactRepositoryMock'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.controller.integration.ApplicationStoreMock'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.stubs.MockTesterCloud'/>\n" +
" <handler id='com.yahoo.vespa.hosted.controller.restapi.application.ApplicationApiHandler'>\n" +
" <binding>http://*/application/v4/*</binding>\n" +