aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-08-17 13:12:10 +0200
committerHarald Musum <musum@verizonmedia.com>2020-08-17 13:12:10 +0200
commit796f6dd5c3050caac6a7506d7c940144a5519e7c (patch)
tree062d4cad0c8481f73eb9a029a12fed5428aabe1b
parent7d9930400ef9a124d7493d3f774a770afb0f27cb (diff)
Move some methods to Session superclass
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java31
-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/Session.java40
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java7
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()));