diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-08-17 13:12:10 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-08-17 13:12:10 +0200 |
commit | 796f6dd5c3050caac6a7506d7c940144a5519e7c (patch) | |
tree | 062d4cad0c8481f73eb9a029a12fed5428aabe1b | |
parent | 7d9930400ef9a124d7493d3f774a770afb0f27cb (diff) |
Move some methods to Session superclass
4 files changed, 48 insertions, 35 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java index 96324ea4320..43d7e9cd2a0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java @@ -1,11 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.session; -import com.yahoo.config.application.api.ApplicationFile; -import com.yahoo.config.application.api.ApplicationMetaData; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.provision.TenantName; -import com.yahoo.path.Path; import com.yahoo.transaction.Transaction; import com.yahoo.vespa.config.server.application.TenantApplications; @@ -22,7 +19,6 @@ import static com.yahoo.vespa.curator.Curator.CompletionWaiter; // TODO: Separate the "application store" and "session" aspects - the latter belongs in the HTTP layer -bratseth public class LocalSession extends Session { - protected final ApplicationPackage applicationPackage; private final TenantApplications applicationRepo; /** @@ -31,20 +27,11 @@ public class LocalSession extends Session { * @param sessionId The session id for this session. */ public LocalSession(TenantName tenant, long sessionId, ApplicationPackage applicationPackage, - SessionZooKeeperClient sessionZooKeeperClient, - TenantApplications applicationRepo) { - super(tenant, sessionId, sessionZooKeeperClient); - this.applicationPackage = applicationPackage; + SessionZooKeeperClient sessionZooKeeperClient, TenantApplications applicationRepo) { + super(tenant, sessionId, sessionZooKeeperClient, applicationPackage); this.applicationRepo = applicationRepo; } - public ApplicationFile getApplicationFile(Path relativePath, Mode mode) { - if (mode.equals(Mode.WRITE)) { - markSessionEdited(); - } - return applicationPackage.getFile(relativePath); - } - void setPrepared() { setStatus(Session.Status.PREPARE); } @@ -53,10 +40,6 @@ public class LocalSession extends Session { return sessionZooKeeperClient.createWriteStatusTransaction(status); } - private void setStatus(Session.Status newStatus) { - sessionZooKeeperClient.writeStatus(newStatus); - } - public CompletionWaiter createActiveWaiter() { return sessionZooKeeperClient.createActiveWaiter(); } @@ -67,20 +50,12 @@ public class LocalSession extends Session { return transaction; } - private void markSessionEdited() { - setStatus(Session.Status.NEW); - } - public long getActiveSessionAtCreate() { - return applicationPackage.getMetaData().getPreviousActiveGeneration(); + return getMetaData().getPreviousActiveGeneration(); } public enum Mode { READ, WRITE } - public ApplicationMetaData getMetaData() { return applicationPackage.getMetaData(); } - - public ApplicationPackage getApplicationPackage() { return applicationPackage; } - } 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 9677c7cf20e..013daa86767 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 @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.session; -import com.yahoo.config.application.api.ApplicationMetaData; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.TenantName; @@ -118,8 +117,4 @@ public class RemoteSession extends Session { transaction.close(); } - public ApplicationMetaData getMetaData() { - return sessionZooKeeperClient.loadApplicationPackage().getMetaData(); - } - } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java index a6818d1e43f..d74a9358645 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java @@ -3,11 +3,15 @@ package com.yahoo.vespa.config.server.session; import com.yahoo.component.Version; import com.yahoo.config.FileReference; +import com.yahoo.config.application.api.ApplicationFile; +import com.yahoo.config.application.api.ApplicationMetaData; +import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.AthenzDomain; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.TenantName; +import com.yahoo.path.Path; import com.yahoo.transaction.Transaction; import com.yahoo.vespa.config.server.tenant.TenantRepository; @@ -27,13 +31,24 @@ public abstract class Session implements Comparable<Session> { private final long sessionId; protected final TenantName tenant; protected final SessionZooKeeperClient sessionZooKeeperClient; + protected final Optional<ApplicationPackage> applicationPackage; protected Session(TenantName tenant, long sessionId, SessionZooKeeperClient sessionZooKeeperClient) { this.tenant = tenant; this.sessionId = sessionId; this.sessionZooKeeperClient = sessionZooKeeperClient; + this.applicationPackage = Optional.empty(); } + protected Session(TenantName tenant, long sessionId, SessionZooKeeperClient sessionZooKeeperClient, + ApplicationPackage applicationPackage) { + this.tenant = tenant; + this.sessionId = sessionId; + this.sessionZooKeeperClient = sessionZooKeeperClient; + this.applicationPackage = Optional.of(applicationPackage); + } + + public final long getSessionId() { return sessionId; } @@ -135,6 +150,31 @@ public abstract class Session implements Comparable<Session> { // Note: Assumes monotonically increasing session ids public boolean isNewerThan(long sessionId) { return getSessionId() > sessionId; } + public ApplicationMetaData getMetaData() { + return applicationPackage.isPresent() + ? applicationPackage.get().getMetaData() + : sessionZooKeeperClient.loadApplicationPackage().getMetaData(); + } + + public ApplicationPackage getApplicationPackage() { + return applicationPackage.orElseThrow(() -> new RuntimeException("No application package found for " + this)); + } + + public ApplicationFile getApplicationFile(Path relativePath, LocalSession.Mode mode) { + if (mode.equals(LocalSession.Mode.WRITE)) { + markSessionEdited(); + } + return getApplicationPackage().getFile(relativePath); + } + + private void markSessionEdited() { + setStatus(Session.Status.NEW); + } + + void setStatus(Session.Status newStatus) { + sessionZooKeeperClient.writeStatus(newStatus); + } + @Override public int compareTo(Session rhs) { Long lhsId = getSessionId(); 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 50a8cac2837..e42fb78f595 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 @@ -325,6 +325,10 @@ public class ApplicationRepositoryTest { { PrepareResult prepareResult = deployApp(testApp); + + assertNotNull(applicationRepository.getActiveSession(applicationId())); + assertNotNull(sessionRepository.getLocalSession(prepareResult.sessionId())); + try { applicationRepository.delete(applicationId(), Duration.ZERO); fail("Should have gotten an exception"); @@ -334,8 +338,7 @@ public class ApplicationRepositoryTest { // No active session or remote session (deleted in step above), but an exception was thrown above // A new delete should cleanup and be successful - RemoteSession activeSession = applicationRepository.getActiveSession(applicationId()); - assertNull(activeSession); + assertNull(applicationRepository.getActiveSession(applicationId())); assertNull(sessionRepository.getLocalSession(prepareResult.sessionId())); assertTrue(applicationRepository.delete(applicationId())); |