summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-12-11 18:58:47 +0100
committerMartin Polden <mpolden@mpolden.no>2020-12-11 18:58:47 +0100
commit8e745bf4703982bcdae23ff86bfd978dc80bc3aa (patch)
tree6a0ab1cd3491ce6a9c58bccc39e22daef7c23fa6
parentf281eb7f20dbcd0283f32c3a44574141bd898097 (diff)
Load previous application set only if activating a new session
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java23
1 files changed, 14 insertions, 9 deletions
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 ec54abcedbc..fc0a887cf0e 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
@@ -370,8 +370,10 @@ public class SessionRepository {
if (session.applicationSet().isPresent()) {
return session.applicationSet().get();
}
-
- ApplicationSet applicationSet = loadApplication(session);
+ Optional<Long> activeSessionId = getActiveSessionId(session.getApplicationId());
+ Optional<ApplicationSet> previousApplicationSet = activeSessionId.filter(session::isNewerThan)
+ .flatMap(this::getApplicationSet);
+ ApplicationSet applicationSet = loadApplication(session, previousApplicationSet);
RemoteSession activated = session.activated(applicationSet);
long sessionId = activated.getSessionId();
remoteSessionCache.put(sessionId, activated);
@@ -412,14 +414,14 @@ public class SessionRepository {
}
}
- private ApplicationSet loadApplication(Session session) {
+ private ApplicationSet loadApplication(Session session, Optional<ApplicationSet> previousApplicationSet) {
log.log(Level.FINE, () -> "Loading application for " + session);
SessionZooKeeperClient sessionZooKeeperClient = createSessionZooKeeperClient(session.getSessionId());
ApplicationPackage applicationPackage = sessionZooKeeperClient.loadApplicationPackage();
ActivatedModelsBuilder builder = new ActivatedModelsBuilder(session.getTenantName(),
session.getSessionId(),
sessionZooKeeperClient,
- getActiveApplicationSet(session.getApplicationId()),
+ previousApplicationSet,
componentRegistry);
// Read hosts allocated on the config server instance which created this
SettableOptional<AllocatedHosts> allocatedHosts = new SettableOptional<>(applicationPackage.getAllocatedHosts());
@@ -560,15 +562,18 @@ public class SessionRepository {
}
public Optional<ApplicationSet> getActiveApplicationSet(ApplicationId appId) {
- Optional<ApplicationSet> currentActiveApplicationSet = Optional.empty();
+ return applicationRepo.activeSessionOf(appId).flatMap(this::getApplicationSet);
+ }
+
+ private Optional<ApplicationSet> getApplicationSet(long sessionId) {
+ Optional<ApplicationSet> applicationSet = Optional.empty();
try {
- long currentActiveSessionId = applicationRepo.requireActiveSessionOf(appId);
- RemoteSession currentActiveSession = getRemoteSession(currentActiveSessionId);
- currentActiveApplicationSet = Optional.ofNullable(ensureApplicationLoaded(currentActiveSession));
+ RemoteSession session = getRemoteSession(sessionId);
+ applicationSet = Optional.ofNullable(ensureApplicationLoaded(session));
} catch (IllegalArgumentException e) {
// Do nothing if we have no currently active session
}
- return currentActiveApplicationSet;
+ return applicationSet;
}
private void copyApp(File sourceDir, File destinationDir) throws IOException {