summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-10-02 08:11:04 +0200
committerGitHub <noreply@github.com>2020-10-02 08:11:04 +0200
commit8ddab0e00447e6f69733d490bec47b16626315e4 (patch)
tree3d6e56981197aa8b59ccd069c1d20d6e9718c8aa
parenta55a4e1d042b297d90c317b3591e5a25fd10c4fd (diff)
Revert "Cleanup some config server code "
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java43
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java24
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java6
8 files changed, 55 insertions, 45 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 5bbe9c967cf..902553e9610 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
@@ -285,14 +285,13 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
bootstrapping.set(false);
}
- public PrepareResult prepare(long sessionId, PrepareParams prepareParams) {
+ public PrepareResult prepare(Tenant tenant, long sessionId, PrepareParams prepareParams) {
DeployHandlerLogger logger = DeployHandlerLogger.forPrepareParams(prepareParams);
- Deployment deployment = prepare(sessionId, prepareParams, logger);
+ Deployment deployment = prepare(tenant, sessionId, prepareParams, logger);
return new PrepareResult(sessionId, deployment.configChangeActions(), logger);
}
- private Deployment prepare(long sessionId, PrepareParams prepareParams, DeployHandlerLogger logger) {
- Tenant tenant = getTenant(prepareParams.getApplicationId());
+ private Deployment prepare(Tenant tenant, long sessionId, PrepareParams prepareParams, DeployLogger logger) {
validateThatLocalSessionIsNotActive(tenant, sessionId);
LocalSession session = getLocalSession(tenant, sessionId);
ApplicationId applicationId = prepareParams.getApplicationId();
@@ -326,7 +325,8 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
public PrepareResult deploy(File applicationPackage, PrepareParams prepareParams, DeployHandlerLogger logger) {
ApplicationId applicationId = prepareParams.getApplicationId();
long sessionId = createSession(applicationId, prepareParams.getTimeoutBudget(), applicationPackage);
- Deployment deployment = prepare(sessionId, prepareParams, logger);
+ Tenant tenant = getTenant(applicationId);
+ Deployment deployment = prepare(tenant, sessionId, prepareParams, logger);
deployment.activate();
return new PrepareResult(sessionId, deployment.configChangeActions(), logger);
@@ -653,10 +653,11 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
}
public List<Version> getAllVersions(ApplicationId applicationId) {
- Optional<ApplicationSet> applicationSet = getActiveApplicationSet(applicationId);
- return applicationSet.isEmpty()
- ? List.of()
- : applicationSet.get().getAllVersions(applicationId);
+ Optional<ApplicationSet> applicationSet = getCurrentActiveApplicationSet(getTenant(applicationId), applicationId);
+ if (applicationSet.isEmpty())
+ return List.of();
+ else
+ return applicationSet.get().getAllVersions(applicationId);
}
// ---------------- Convergence ----------------------------------------------------------------
@@ -794,9 +795,14 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
}
public long createSession(ApplicationId applicationId, TimeoutBudget timeoutBudget, File applicationDirectory) {
- SessionRepository sessionRepository = getTenant(applicationId).getSessionRepository();
- LocalSession session = sessionRepository.createSession(applicationDirectory, applicationId, timeoutBudget);
- sessionRepository.addLocalSession(session);
+ Tenant tenant = getTenant(applicationId);
+ tenant.getApplicationRepo().createApplication(applicationId);
+ Optional<Long> activeSessionId = tenant.getApplicationRepo().activeSessionOf(applicationId);
+ LocalSession session = tenant.getSessionRepository().createSession(applicationDirectory,
+ applicationId,
+ timeoutBudget,
+ activeSessionId);
+ tenant.getSessionRepository().addLocalSession(session);
return session.getSessionId();
}
@@ -924,8 +930,17 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
return session;
}
- public Optional<ApplicationSet> getActiveApplicationSet(ApplicationId appId) {
- return getTenant(appId).getSessionRepository().getActiveApplicationSet(appId);
+ public Optional<ApplicationSet> getCurrentActiveApplicationSet(Tenant tenant, ApplicationId appId) {
+ Optional<ApplicationSet> currentActiveApplicationSet = Optional.empty();
+ TenantApplications applicationRepo = tenant.getApplicationRepo();
+ try {
+ long currentActiveSessionId = applicationRepo.requireActiveSessionOf(appId);
+ RemoteSession currentActiveSession = getRemoteSession(tenant, currentActiveSessionId);
+ currentActiveApplicationSet = Optional.ofNullable(currentActiveSession.ensureApplicationLoaded());
+ } catch (IllegalArgumentException e) {
+ // Do nothing if we have no currently active session
+ }
+ return currentActiveApplicationSet;
}
private File decompressApplication(InputStream in, String contentType, File tempDir) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
index ed5f1b2d056..fc7bd70679a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
@@ -11,6 +11,7 @@ import com.yahoo.config.provision.Provisioner;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.ApplicationRepository.ActionTimer;
import com.yahoo.vespa.config.server.TimeoutBudget;
+import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
import com.yahoo.vespa.config.server.configchange.RestartActions;
import com.yahoo.vespa.config.server.http.InternalServerException;
@@ -99,9 +100,9 @@ public class Deployment implements com.yahoo.config.provision.Deployment {
ApplicationId applicationId = params.getApplicationId();
try (ActionTimer timer = applicationRepository.timerFor(applicationId, "deployment.prepareMillis")) {
+ Optional<ApplicationSet> activeApplicationSet = applicationRepository.getCurrentActiveApplicationSet(tenant, applicationId);
this.configChangeActions = tenant.getSessionRepository().prepareLocalSession(
- session, deployLogger, params, tenant.getPath(), clock.instant());
-
+ session, deployLogger, params, activeApplicationSet, tenant.getPath(), clock.instant());
this.prepared = true;
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
index 6fa2075807f..258af35be6f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandler.java
@@ -34,12 +34,13 @@ public class SessionPrepareHandler extends SessionHandler {
this.zookeeperBarrierTimeout = Duration.ofSeconds(configserverConfig.zookeeper().barrierTimeout());
}
- @Override
+ @Override
protected HttpResponse handlePUT(HttpRequest request) {
+ Tenant tenant = getExistingTenant(request);
+ TenantName tenantName = tenant.getName();
long sessionId = getSessionIdV2(request);
- TenantName tenantName = getExistingTenant(request).getName();
PrepareParams prepareParams = PrepareParams.fromHttpRequest(request, tenantName, zookeeperBarrierTimeout);
- PrepareResult result = applicationRepository.prepare(sessionId, prepareParams);
+ PrepareResult result = applicationRepository.prepare(tenant, sessionId, prepareParams);
return new SessionPrepareResponse(result, tenantName, request);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java
index 9417a798d1f..7e410503907 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java
@@ -13,6 +13,7 @@ import com.yahoo.vespa.curator.Curator;
import org.apache.zookeeper.KeeperException;
import java.time.Clock;
+import java.util.Optional;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -57,13 +58,13 @@ public class RemoteSession extends Session {
ApplicationPackage applicationPackage = sessionZooKeeperClient.loadApplicationPackage();
// Read hosts allocated on the config server instance which created this
- SettableOptional<AllocatedHosts> allocatedHosts = new SettableOptional<>(applicationPackage.getAllocatedHosts());
+ Optional<AllocatedHosts> allocatedHosts = applicationPackage.getAllocatedHosts();
return ApplicationSet.fromList(applicationLoader.buildModels(getApplicationId(),
sessionZooKeeperClient.readDockerImageRepository(),
sessionZooKeeperClient.readVespaVersion(),
applicationPackage,
- allocatedHosts,
+ new SettableOptional<>(allocatedHosts),
clock.instant()));
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index 53230eec831..5e10b7dcc61 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -153,20 +153,21 @@ public class SessionRepository {
public ConfigChangeActions prepareLocalSession(LocalSession session,
DeployLogger logger,
PrepareParams params,
+ Optional<ApplicationSet> currentActiveApplicationSet,
Path tenantPath,
Instant now) {
applicationRepo.createApplication(params.getApplicationId()); // TODO jvenstad: This is wrong, but it has to be done now, since preparation can change the application ID of a session :(
logger.log(Level.FINE, "Created application " + params.getApplicationId());
long sessionId = session.getSessionId();
SessionZooKeeperClient sessionZooKeeperClient = createSessionZooKeeperClient(sessionId);
- Optional<ApplicationSet> activeApplicationSet = getActiveApplicationSet(params.getApplicationId());
+ Curator.CompletionWaiter waiter = sessionZooKeeperClient.createPrepareWaiter();
ConfigChangeActions actions = sessionPreparer.prepare(applicationRepo.getHostValidator(), logger, params,
- activeApplicationSet, tenantPath, now,
+ currentActiveApplicationSet, tenantPath, now,
getSessionAppDir(sessionId),
session.getApplicationPackage(), sessionZooKeeperClient)
.getConfigChangeActions();
setPrepared(session);
- sessionZooKeeperClient.createPrepareWaiter().awaitCompletion(params.getTimeoutBudget().timeLeft());
+ waiter.awaitCompletion(params.getTimeoutBudget().timeLeft());
return actions;
}
@@ -435,9 +436,8 @@ public class SessionRepository {
* @param timeoutBudget Timeout for creating session and waiting for other servers.
* @return a new session
*/
- public LocalSession createSession(File applicationDirectory, ApplicationId applicationId, TimeoutBudget timeoutBudget) {
- applicationRepo.createApplication(applicationId);
- Optional<Long> activeSessionId = applicationRepo.activeSessionOf(applicationId);
+ public LocalSession createSession(File applicationDirectory, ApplicationId applicationId,
+ TimeoutBudget timeoutBudget, Optional<Long> activeSessionId) {
return create(applicationDirectory, applicationId, activeSessionId, false, timeoutBudget);
}
@@ -560,18 +560,6 @@ public class SessionRepository {
return applicationPackage;
}
- public Optional<ApplicationSet> getActiveApplicationSet(ApplicationId appId) {
- Optional<ApplicationSet> currentActiveApplicationSet = Optional.empty();
- try {
- long currentActiveSessionId = applicationRepo.requireActiveSessionOf(appId);
- RemoteSession currentActiveSession = getRemoteSession(currentActiveSessionId);
- currentActiveApplicationSet = Optional.ofNullable(currentActiveSession.ensureApplicationLoaded());
- } catch (IllegalArgumentException e) {
- // Do nothing if we have no currently active session
- }
- return currentActiveApplicationSet;
- }
-
private void copyApp(File sourceDir, File destinationDir) throws IOException {
if (destinationDir.exists())
throw new RuntimeException("Destination dir " + destinationDir + " already exists");
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
index 7dc19491654..b2deaa22b2e 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
@@ -537,7 +537,7 @@ public class ApplicationRepositoryTest {
long firstSession = result.sessionId();
long sessionId = applicationRepository.createSession(applicationId(), timeoutBudget, testAppJdiscOnly);
- applicationRepository.prepare(sessionId, prepareParams());
+ applicationRepository.prepare(applicationRepository.getTenant(applicationId()), sessionId, prepareParams());
exceptionRule.expect(RuntimeException.class);
exceptionRule.expectMessage(containsString("Timeout exceeded when trying to activate 'test1.testapp'"));
applicationRepository.activate(applicationRepository.getTenant(applicationId()), sessionId, new TimeoutBudget(clock, Duration.ofSeconds(0)), false);
@@ -562,7 +562,7 @@ public class ApplicationRepositoryTest {
PrepareResult result2 = deployApp(testAppJdiscOnly);
result2.sessionId();
- applicationRepository.prepare(sessionId2, prepareParams());
+ applicationRepository.prepare(applicationRepository.getTenant(applicationId()), sessionId2, prepareParams());
exceptionRule.expect(ActivationConflictException.class);
exceptionRule.expectMessage(containsString("tenant:test1 app:testapp:default Cannot activate session 3 because the currently active session (4) has changed since session 3 was created (was 2 at creation time)"));
applicationRepository.activate(applicationRepository.getTenant(applicationId()), sessionId2, timeoutBudget, false);
@@ -575,7 +575,7 @@ public class ApplicationRepositoryTest {
exceptionRule.expect(IllegalStateException.class);
exceptionRule.expectMessage(containsString("Session is active: 2"));
- applicationRepository.prepare(sessionId, prepareParams());
+ applicationRepository.prepare(applicationRepository.getTenant(applicationId()), sessionId, prepareParams());
exceptionRule.expect(IllegalStateException.class);
exceptionRule.expectMessage(containsString("tenant:test1 app:testapp:default Session 2 is already active"));
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
index ddc880c344e..6b9abf5d7ba 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
@@ -17,6 +17,7 @@ import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.session.PrepareParams;
+import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import org.junit.Before;
import org.junit.Rule;
@@ -71,7 +72,8 @@ public class HostHandlerTest {
public void require_correct_tenant_and_application_for_hostname() throws Exception {
ApplicationId applicationId = applicationId();
applicationRepository.deploy(testApp, new PrepareParams.Builder().applicationId(applicationId).build());
- String hostname = applicationRepository.getActiveApplicationSet(applicationId).get().getAllHosts().iterator().next();
+ Tenant tenant = applicationRepository.getTenant(applicationId);
+ String hostname = applicationRepository.getCurrentActiveApplicationSet(tenant, applicationId).get().getAllHosts().iterator().next();
assertApplicationForHost(hostname, applicationId);
}
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 732b815156f..511717acfc0 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
@@ -135,12 +135,14 @@ public class SessionActiveHandlerTest {
ApplicationMetaData getMetaData() { return metaData; }
void invoke() {
+ Tenant tenant = applicationRepository.getTenant(applicationId());
long sessionId = applicationRepository.createSession(applicationId(),
new TimeoutBudget(componentRegistry.getClock(), Duration.ofSeconds(10)),
testApp);
- applicationRepository.prepare(sessionId, new PrepareParams.Builder().applicationId(applicationId()).build());
+ applicationRepository.prepare(tenant,
+ sessionId,
+ new PrepareParams.Builder().applicationId(applicationId()).build());
actResponse = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.ACTIVE, sessionId, subPath));
- Tenant tenant = applicationRepository.getTenant(applicationId());
LocalSession session = applicationRepository.getActiveLocalSession(tenant, applicationId());
metaData = session.getMetaData();
this.sessionId = sessionId;