diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-07-07 11:48:04 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-07-07 11:48:04 +0200 |
commit | 38791391fcf0c52d2f82083abdcdb90b8de9cc34 (patch) | |
tree | d0405fd839303a5cb4c6e1c902fbd79d89da3fde /configserver | |
parent | 8c76e1c26375f741ee2487b2b85e62430449ebb1 (diff) |
Move some methods on remote session to SessionRepository
Diffstat (limited to 'configserver')
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 } |