diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-07-16 08:38:32 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2021-07-16 08:38:32 +0200 |
commit | 3896b1f35f445b0b4859c6f93b01871936c09542 (patch) | |
tree | 549d5b4cac16a2143dccdadebf9398cd0a4aa493 /configserver | |
parent | 4c992d9f26189abd36796c342606c3cea4c990ea (diff) | |
parent | 073c5be0df2970bd4e6d926a56d14657965992d3 (diff) |
Merge branch 'master' into hmusum/remove-flag-2
Diffstat (limited to 'configserver')
3 files changed, 22 insertions, 4 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 56fd6a64305..1eb27a3224a 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 @@ -107,7 +107,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; -import static com.yahoo.config.model.api.container.ContainerServiceType.CLUSTERCONTROLLER_CONTAINER; import static com.yahoo.config.model.api.container.ContainerServiceType.CONTAINER; import static com.yahoo.config.model.api.container.ContainerServiceType.LOGSERVER_CONTAINER; import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.fileReferenceExistsOnDisk; 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 d228e6638fe..de2e4d54eec 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 @@ -49,6 +49,7 @@ import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.zookeeper.KeeperException; import java.io.File; +import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; @@ -90,6 +91,7 @@ import static com.yahoo.vespa.curator.Curator.CompletionWaiter; public class SessionRepository { private static final Logger log = Logger.getLogger(SessionRepository.class.getName()); + private static final FilenameFilter sessionApplicationsFilter = (dir, name) -> name.matches("\\d+"); private static final long nonExistingActiveSessionId = 0; private final Object monitor = new Object(); @@ -203,6 +205,22 @@ public class SessionRepository { return List.copyOf(localSessionCache.values()); } + public Set<LocalSession> getLocalSessionsFromFileSystem() { + File[] sessions = tenantFileSystemDirs.sessionsPath().listFiles(sessionApplicationsFilter); + if (sessions == null) return Set.of(); + + Set<LocalSession> sessionIds = new HashSet<>(); + for (File session : sessions) { + long sessionId = Long.parseLong(session.getName()); + SessionZooKeeperClient sessionZKClient = createSessionZooKeeperClient(sessionId); + File sessionDir = getAndValidateExistingSessionAppDir(sessionId); + ApplicationPackage applicationPackage = FilesApplicationPackage.fromFile(sessionDir); + LocalSession localSession = new LocalSession(tenantName, sessionId, applicationPackage, sessionZKClient); + sessionIds.add(localSession); + } + return sessionIds; + } + public ConfigChangeActions prepareLocalSession(Session session, DeployLogger logger, PrepareParams params, 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()); @@ -529,7 +547,7 @@ public class SessionRepository { log.log(Level.FINE, () -> "Purging old sessions for tenant '" + tenantName + "'"); Set<LocalSession> toDelete = new HashSet<>(); try { - for (LocalSession candidate : getLocalSessions()) { + for (LocalSession candidate : getLocalSessionsFromFileSystem()) { Instant createTime = candidate.getCreateTime(); log.log(Level.FINE, () -> "Candidate session for deletion: " + candidate.getSessionId() + ", created: " + createTime); 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 1b31d02d222..8f8005894e5 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 @@ -465,12 +465,13 @@ public class ApplicationRepositoryTest { // Create a local session without any data in zookeeper (corner case seen in production occasionally) // and check that expiring local sessions still work int sessionId = 6; - Files.createDirectory(new TenantFileSystemDirs(serverdb, tenant1).getUserApplicationDir(sessionId).toPath()); + TenantName tenantName = tester.tenant().getName(); + Files.createDirectory(new TenantFileSystemDirs(serverdb, tenantName).getUserApplicationDir(sessionId).toPath()); LocalSession localSession2 = new LocalSession(tenant1, sessionId, FilesApplicationPackage.fromFile(testApp), new SessionZooKeeperClient(curator, - tenant1, + tenantName, sessionId, ConfigUtils.getCanonicalHostName())); sessionRepository.addLocalSession(localSession2); |