diff options
author | Harald Musum <musum@yahoo-inc.com> | 2016-09-15 14:36:18 +0200 |
---|---|---|
committer | Harald Musum <musum@yahoo-inc.com> | 2016-09-15 14:36:18 +0200 |
commit | b98805c6f63b428d62e715ac64630dfe12d126ac (patch) | |
tree | e32e3eb85c42bd9c4f68e0a7927acbc8f497516e /configserver | |
parent | e45e56adbc80c3efe7b03fd3f41b46739164f023 (diff) |
Refactoring to separate some business logic into ApplicationRepository
* Start refactoring, no functional changes, more to be done
Diffstat (limited to 'configserver')
7 files changed, 55 insertions, 37 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 6ed1ddf6c7e..9c742bc29f9 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.config.server; import com.yahoo.cloud.config.ConfigserverConfig; + import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Provisioner; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionActiveHandlerBase.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionActiveHandlerBase.java index cc4689682dd..b54c722a7e4 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionActiveHandlerBase.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionActiveHandlerBase.java @@ -1,39 +1,38 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http; -import com.yahoo.config.provision.Provisioner; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.logging.AccessLog; import com.yahoo.vespa.config.server.tenant.ActivateLock; import com.yahoo.vespa.config.server.TimeoutBudget; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.deploy.Deployment; -import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.config.server.session.LocalSession; import com.yahoo.vespa.config.server.session.LocalSessionRepo; -import java.util.Optional; import java.util.concurrent.Executor; /** * @author lulf */ public class SessionActiveHandlerBase extends SessionHandler { + private final ApplicationRepository applicationRepository; - public SessionActiveHandlerBase(Executor executor, AccessLog accessLog) { + public SessionActiveHandlerBase(Executor executor, AccessLog accessLog, ApplicationRepository applicationRepository ) { super(executor, accessLog); + this.applicationRepository = applicationRepository; } protected void activate(HttpRequest request, LocalSessionRepo localSessionRepo, ActivateLock activateLock, TimeoutBudget timeoutBudget, - Optional<Provisioner> hostProvisioner, LocalSession localSession) { - // TODO: Use an injected applicationRepository from the callers of this instead - // TODO: And then get rid of the activateLock and localSessionRepo arguments in deployFromPreparedSession - ApplicationRepository applicationRepository = new ApplicationRepository(null, HostProvisionerProvider.from(hostProvisioner), null, null); - Deployment deployment = applicationRepository.deployFromPreparedSession(localSession, activateLock, localSessionRepo, timeoutBudget.timeLeft()); + // TODO: Get rid of the activateLock and localSessionRepo arguments in deployFromPreparedSession + Deployment deployment = applicationRepository.deployFromPreparedSession(localSession, + activateLock, + localSessionRepo, + timeoutBudget.timeLeft()); deployment.setIgnoreLockFailure(shouldIgnoreLockFailure(request)); deployment.setIgnoreSessionStaleFailure(shouldIgnoreSessionStaleFailure(request)); deployment.activate(); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index c0482ad5d99..9e49ebd1fad 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -1,7 +1,6 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http.v2; -import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.HostFilter; @@ -32,7 +31,6 @@ import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.config.server.session.LocalSession; import com.yahoo.vespa.config.server.session.RemoteSession; import com.yahoo.vespa.config.server.session.RemoteSessionRepo; -import com.yahoo.vespa.curator.Curator; import java.io.IOException; import java.time.Clock; @@ -59,18 +57,20 @@ public class ApplicationHandler extends HttpHandler { private final LogServerLogGrabber logServerLogGrabber; private final ApplicationRepository applicationRepository; - public ApplicationHandler(Executor executor, AccessLog accessLog, Tenants tenants, - HostProvisionerProvider hostProvisionerProvider, Zone zone, + public ApplicationHandler(Executor executor, AccessLog accessLog, + Tenants tenants, + HostProvisionerProvider hostProvisionerProvider, + Zone zone, ApplicationConvergenceChecker convergeChecker, LogServerLogGrabber logServerLogGrabber, - ConfigserverConfig configserverConfig, Curator curator) { + ApplicationRepository applicationRepository) { super(executor, accessLog); this.tenants = tenants; this.hostProvisioner = hostProvisionerProvider.getHostProvisioner(); this.zone = zone; this.convergeChecker = convergeChecker; this.logServerLogGrabber = logServerLogGrabber; - this.applicationRepository = new ApplicationRepository(tenants, hostProvisionerProvider, configserverConfig, curator); + this.applicationRepository = applicationRepository; } @Override diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java index 89463a0b8ee..af8288374f3 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandler.java @@ -1,24 +1,22 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http.v2; -import java.util.Optional; import java.util.concurrent.Executor; import com.google.inject.Inject; -import com.yahoo.config.provision.Provisioner; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.logging.AccessLog; import com.yahoo.log.LogLevel; +import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.tenant.Tenant; import com.yahoo.vespa.config.server.tenant.Tenants; import com.yahoo.vespa.config.server.TimeoutBudget; import com.yahoo.vespa.config.server.http.SessionActiveHandlerBase; import com.yahoo.vespa.config.server.http.SessionHandler; import com.yahoo.vespa.config.server.http.Utils; -import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.config.server.session.LocalSession; /** @@ -30,18 +28,16 @@ import com.yahoo.vespa.config.server.session.LocalSession; public class SessionActiveHandler extends SessionActiveHandlerBase { private final Tenants tenants; - private final Optional<Provisioner> hostProvisioner; private final Zone zone; @Inject public SessionActiveHandler(Executor executor, AccessLog accessLog, Tenants tenants, - HostProvisionerProvider hostProvisionerProvider, - Zone zone) { - super(executor, accessLog); + Zone zone, + ApplicationRepository applicationRepository) { + super(executor, accessLog, applicationRepository); this.tenants = tenants; - this.hostProvisioner = hostProvisionerProvider.getHostProvisioner(); this.zone = zone; } @@ -52,7 +48,7 @@ public class SessionActiveHandler extends SessionActiveHandlerBase { log.log(LogLevel.DEBUG, "Found tenant '" + tenantName + "' in request"); Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName); LocalSession localSession = getSessionFromRequestV2(tenant.getLocalSessionRepo(), request); - activate(request, tenant.getLocalSessionRepo(), tenant.getActivateLock(), timeoutBudget, hostProvisioner, localSession); + activate(request, tenant.getLocalSessionRepo(), tenant.getActivateLock(), timeoutBudget, localSession); return new SessionActiveResponse(localSession.getMetaData().getSlime(), tenantName, request, localSession, zone); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java index f92bfa7d866..c5925104484 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http.v2; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; @@ -9,9 +10,11 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.logging.AccessLog; import com.yahoo.jdisc.Response; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.http.ContentHandlerTestBase; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.config.server.session.Session; +import com.yahoo.vespa.curator.mock.MockCurator; import org.junit.Before; import org.junit.Test; @@ -51,7 +54,17 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase { testTenantBuilder.tenants().get(tenant2).getLocalSessionRepo().addSession(new MockSession(3l, FilesApplicationPackage.fromFile(new File("src/test/apps/content2")))); testTenantBuilder.tenants().get(tenant1).getApplicationRepo().createPutApplicationTransaction(idTenant1, 2l).commit(); testTenantBuilder.tenants().get(tenant2).getApplicationRepo().createPutApplicationTransaction(idTenant2, 3l).commit(); - handler = new ApplicationHandler(command -> command.run(), AccessLog.voidAccessLog(), testTenantBuilder.createTenants(), HostProvisionerProvider.empty(), Zone.defaultZone(), null, null, null, null); + handler = new ApplicationHandler(command -> command.run(), + AccessLog.voidAccessLog(), + testTenantBuilder.createTenants(), + HostProvisionerProvider.empty(), + Zone.defaultZone(), + null, + null, + new ApplicationRepository(testTenantBuilder.createTenants(), + HostProvisionerProvider.empty(), + new ConfigserverConfig(new ConfigserverConfig.Builder()), + new MockCurator())); pathPrefix = createPath(idTenant1, Zone.defaultZone()); baseUrl = baseServer + pathPrefix; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java index a1a4a3413ba..7bd4a26180f 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.config.server.http.v2; import com.fasterxml.jackson.databind.ObjectMapper; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.application.provider.FilesApplicationPackage; @@ -15,6 +16,7 @@ import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.logging.AccessLog; import com.yahoo.jdisc.Response; import com.yahoo.path.Path; +import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.MockReloadHandler; import com.yahoo.vespa.config.server.SuperModelGenerationCounter; @@ -100,8 +102,10 @@ public class ApplicationHandlerTest { Zone.defaultZone(), convergeChecker, logServerLogGrabber, - null, - null); + new ApplicationRepository(tenants, + HostProvisionerProvider.withProvisioner(provisioner), + new ConfigserverConfig(new ConfigserverConfig.Builder()), + new MockCurator())); } private ApplicationHandler createApplicationHandler(Tenants tenants) { @@ -113,8 +117,10 @@ public class ApplicationHandlerTest { Zone.defaultZone(), new ApplicationConvergenceChecker(stateApiFactory), new LogServerLogGrabber(), - null, - null); + new ApplicationRepository(tenants, + HostProvisionerProvider.withProvisioner(provisioner), + new ConfigserverConfig(new ConfigserverConfig.Builder()), + new MockCurator())); } @Test diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java index 0b0c4ad0629..0af43649351 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java @@ -5,8 +5,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Collection; import java.util.List; -import java.util.concurrent.Executor; +import java.util.Optional; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.provision.*; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.logging.AccessLog; @@ -158,13 +159,15 @@ public class SessionActiveHandlerTest extends SessionActiveHandlerTestBase { .withRemoteSessionRepo(remoteSessionRepo) .withApplicationRepo(applicationRepo) .build(); - return new SessionActiveHandler(new Executor() { - @SuppressWarnings("NullableProblems") - @Override - public void execute(Runnable command) { - command.run(); - } - }, AccessLog.voidAccessLog(), testTenantBuilder.createTenants(), HostProvisionerProvider.withProvisioner(hostProvisioner), Zone.defaultZone()); + return new SessionActiveHandler( + Runnable::run, + AccessLog.voidAccessLog(), + testTenantBuilder.createTenants(), + Zone.defaultZone(), + new ApplicationRepository(testTenantBuilder.createTenants(), + HostProvisionerProvider.withProvisioner(hostProvisioner), + new ConfigserverConfig(new ConfigserverConfig.Builder()), + curator)); } public static class MockProvisioner implements Provisioner { |