summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-06-19 17:22:01 +0200
committerHarald Musum <musum@verizonmedia.com>2020-06-19 17:22:01 +0200
commite29722b5823e5ba1d8284d91a791a9a04f0df153 (patch)
treee884c6d0580e67e25898bdd4a16ae0b826163f42 /configserver
parentdcbbb4479fae81b6299bc6e636f216cd2294bc91 (diff)
Create local session after downloading application package
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java28
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java13
2 files changed, 28 insertions, 13 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
index 543f9c2e303..56496b06c14 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
@@ -2,8 +2,11 @@ package com.yahoo.vespa.config.server.maintenance;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.FileReference;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.session.RemoteSession;
+import com.yahoo.vespa.config.server.session.SessionRepository;
+import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.filedistribution.FileDownloader;
@@ -52,24 +55,37 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer {
log.fine(() -> "Running");
if (! distributeApplicationPackage.value()) return;
- try (var fileDownloader = new FileDownloader(createConnectionPool(configserverConfig), downloadDirectory)){
+ try (var fileDownloader = new FileDownloader(createConnectionPool(configserverConfig), downloadDirectory)) {
for (var applicationId : applicationRepository.listApplications()) {
log.fine(() -> "Verifying application package for " + applicationId);
RemoteSession session = applicationRepository.getActiveSession(applicationId);
FileReference applicationPackage = session.getApplicationPackageReference();
- log.fine(() -> "Verifying application package file reference " + applicationPackage + " for session " + session.getSessionId());
+ long sessionId = session.getSessionId();
+ log.fine(() -> "Verifying application package file reference " + applicationPackage + " for session " + sessionId);
- if (applicationPackage != null && missingOnDisk(applicationPackage)) {
- log.fine(() -> "Downloading missing application package for application " + applicationId + " - session " + session.getSessionId());
+ if (applicationPackage != null) {
+ if (missingOnDisk(applicationPackage)) {
+ log.fine(() -> "Downloading missing application package for application " + applicationId + " - session " + sessionId);
- if (fileDownloader.getFile(applicationPackage).isEmpty()) {
- log.warning("Failed to download application package for application " + applicationId + " - session " + session.getSessionId());
+ if (fileDownloader.getFile(applicationPackage).isEmpty()) {
+ log.warning("Failed to download application package for application " + applicationId + " - session " + sessionId);
+ continue;
+ }
}
+ createLocalSessionIfMissing(applicationId, sessionId);
}
}
}
}
+ private void createLocalSessionIfMissing(ApplicationId applicationId, long sessionId) {
+ Tenant tenant = applicationRepository.tenantRepository().getTenant(applicationId.tenant());
+ SessionRepository sessionRepository = tenant.getSessionRepository();
+ if (sessionRepository.getLocalSession(sessionId) == null)
+ sessionRepository.createLocalSessionUsingDistributedApplicationPackage(sessionId);
+ }
+
+
private boolean missingOnDisk(FileReference applicationPackageReference) {
Set<String> fileReferencesOnDisk = getFileReferencesOnDisk(downloadDirectory);
return ! fileReferencesOnDisk.contains(applicationPackageReference.value());
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 c3db5d737df..7e22e4b227e 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
@@ -487,9 +487,9 @@ public class SessionRepository {
* This method is used when creating a session based on a remote session and the distributed application package
* It does not wait for session being created on other servers
*/
- private LocalSession createLocalSession(File applicationFile, ApplicationId applicationId,
- long sessionId, Optional<Long> currentlyActiveSessionId) {
+ private LocalSession createLocalSession(File applicationFile, ApplicationId applicationId, long sessionId) {
try {
+ Optional<Long> currentlyActiveSessionId = getActiveSessionId(applicationId);
ApplicationPackage applicationPackage = createApplicationPackage(applicationFile, applicationId,
sessionId, currentlyActiveSessionId, false);
SessionZooKeeperClient sessionZooKeeperClient = createSessionZooKeeperClient(sessionId);
@@ -527,7 +527,7 @@ public class SessionRepository {
/**
* Returns a new session instance for the given session id.
*/
- Optional<LocalSession> createLocalSessionUsingDistributedApplicationPackage(long sessionId) {
+ public Optional<LocalSession> createLocalSessionUsingDistributedApplicationPackage(long sessionId) {
if (applicationRepo.hasLocalSession(sessionId)) {
log.log(Level.FINE, "Local session for session id " + sessionId + " already exists");
return Optional.of(createSessionFromId(sessionId));
@@ -550,10 +550,9 @@ public class SessionRepository {
return Optional.empty();
}
ApplicationId applicationId = sessionZKClient.readApplicationId();
- return Optional.of(createLocalSession(sessionDir,
- applicationId,
- sessionId,
- getActiveSessionId(applicationId)));
+ LocalSession localSession = createLocalSession(sessionDir, applicationId, sessionId);
+ addSession(localSession);
+ return Optional.of(localSession);
}
return Optional.empty();
}