aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-07-07 11:48:04 +0200
committerHarald Musum <musum@verizonmedia.com>2020-07-07 11:48:04 +0200
commit38791391fcf0c52d2f82083abdcdb90b8de9cc34 (patch)
treed0405fd839303a5cb4c6e1c902fbd79d89da3fde /configserver
parent8c76e1c26375f741ee2487b2b85e62430449ebb1 (diff)
Move some methods on remote session to SessionRepository
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java30
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionStateWatcher.java14
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java10
8 files changed, 39 insertions, 38 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
index 2136906f205..7337dc446f5 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
@@ -234,7 +234,6 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
return locksPath.append(id.serializedForm());
}
-
/**
* Gets a config for the given app, or null if not found
*/
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
index a10b8d9c6fb..ce582a8a1a8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
@@ -20,7 +20,7 @@ import java.util.Optional;
public class FileDBRegistry implements FileRegistry {
private final AddFileInterface manager;
- private List<Entry> entries = new ArrayList<>();
+ private final List<Entry> entries = new ArrayList<>();
private final Map<String, FileReference> fileReferenceCache = new HashMap<>();
public FileDBRegistry(AddFileInterface manager) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java
index 3dbb3fd11e3..54da80a0299 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java
@@ -183,7 +183,7 @@ public class MultiTenantRpcAuthorizer implements RpcAuthorizer {
log.log(Level.FINE, () -> String.format("Client '%s' identified as %s", request.target().toString(), identity.toString()));
return Optional.of(identity);
} catch (NodeIdentifierException e) {
- throw new AuthorizationException("Failed to identity peer: " + e.getMessage(), e);
+ throw new AuthorizationException("Failed to identify peer: " + e.getMessage(), e);
}
}
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 66ed721a3e1..c520094e294 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
@@ -9,7 +9,6 @@ import com.yahoo.lang.SettableOptional;
import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.application.ApplicationSet;
-import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.modelfactory.ActivatedModelsBuilder;
import com.yahoo.vespa.curator.Curator;
import org.apache.zookeeper.KeeperException;
@@ -49,7 +48,7 @@ public class RemoteSession extends Session {
this.clock = componentRegistry.getClock();
}
- void loadPrepared() {
+ void prepare() {
Curator.CompletionWaiter waiter = sessionZooKeeperClient.getPrepareWaiter();
ensureApplicationLoaded();
notifyCompletion(waiter);
@@ -80,17 +79,6 @@ public class RemoteSession extends Session {
public Transaction createDeleteTransaction() {
return sessionZooKeeperClient.createWriteStatusTransaction(Status.DELETE);
}
-
- void makeActive(TenantApplications tenantApplications) {
- Curator.CompletionWaiter waiter = sessionZooKeeperClient.getActiveWaiter();
- log.log(Level.FINE, () -> logPre() + "Getting session from repo: " + getSessionId());
- ApplicationSet app = ensureApplicationLoaded();
- log.log(Level.FINE, () -> logPre() + "Reloading config for " + getSessionId());
- tenantApplications.reloadConfig(app);
- log.log(Level.FINE, () -> logPre() + "Notifying " + waiter);
- notifyCompletion(waiter);
- log.log(Level.INFO, logPre() + "Session activated: " + getSessionId());
- }
void confirmUpload() {
Curator.CompletionWaiter waiter = sessionZooKeeperClient.getUploadWaiter();
@@ -99,7 +87,7 @@ public class RemoteSession extends Session {
log.log(Level.FINE, "Done notifying upload for session " + getSessionId());
}
- private void notifyCompletion(Curator.CompletionWaiter completionWaiter) {
+ void notifyCompletion(Curator.CompletionWaiter completionWaiter) {
try {
completionWaiter.notifyCompletion();
} catch (RuntimeException e) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
index 798dcfcd8e7..b6b0ac45bb5 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
@@ -128,9 +128,7 @@ public class SessionPreparer {
tenantPath, serverDbSessionDir, applicationPackage, sessionZooKeeperClient);
preparation.preprocess();
-
var distributedApplicationPackage = preparation.distributeApplicationPackage();
-
try {
AllocatedHosts allocatedHosts = preparation.buildModels(now);
preparation.makeResult(allocatedHosts);
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 100c66225a1..cf15f17b812 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
@@ -126,7 +126,7 @@ public class SessionRepository {
long sessionId = session.getSessionId();
Curator.FileCache fileCache = curator.createFileCache(getSessionStatePath(sessionId).getAbsolute(), false);
RemoteSession remoteSession = createRemoteSession(sessionId);
- addSesssionStateWatcher(sessionId, fileCache, remoteSession, Optional.of(session));
+ addSessionStateWatcher(sessionId, fileCache, remoteSession, Optional.of(session));
}
public LocalSession getLocalSession(long sessionId) {
@@ -333,7 +333,27 @@ public class SessionRepository {
Optional<LocalSession> localSession = Optional.empty();
if (distributeApplicationPackage())
localSession = createLocalSessionUsingDistributedApplicationPackage(sessionId);
- addSesssionStateWatcher(sessionId, fileCache, remoteSession, localSession);
+ addSessionStateWatcher(sessionId, fileCache, remoteSession, localSession);
+ }
+
+ void activate(RemoteSession session) {
+ long sessionId = session.getSessionId();
+ Curator.CompletionWaiter waiter = createSessionZooKeeperClient(sessionId).getActiveWaiter();
+ log.log(Level.FINE, () -> session.logPre() + "Getting session from repo: " + sessionId);
+ ApplicationSet app = session.ensureApplicationLoaded();
+ log.log(Level.FINE, () -> session.logPre() + "Reloading config for " + sessionId);
+ applicationRepo.reloadConfig(app);
+ log.log(Level.FINE, () -> session.logPre() + "Notifying " + waiter);
+ session.notifyCompletion(waiter);
+ log.log(Level.INFO, session.logPre() + "Session activated: " + sessionId);
+ }
+
+ public void deactivate(RemoteSession remoteSession) {
+ remoteSession.deactivate();
+ }
+
+ void prepare(RemoteSession session) {
+ session.prepare();
}
boolean distributeApplicationPackage() {
@@ -621,13 +641,13 @@ public class SessionRepository {
return new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName).getUserApplicationDir(sessionId);
}
- private void addSesssionStateWatcher(long sessionId, Curator.FileCache fileCache, RemoteSession remoteSession, Optional<LocalSession> localSession) {
+ private void addSessionStateWatcher(long sessionId, Curator.FileCache fileCache, RemoteSession remoteSession, Optional<LocalSession> localSession) {
// Remote session will always be present in an existing state watcher, but local session might not
if (sessionStateWatchers.containsKey(sessionId)) {
localSession.ifPresent(session -> sessionStateWatchers.get(sessionId).addLocalSession(session));
} else {
- sessionStateWatchers.put(sessionId, new SessionStateWatcher(fileCache, applicationRepo, remoteSession,
- localSession, metrics, zkWatcherExecutor, this));
+ sessionStateWatchers.put(sessionId, new SessionStateWatcher(fileCache, remoteSession, localSession,
+ metrics, zkWatcherExecutor, this));
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionStateWatcher.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionStateWatcher.java
index 65c62a392b7..d7c8928a6eb 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionStateWatcher.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionStateWatcher.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.config.server.session;
import com.yahoo.text.Utf8;
-import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.curator.Curator;
import org.apache.curator.framework.recipes.cache.ChildData;
@@ -26,7 +25,6 @@ public class SessionStateWatcher {
private static final Logger log = Logger.getLogger(SessionStateWatcher.class.getName());
private final Curator.FileCache fileCache;
- private final TenantApplications tenantApplications;
private final RemoteSession remoteSession;
private final MetricUpdater metrics;
private final Executor zkWatcherExecutor;
@@ -34,14 +32,12 @@ public class SessionStateWatcher {
private Optional<LocalSession> localSession;
SessionStateWatcher(Curator.FileCache fileCache,
- TenantApplications tenantApplications,
RemoteSession remoteSession,
Optional<LocalSession> localSession,
MetricUpdater metrics,
Executor zkWatcherExecutor,
SessionRepository sessionRepository) {
this.fileCache = fileCache;
- this.tenantApplications = tenantApplications;
this.remoteSession = remoteSession;
this.localSession = localSession;
this.metrics = metrics;
@@ -56,15 +52,15 @@ public class SessionStateWatcher {
if (newStatus.equals(Status.PREPARE)) {
createLocalSession(sessionId);
- log.log(Level.FINE, remoteSession.logPre() + "Loading prepared session: " + sessionId);
- remoteSession.loadPrepared();
+ log.log(Level.FINE, remoteSession.logPre() + "Preparing session: " + sessionId);
+ sessionRepository.prepare(remoteSession);
} else if (newStatus.equals(Status.ACTIVATE)) {
createLocalSession(sessionId);
- remoteSession.makeActive(tenantApplications);
+ sessionRepository.activate(remoteSession);
} else if (newStatus.equals(Status.DEACTIVATE)) {
- remoteSession.deactivate();
+ sessionRepository.deactivate(remoteSession);
} else if (newStatus.equals(Status.DELETE)) {
- remoteSession.deactivate();
+ sessionRepository.deactivate(remoteSession);
localSession.ifPresent(session -> {
log.log(Level.FINE, session.logPre() + "Deleting session " + sessionId);
sessionRepository.deleteLocalSession(session);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
index e90f01e98c4..490e1a4075c 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
@@ -75,7 +75,7 @@ public class RemoteSessionTest {
@Test
public void require_that_applications_are_loaded() {
RemoteSession session = createSession(3, Arrays.asList(new MockModelFactory(), new VespaModelFactory(new NullConfigModelRegistry())));
- session.loadPrepared();
+ session.prepare();
ApplicationSet applicationSet = session.ensureApplicationLoaded();
assertNotNull(applicationSet);
assertThat(applicationSet.getApplicationGeneration(), is(3L));
@@ -101,7 +101,7 @@ public class RemoteSessionTest {
okFactory.throwOnLoad = false;
RemoteSession session = createSession(3, Arrays.asList(okFactory, failingFactory));
- session.loadPrepared();
+ session.prepare();
}
@Test
@@ -116,7 +116,7 @@ public class RemoteSessionTest {
okFactory.throwOnLoad = false;
RemoteSession session = createSession(3, Arrays.asList(okFactory, failingFactory), failingFactory.clock());
- session.loadPrepared();
+ session.prepare();
}
@Test
@@ -138,7 +138,7 @@ public class RemoteSessionTest {
SessionZooKeeperClient zkc = new MockSessionZKClient(curator, tenantName, 3, application);
RemoteSession session = createSession(3, zkc, Arrays.asList(okFactory, failingFactory));
- session.loadPrepared();
+ session.prepare();
// Does not cause an error because model version 3 is skipped
}
@@ -162,7 +162,7 @@ public class RemoteSessionTest {
SessionZooKeeperClient zkc = new MockSessionZKClient(curator, tenantName, 3, application);
RemoteSession session = createSession(4, zkc, Arrays.asList(okFactory, failingFactory));
- session.loadPrepared();
+ session.prepare();
// Does not cause an error because model version 4 is skipped
}