aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-01-12 17:15:42 +0100
committerGitHub <noreply@github.com>2021-01-12 17:15:42 +0100
commit6fb9da718607e30498e7cd1d146df89ddbfdb448 (patch)
tree6c9eef17d2424f748d27c7ddf2e475031fb778ff
parent3af508945a49a03494e91aba2934d6bade6141cc (diff)
parent74733dd159d27fbdc5a9e6592f7b4e28dda09f07 (diff)
Merge pull request #16021 from vespa-engine/revert-16019-revert-16012-revert-16003-revert-15987-revert-15983-revert-15979-revert-15978-revert-15977-hmusum/remove-unnecessary-component
Use just one HostRegistry [run-systemtest]
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java15
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java22
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistries.java34
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java34
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java24
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/DefaultRpcAuthorizerProvider.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizer.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java9
-rw-r--r--configserver/src/main/resources/configserver-app/services.xml2
-rw-r--r--configserver/src/test/apps/app-jdisc-only-restart/hosts.xml2
-rw-r--r--configserver/src/test/apps/app-jdisc-only/hosts.xml2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java25
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java19
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java28
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java73
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java15
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java55
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java29
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java3
-rw-r--r--configserver/src/test/resources/deploy/advancedapp/services.xml2
44 files changed, 255 insertions, 305 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java
index 1eb18773898..49a61eb8dee 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
@@ -9,7 +9,7 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.session.SessionPreparer;
@@ -38,7 +38,6 @@ public interface GlobalComponentRegistry {
ReloadListener getReloadListener();
ConfigDefinitionRepo getStaticConfigDefinitionRepo();
PermanentApplicationPackage getPermanentApplicationPackage();
- HostRegistries getHostRegistries();
ModelFactoryRegistry getModelFactoryRegistry();
Optional<Provisioner> getHostProvisioner();
Zone getZone();
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java
index 9badd19009f..5760eae866c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server;
import com.google.inject.Inject;
@@ -11,7 +11,7 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
@@ -44,7 +44,6 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
private final ConfigserverConfig configserverConfig;
private final ConfigDefinitionRepo staticConfigDefinitionRepo;
private final PermanentApplicationPackage permanentApplicationPackage;
- private final HostRegistries hostRegistries;
private final Optional<Provisioner> hostProvisioner;
private final Zone zone;
private final ConfigServerDB configServerDB;
@@ -52,6 +51,7 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
private final SecretStore secretStore;
private final StripedExecutor<TenantName> zkWatcherExecutor;
private final ExecutorService zkCacheExecutor;
+ private final HostRegistry hostRegistry;
@SuppressWarnings("WeakerAccess")
@Inject
@@ -62,15 +62,14 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
SessionPreparer sessionPreparer,
RpcServer rpcServer,
ConfigserverConfig configserverConfig,
- SuperModelGenerationCounter superModelGenerationCounter,
ConfigDefinitionRepo staticConfigDefinitionRepo,
PermanentApplicationPackage permanentApplicationPackage,
- HostRegistries hostRegistries,
HostProvisionerProvider hostProvisionerProvider,
Zone zone,
ConfigServerDB configServerDB,
FlagSource flagSource,
- SecretStore secretStore) {
+ SecretStore secretStore,
+ HostRegistry hostRegistry) {
this.curator = curator;
this.configCurator = configCurator;
this.metrics = metrics;
@@ -80,7 +79,6 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
this.configserverConfig = configserverConfig;
this.staticConfigDefinitionRepo = staticConfigDefinitionRepo;
this.permanentApplicationPackage = permanentApplicationPackage;
- this.hostRegistries = hostRegistries;
this.hostProvisioner = hostProvisionerProvider.getHostProvisioner();
this.zone = zone;
this.configServerDB = configServerDB;
@@ -88,6 +86,7 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
this.secretStore = secretStore;
this.zkWatcherExecutor = new StripedExecutor<>();
this.zkCacheExecutor = Executors.newFixedThreadPool(1, ThreadFactoryFactory.getThreadFactory(TenantRepository.class.getName()));
+ this.hostRegistry = hostRegistry;
}
@Override
@@ -109,8 +108,6 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
@Override
public PermanentApplicationPackage getPermanentApplicationPackage() { return permanentApplicationPackage; }
@Override
- public HostRegistries getHostRegistries() { return hostRegistries; }
- @Override
public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; }
@Override
@@ -146,4 +143,5 @@ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry
public SecretStore getSecretStore() {
return secretStore;
}
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
index 773a4862033..7cdb596780a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
@@ -1,8 +1,7 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import java.util.Collection;
@@ -17,21 +16,21 @@ import java.util.Collection;
public interface ReloadListener {
/**
- * Signal the listener that hosts used by by a particular tenant.
+ * Signals the listener that hosts used by a particular tenant.
*
- * @param tenant Name of tenant.
+ * @param applicationId application id
* @param newHosts a {@link Collection} of hosts used by tenant.
*/
- void hostsUpdated(TenantName tenant, Collection<String> newHosts);
+ void hostsUpdated(ApplicationId applicationId, Collection<String> newHosts);
/**
- * Verify that given hosts are available for use by tenant.
+ * Verifies that given hosts are available for use by tenant.
*
- * @param tenant tenant that wants to allocate hosts.
+ * @param applicationId application id
* @param newHosts a {@link java.util.Collection} of hosts that tenant wants to allocate.
* @throws java.lang.IllegalArgumentException if one or more of the hosts are in use by another tenant.
*/
- void verifyHostsAreAvailable(TenantName tenant, Collection<String> newHosts);
+ void verifyHostsAreAvailable(ApplicationId applicationId, Collection<String> newHosts);
/**
* Configs has been activated for an application: Either an application
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 5a34217dbdd..0e5315c0dcc 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
@@ -27,7 +27,6 @@ import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.curator.transaction.CuratorTransaction;
import org.apache.curator.framework.CuratorFramework;
-import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import java.nio.file.Files;
@@ -62,7 +61,7 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
private final TenantName tenant;
private final ReloadListener reloadListener;
private final ConfigResponseFactory responseFactory;
- private final HostRegistry<ApplicationId> hostRegistry;
+ private final HostRegistry hostRegistry;
private final ApplicationMapper applicationMapper = new ApplicationMapper();
private final MetricUpdater tenantMetricUpdater;
private final Clock clock;
@@ -70,7 +69,7 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
public TenantApplications(TenantName tenant, Curator curator, StripedExecutor<TenantName> zkWatcherExecutor,
ExecutorService zkCacheExecutor, Metrics metrics, ReloadListener reloadListener,
- ConfigserverConfig configserverConfig, HostRegistry<ApplicationId> hostRegistry,
+ ConfigserverConfig configserverConfig, HostRegistry hostRegistry,
TenantFileSystemDirs tenantFileSystemDirs, Clock clock) {
this.database = new ApplicationCuratorDatabase(tenant, curator);
this.tenant = tenant;
@@ -88,7 +87,7 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
}
// For testing only
- public static TenantApplications create(GlobalComponentRegistry componentRegistry, TenantName tenantName) {
+ public static TenantApplications create(GlobalComponentRegistry componentRegistry, HostRegistry hostRegistry, TenantName tenantName) {
return new TenantApplications(tenantName,
componentRegistry.getCurator(),
componentRegistry.getZkWatcherExecutor(),
@@ -96,7 +95,7 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
componentRegistry.getMetrics(),
componentRegistry.getReloadListener(),
componentRegistry.getConfigserverConfig(),
- componentRegistry.getHostRegistries().createApplicationHostRegistry(tenantName),
+ hostRegistry,
new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName),
componentRegistry.getClock());
}
@@ -222,7 +221,10 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
}
private void notifyReloadListeners(ApplicationSet applicationSet) {
- reloadListener.hostsUpdated(tenant, hostRegistry.getAllHosts());
+ if (applicationSet.getAllApplications().isEmpty()) throw new IllegalArgumentException("application set cannot be empty");
+
+ reloadListener.hostsUpdated(applicationSet.getAllApplications().get(0).toApplicationInfo().getApplicationId(),
+ applicationSet.getAllHosts());
reloadListener.configActivated(applicationSet);
}
@@ -271,7 +273,7 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
}
private void reloadListenersOnRemove(ApplicationId applicationId) {
- reloadListener.hostsUpdated(tenant, hostRegistry.getAllHosts());
+ reloadListener.hostsUpdated(applicationId, hostRegistry.getHostsForKey(applicationId));
reloadListener.applicationRemoved(applicationId);
}
@@ -382,9 +384,9 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
}
@Override
- public void verifyHosts(ApplicationId key, Collection<String> newHosts) {
- hostRegistry.verifyHosts(key, newHosts);
- reloadListener.verifyHostsAreAvailable(tenant, newHosts);
+ public void verifyHosts(ApplicationId applicationId, Collection<String> newHosts) {
+ hostRegistry.verifyHosts(applicationId, newHosts);
+ reloadListener.verifyHostsAreAvailable(applicationId, newHosts);
}
public HostValidator<ApplicationId> getHostValidator() {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistries.java b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistries.java
deleted file mode 100644
index c25ab0315a3..00000000000
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistries.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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.host;
-
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.TenantName;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Component to hold host registries.
- *
- * @author hmusum
- */
-public class HostRegistries {
-
- private final HostRegistry<TenantName> tenantHostRegistry = new HostRegistry<>();
- private final Map<TenantName, HostRegistry<ApplicationId>> applicationHostRegistries = new ConcurrentHashMap<>();
-
- public HostRegistry<TenantName> getTenantHostRegistry() {
- return tenantHostRegistry;
- }
-
- public HostRegistry<ApplicationId> getApplicationHostRegistry(TenantName tenant) {
- return applicationHostRegistries.get(tenant);
- }
-
- public HostRegistry<ApplicationId> createApplicationHostRegistry(TenantName tenant) {
- HostRegistry<ApplicationId> applicationIdHostRegistry = new HostRegistry<>();
- applicationHostRegistries.put(tenant, applicationIdHostRegistry);
- return applicationIdHostRegistry;
- }
-
-}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
index ec37f2598e0..d45764295dd 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
@@ -1,12 +1,18 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.host;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.google.common.collect.Collections2;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
+
import java.util.logging.Level;
/**
@@ -15,20 +21,20 @@ import java.util.logging.Level;
*
* @author Ulf Lilleengen
*/
-public class HostRegistry<T> implements HostValidator<T> {
+public class HostRegistry implements HostValidator<ApplicationId> {
private static final Logger log = Logger.getLogger(HostRegistry.class.getName());
- private final Map<String, T> host2KeyMap = new ConcurrentHashMap<>();
+ private final Map<String, ApplicationId> host2KeyMap = new ConcurrentHashMap<>();
- public T getKeyForHost(String hostName) {
+ public ApplicationId getKeyForHost(String hostName) {
return host2KeyMap.get(hostName);
}
- public synchronized void update(T key, Collection<String> newHosts) {
+ public synchronized void update(ApplicationId key, Collection<String> newHosts) {
verifyHosts(key, newHosts);
Collection<String> currentHosts = getHostsForKey(key);
- log.log(Level.FINE, () -> "Setting hosts for key '" + key + "', " +
+ log.log(Level.INFO, () -> "Setting hosts for key '" + key + "', " +
"newHosts: " + newHosts + ", " +
"currentHosts: " + currentHosts);
Collection<String> removedHosts = getRemovedHosts(newHosts, currentHosts);
@@ -37,7 +43,7 @@ public class HostRegistry<T> implements HostValidator<T> {
}
@Override
- public synchronized void verifyHosts(T key, Collection<String> newHosts) {
+ public synchronized void verifyHosts(ApplicationId key, Collection<String> newHosts) {
for (String host : newHosts) {
if (hostAlreadyTaken(host, key)) {
throw new IllegalArgumentException("'" + key + "' tried to allocate host '" + host +
@@ -46,22 +52,26 @@ public class HostRegistry<T> implements HostValidator<T> {
}
}
- public synchronized void removeHostsForKey(T key) {
+ public synchronized void removeHostsForKey(ApplicationId key) {
host2KeyMap.entrySet().removeIf(entry -> entry.getValue().equals(key));
}
+ public synchronized void removeHostsForKey(TenantName key) {
+ host2KeyMap.entrySet().removeIf(entry -> entry.getValue().tenant().equals(key));
+ }
+
public synchronized Collection<String> getAllHosts() {
return Collections.unmodifiableCollection(new ArrayList<>(host2KeyMap.keySet()));
}
- synchronized Collection<String> getHostsForKey(T key) {
+ public synchronized Collection<String> getHostsForKey(ApplicationId key) {
return host2KeyMap.entrySet().stream()
.filter(entry -> entry.getValue().equals(key))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
}
- private boolean hostAlreadyTaken(String host, T key) {
+ private boolean hostAlreadyTaken(String host, ApplicationId key) {
return host2KeyMap.containsKey(host) && !key.equals(host2KeyMap.get(host));
}
@@ -76,7 +86,7 @@ public class HostRegistry<T> implements HostValidator<T> {
}
}
- private void addHosts(T key, Collection<String> newHosts) {
+ private void addHosts(ApplicationId key, Collection<String> newHosts) {
for (String host : newHosts) {
log.log(Level.FINE, () -> "Adding " + host);
host2KeyMap.put(host, key);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
index e64859e7267..370ae72bbbd 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
@@ -34,7 +34,6 @@ import com.yahoo.vespa.config.server.RequestHandler;
import com.yahoo.vespa.config.server.SuperModelRequestHandler;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.filedistribution.FileServer;
-import com.yahoo.vespa.config.server.host.HostRegistries;
import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.monitoring.MetricUpdaterFactory;
@@ -92,7 +91,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
private final DelayedConfigResponses delayedConfigResponses;
- private final HostRegistry<TenantName> hostRegistry;
+ private final HostRegistry hostRegistry;
private final Map<TenantName, Tenant> tenants = new ConcurrentHashMap<>();
private final Map<ApplicationId, ApplicationState> applicationStateMap = new ConcurrentHashMap<>();
private final SuperModelRequestHandler superModelRequestHandler;
@@ -122,7 +121,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
*/
@Inject
public RpcServer(ConfigserverConfig config, SuperModelRequestHandler superModelRequestHandler,
- MetricUpdaterFactory metrics, HostRegistries hostRegistries,
+ MetricUpdaterFactory metrics, HostRegistry hostRegistry,
HostLivenessTracker hostLivenessTracker, FileServer fileServer, RpcAuthorizer rpcAuthorizer,
RpcRequestHandlerProvider handlerProvider) {
this.superModelRequestHandler = superModelRequestHandler;
@@ -136,7 +135,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
0, TimeUnit.SECONDS, workQueue, ThreadFactoryFactory.getDaemonThreadFactory(THREADPOOL_NAME));
delayedConfigResponses = new DelayedConfigResponses(this, config.numDelayedResponseThreads());
spec = new Spec(null, config.rpcport());
- hostRegistry = hostRegistries.getTenantHostRegistry();
+ this.hostRegistry = hostRegistry;
this.useRequestVersion = config.useVespaVersionInRequest();
this.hostedVespa = config.hostedVespa();
this.canReturnEmptySentinelConfig = config.canReturnEmptySentinelConfig();
@@ -303,14 +302,14 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
}
@Override
- public void hostsUpdated(TenantName tenant, Collection<String> newHosts) {
+ public void hostsUpdated(ApplicationId applicationId, Collection<String> newHosts) {
log.log(Level.FINE, "Updating hosts in tenant host registry '" + hostRegistry + "' with " + newHosts);
- hostRegistry.update(tenant, newHosts);
+ hostRegistry.update(applicationId, newHosts);
}
@Override
- public void verifyHostsAreAvailable(TenantName tenant, Collection<String> newHosts) {
- hostRegistry.verifyHosts(tenant, newHosts);
+ public void verifyHostsAreAvailable(ApplicationId applicationId, Collection<String> newHosts) {
+ hostRegistry.verifyHosts(applicationId, newHosts);
}
@Override
@@ -334,8 +333,8 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
Optional<TenantName> resolveTenant(JRTServerConfigRequest request, Trace trace) {
if ("*".equals(request.getConfigKey().getConfigId())) return Optional.of(ApplicationId.global().tenant());
String hostname = request.getClientHostName();
- TenantName tenant = hostRegistry.getKeyForHost(hostname);
- if (tenant == null) {
+ ApplicationId applicationId = hostRegistry.getKeyForHost(hostname);
+ if (applicationId == null) {
if (GetConfigProcessor.logDebug(trace)) {
String message = "Did not find tenant for host '" + hostname + "', using " + TenantName.defaultName();
log.log(Level.FINE, message);
@@ -344,7 +343,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
}
return Optional.empty();
}
- return Optional.of(tenant);
+ return Optional.of(applicationId.tenant());
}
public ConfigResponse resolveConfig(JRTServerConfigRequest request, GetConfigContext context, Optional<Version> vespaVersion) {
@@ -425,7 +424,8 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
@Override
public void onTenantDelete(TenantName tenant) {
- log.log(Level.FINE, TenantRepository.logPre(tenant)+"Tenant deleted, removing request handler and cleaning host registry");
+ log.log(Level.FINE, TenantRepository.logPre(tenant) +
+ "Tenant deleted, removing request handler and cleaning host registry");
tenants.remove(tenant);
hostRegistry.removeHostsForKey(tenant);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/DefaultRpcAuthorizerProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/DefaultRpcAuthorizerProvider.java
index 8d1d4f58e37..b00b6db4226 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/DefaultRpcAuthorizerProvider.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/security/DefaultRpcAuthorizerProvider.java
@@ -1,4 +1,4 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.rpc.security;
import com.google.inject.Inject;
@@ -6,7 +6,7 @@ import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.provision.security.NodeIdentifier;
import com.yahoo.container.di.componentgraph.Provider;
import com.yahoo.security.tls.TransportSecurityUtils;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.rpc.RequestHandlerProvider;
/**
@@ -21,13 +21,13 @@ public class DefaultRpcAuthorizerProvider implements Provider<RpcAuthorizer> {
@Inject
public DefaultRpcAuthorizerProvider(ConfigserverConfig config,
NodeIdentifier nodeIdentifier,
- HostRegistries hostRegistries,
+ HostRegistry hostRegistry,
RequestHandlerProvider handlerProvider) {
boolean useMultiTenantAuthorizer =
TransportSecurityUtils.isTransportSecurityEnabled() && config.multitenant() && config.hostedVespa();
this.rpcAuthorizer =
useMultiTenantAuthorizer
- ? new MultiTenantRpcAuthorizer(nodeIdentifier, hostRegistries, handlerProvider, getThreadPoolSize(config))
+ ? new MultiTenantRpcAuthorizer(nodeIdentifier, hostRegistry, handlerProvider, getThreadPoolSize(config))
: new NoopRpcAuthorizer();
}
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 49a8df3d0e4..8353e3fab1f 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
@@ -1,4 +1,4 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.rpc.security;
import com.yahoo.cloud.config.SentinelConfig;
@@ -16,7 +16,6 @@ import com.yahoo.security.tls.TransportSecurityUtils;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.protocol.JRTServerConfigRequestV3;
import com.yahoo.vespa.config.server.RequestHandler;
-import com.yahoo.vespa.config.server.host.HostRegistries;
import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.rpc.RequestHandlerProvider;
@@ -34,7 +33,6 @@ import java.util.logging.Logger;
import static com.yahoo.vespa.config.server.rpc.security.AuthorizationException.Type;
import static com.yahoo.yolean.Exceptions.throwUnchecked;
-
/**
* A {@link RpcAuthorizer} that perform access control for configserver RPC methods when TLS and multi-tenant mode are enabled.
*
@@ -45,22 +43,22 @@ public class MultiTenantRpcAuthorizer implements RpcAuthorizer {
private static final Logger log = Logger.getLogger(MultiTenantRpcAuthorizer.class.getName());
private final NodeIdentifier nodeIdentifier;
- private final HostRegistry<TenantName> hostRegistry;
+ private final HostRegistry hostRegistry;
private final RequestHandlerProvider handlerProvider;
private final Executor executor;
public MultiTenantRpcAuthorizer(NodeIdentifier nodeIdentifier,
- HostRegistries hostRegistries,
+ HostRegistry hostRegistry,
RequestHandlerProvider handlerProvider,
int threadPoolSize) {
this(nodeIdentifier,
- hostRegistries.getTenantHostRegistry(),
+ hostRegistry,
handlerProvider,
Executors.newFixedThreadPool(threadPoolSize, new DaemonThreadFactory("multi-tenant-rpc-authorizer-")));
}
MultiTenantRpcAuthorizer(NodeIdentifier nodeIdentifier,
- HostRegistry<TenantName> hostRegistry,
+ HostRegistry hostRegistry,
RequestHandlerProvider handlerProvider,
Executor executor) {
this.nodeIdentifier = nodeIdentifier;
@@ -108,14 +106,14 @@ public class MultiTenantRpcAuthorizer implements RpcAuthorizer {
return; // global config access ok
} else {
String hostname = configRequest.getClientHostName();
- Optional<TenantName> tenantName = Optional.ofNullable(hostRegistry.getKeyForHost(hostname));
- if (tenantName.isEmpty()) {
+ ApplicationId applicationId = hostRegistry.getKeyForHost(hostname);
+ if (applicationId == null) {
if (isConfigKeyForSentinelConfig(configKey)) {
return; // config processor will return empty sentinel config for unknown nodes
}
throw new AuthorizationException(Type.SILENT, String.format("Host '%s' not found in host registry for [%s]", hostname, configKey));
}
- RequestHandler tenantHandler = getTenantHandler(tenantName.get());
+ RequestHandler tenantHandler = getTenantHandler(applicationId.tenant());
ApplicationId resolvedApplication = tenantHandler.resolveApplicationId(hostname);
ApplicationId peerOwner = applicationId(peerIdentity);
if (peerOwner.equals(resolvedApplication)) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
index 5c15b72eaac..a2fa7851173 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.tenant;
import com.google.common.collect.ImmutableSet;
@@ -14,6 +14,7 @@ import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.session.SessionRepository;
import com.yahoo.vespa.curator.Curator;
@@ -78,6 +79,7 @@ public class TenantRepository {
private final Map<TenantName, Tenant> tenants = Collections.synchronizedMap(new LinkedHashMap<>());
private final GlobalComponentRegistry componentRegistry;
+ private final HostRegistry hostRegistry;
private final List<TenantListener> tenantListeners = Collections.synchronizedList(new ArrayList<>());
private final Curator curator;
@@ -95,8 +97,9 @@ public class TenantRepository {
* @param componentRegistry a {@link com.yahoo.vespa.config.server.GlobalComponentRegistry}
*/
@Inject
- public TenantRepository(GlobalComponentRegistry componentRegistry) {
+ public TenantRepository(GlobalComponentRegistry componentRegistry, HostRegistry hostRegistry) {
this.componentRegistry = componentRegistry;
+ this.hostRegistry = hostRegistry;
ConfigserverConfig configserverConfig = componentRegistry.getConfigserverConfig();
this.bootstrapExecutor = Executors.newFixedThreadPool(configserverConfig.numParallelTenantLoaders(),
new DaemonThreadFactory("bootstrap tenants"));
@@ -228,7 +231,7 @@ public class TenantRepository {
componentRegistry.getMetrics(),
componentRegistry.getReloadListener(),
componentRegistry.getConfigserverConfig(),
- componentRegistry.getHostRegistries().createApplicationHostRegistry(tenantName),
+ hostRegistry,
new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName),
componentRegistry.getClock());
SessionRepository sessionRepository = new SessionRepository(tenantName,
diff --git a/configserver/src/main/resources/configserver-app/services.xml b/configserver/src/main/resources/configserver-app/services.xml
index dac10ac4e59..00c65644e47 100644
--- a/configserver/src/main/resources/configserver-app/services.xml
+++ b/configserver/src/main/resources/configserver-app/services.xml
@@ -27,7 +27,7 @@
<component id="com.yahoo.vespa.config.server.InjectedGlobalComponentRegistry" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.tenant.TenantRepository" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.application.PermanentApplicationPackage" bundle="configserver" />
- <component id="com.yahoo.vespa.config.server.host.HostRegistries" bundle="configserver" />
+ <component id="com.yahoo.vespa.config.server.host.HostRegistry" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.ApplicationRepository" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.version.VersionState" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.zookeeper.ConfigCurator" bundle="configserver" />
diff --git a/configserver/src/test/apps/app-jdisc-only-restart/hosts.xml b/configserver/src/test/apps/app-jdisc-only-restart/hosts.xml
index f4256c9fc81..ab70b288ba6 100644
--- a/configserver/src/test/apps/app-jdisc-only-restart/hosts.xml
+++ b/configserver/src/test/apps/app-jdisc-only-restart/hosts.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<hosts>
- <host name="mytesthost">
+ <host name="mytesthost2">
<alias>node1</alias>
</host>
</hosts>
diff --git a/configserver/src/test/apps/app-jdisc-only/hosts.xml b/configserver/src/test/apps/app-jdisc-only/hosts.xml
index f4256c9fc81..ab70b288ba6 100644
--- a/configserver/src/test/apps/app-jdisc-only/hosts.xml
+++ b/configserver/src/test/apps/app-jdisc-only/hosts.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<hosts>
- <host name="mytesthost">
+ <host name="mytesthost2">
<alias>node1</alias>
</host>
</hosts>
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 0cab49a9f00..b45569c95b8 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
@@ -32,6 +32,7 @@ import com.yahoo.vespa.config.protocol.VespaVersion;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.deploy.DeployTester;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.v2.PrepareResult;
import com.yahoo.vespa.config.server.session.LocalSession;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -127,7 +128,7 @@ public class ApplicationRepositoryTest {
.flagSource(flagSource)
.clock(clock)
.build();
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(TenantRepository.HOSTED_VESPA_TENANT);
tenantRepository.addTenant(tenant1);
tenantRepository.addTenant(tenant2);
@@ -192,7 +193,7 @@ public class ApplicationRepositoryTest {
PrepareResult result = prepareAndActivate(testAppJdiscOnlyRestart);
assertTrue(result.configChangeActions().getRefeedActions().isEmpty());
assertTrue(result.configChangeActions().getRestartActions().isEmpty());
- assertEquals(HostFilter.hostname("mytesthost"), provisioner.lastRestartFilter());
+ assertEquals(HostFilter.hostname("mytesthost2"), provisioner.lastRestartFilter());
}
@Test
@@ -345,7 +346,7 @@ public class ApplicationRepositoryTest {
// Deploy another app (with id fooId)
ApplicationId fooId = applicationId(tenant2);
PrepareParams prepareParams2 = new PrepareParams.Builder().applicationId(fooId).build();
- deployApp(testApp, prepareParams2);
+ deployApp(testAppJdiscOnly, prepareParams2);
assertNotNull(applicationRepository.getActiveSession(fooId));
// Delete app with id fooId, should not affect original app
@@ -530,14 +531,14 @@ public class ApplicationRepositoryTest {
list.add(new NetworkPorts.Allocation(19081, "logserver", "admin/logserver", "unused/1"));
list.add(new NetworkPorts.Allocation(19082, "logserver", "admin/logserver", "unused/2"));
list.add(new NetworkPorts.Allocation(19083, "logserver", "admin/logserver", "unused/3"));
- list.add(new NetworkPorts.Allocation(19089, "logd", "hosts/mytesthost/logd", "http"));
- list.add(new NetworkPorts.Allocation(19090, "configproxy", "hosts/mytesthost/configproxy", "rpc"));
- list.add(new NetworkPorts.Allocation(19092, "metricsproxy-container", "admin/metrics/mytesthost", "http"));
- list.add(new NetworkPorts.Allocation(19093, "metricsproxy-container", "admin/metrics/mytesthost", "http/1"));
- list.add(new NetworkPorts.Allocation(19094, "metricsproxy-container", "admin/metrics/mytesthost", "rpc/admin"));
- list.add(new NetworkPorts.Allocation(19095, "metricsproxy-container", "admin/metrics/mytesthost", "rpc/metrics"));
- list.add(new NetworkPorts.Allocation(19097, "config-sentinel", "hosts/mytesthost/sentinel", "rpc"));
- list.add(new NetworkPorts.Allocation(19098, "config-sentinel", "hosts/mytesthost/sentinel", "http"));
+ list.add(new NetworkPorts.Allocation(19089, "logd", "hosts/mytesthost2/logd", "http"));
+ list.add(new NetworkPorts.Allocation(19090, "configproxy", "hosts/mytesthost2/configproxy", "rpc"));
+ list.add(new NetworkPorts.Allocation(19092, "metricsproxy-container", "admin/metrics/mytesthost2", "http"));
+ list.add(new NetworkPorts.Allocation(19093, "metricsproxy-container", "admin/metrics/mytesthost2", "http/1"));
+ list.add(new NetworkPorts.Allocation(19094, "metricsproxy-container", "admin/metrics/mytesthost2", "rpc/admin"));
+ list.add(new NetworkPorts.Allocation(19095, "metricsproxy-container", "admin/metrics/mytesthost2", "rpc/metrics"));
+ list.add(new NetworkPorts.Allocation(19097, "config-sentinel", "hosts/mytesthost2/sentinel", "rpc"));
+ list.add(new NetworkPorts.Allocation(19098, "config-sentinel", "hosts/mytesthost2/sentinel", "http"));
list.add(new NetworkPorts.Allocation(19099, "slobrok", "admin/slobrok.0", "rpc"));
list.add(new NetworkPorts.Allocation(19100, "container", "container/container.0", "http/1"));
list.add(new NetworkPorts.Allocation(19101, "container", "container/container.0", "messaging"));
@@ -547,7 +548,7 @@ public class ApplicationRepositoryTest {
AllocatedHosts info = session.getAllocatedHosts();
assertNotNull(info);
assertThat(info.getHosts().size(), is(1));
- assertTrue(info.getHosts().contains(new HostSpec("mytesthost",
+ assertTrue(info.getHosts().contains(new HostSpec("mytesthost2",
Collections.emptyList(),
Optional.empty())));
Optional<NetworkPorts> portsCopy = info.getHosts().iterator().next().networkPorts();
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java
index bf54c2b309e..4f6642610dd 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java
@@ -8,12 +8,12 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.filedistribution.FileServer;
import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
-import com.yahoo.vespa.config.server.rpc.RpcServer;
import com.yahoo.vespa.config.server.rpc.RpcRequestHandlerProvider;
+import com.yahoo.vespa.config.server.rpc.RpcServer;
import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer;
import com.yahoo.vespa.config.server.session.SessionPreparer;
import com.yahoo.vespa.config.server.session.SessionTest;
@@ -46,7 +46,6 @@ public class InjectedGlobalComponentRegistryTest {
private RpcServer rpcServer;
private ConfigDefinitionRepo defRepo;
private PermanentApplicationPackage permanentApplicationPackage;
- private HostRegistries hostRegistries;
private GlobalComponentRegistry globalComponentRegistry;
private ModelFactoryRegistry modelFactoryRegistry;
private Zone zone;
@@ -65,20 +64,21 @@ public class InjectedGlobalComponentRegistryTest {
.configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath())
.configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()));
sessionPreparer = new SessionTest.MockSessionPreparer();
+ HostRegistry hostRegistry = new HostRegistry();
rpcServer = new RpcServer(configserverConfig, null, Metrics.createTestMetrics(),
- new HostRegistries(), new ConfigRequestHostLivenessTracker(),
+ hostRegistry, new ConfigRequestHostLivenessTracker(),
new FileServer(temporaryFolder.newFolder("filereferences")),
new NoopRpcAuthorizer(), new RpcRequestHandlerProvider());
- SuperModelGenerationCounter generationCounter = new SuperModelGenerationCounter(curator);
defRepo = new StaticConfigDefinitionRepo();
permanentApplicationPackage = new PermanentApplicationPackage(configserverConfig);
- hostRegistries = new HostRegistries();
HostProvisionerProvider hostProvisionerProvider = HostProvisionerProvider.withProvisioner(new MockProvisioner());
zone = Zone.defaultZone();
globalComponentRegistry =
- new InjectedGlobalComponentRegistry(curator, configCurator, metrics, modelFactoryRegistry, sessionPreparer, rpcServer, configserverConfig,
- generationCounter, defRepo, permanentApplicationPackage, hostRegistries, hostProvisionerProvider, zone,
- new ConfigServerDB(configserverConfig), new InMemoryFlagSource(), new MockSecretStore());
+ new InjectedGlobalComponentRegistry(curator, configCurator, metrics, modelFactoryRegistry, sessionPreparer,
+ rpcServer, configserverConfig, defRepo, permanentApplicationPackage,
+ hostProvisionerProvider, zone,
+ new ConfigServerDB(configserverConfig), new InMemoryFlagSource(),
+ new MockSecretStore(), hostRegistry);
}
@Test
@@ -92,7 +92,6 @@ public class InjectedGlobalComponentRegistryTest {
assertThat(globalComponentRegistry.getTenantListener().hashCode(), is(rpcServer.hashCode()));
assertThat(globalComponentRegistry.getStaticConfigDefinitionRepo(), is(defRepo));
assertThat(globalComponentRegistry.getPermanentApplicationPackage(), is(permanentApplicationPackage));
- assertThat(globalComponentRegistry.getHostRegistries(), is(hostRegistries));
assertThat(globalComponentRegistry.getZone(), is (zone));
assertTrue(globalComponentRegistry.getHostProvisioner().isPresent());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
index 965374f2aa4..c58bd6d6b0a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
@@ -83,34 +83,6 @@ public class SuperModelControllerTest {
}
@Test
- public void test_lb_config_multiple_apps_legacy_super_model() throws IOException, SAXException {
- Map<ApplicationId, ApplicationInfo> models = new LinkedHashMap<>();
- TenantName t1 = TenantName.from("t1");
- TenantName t2 = TenantName.from("t2");
- File testApp1 = new File("src/test/resources/deploy/app");
- File testApp2 = new File("src/test/resources/deploy/advancedapp");
- File testApp3 = new File("src/test/resources/deploy/advancedapp");
-
- ApplicationId simple = applicationId("mysimpleapp", t1);
- ApplicationId advanced = applicationId("myadvancedapp", t1);
- ApplicationId tooAdvanced = applicationId("minetooadvancedapp", t2);
- models.put(simple, createApplicationInfo(testApp1, simple, 4L));
- models.put(advanced, createApplicationInfo(testApp2, advanced, 4L));
- models.put(tooAdvanced, createApplicationInfo(testApp3, tooAdvanced, 4L));
-
- SuperModel superModel = new SuperModel(models, true);
- SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone(), new InMemoryFlagSource()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory());
- LbServicesConfig.Builder lb = new LbServicesConfig.Builder();
- han.getSuperModel().getConfig(lb);
- LbServicesConfig lbc = new LbServicesConfig(lb);
- assertThat(lbc.tenants().size(), is(2));
- assertThat(lbc.tenants("t1").applications().size(), is(2));
- assertThat(lbc.tenants("t2").applications().size(), is(1));
- assertThat(lbc.tenants("t2").applications("minetooadvancedapp:prod:default:default").hosts().size(), is(1));
- assertQrServer(lbc.tenants("t2").applications("minetooadvancedapp:prod:default:default"));
- }
-
- @Test
public void test_lb_config_multiple_apps() throws IOException, SAXException {
Map<ApplicationId, ApplicationInfo> models = new LinkedHashMap<>();
TenantName t1 = TenantName.from("t1");
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
index e6652c3c5e1..0221cf9abfc 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
@@ -12,12 +12,12 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.application.TenantApplicationsTest;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory;
+import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionFactory;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory;
-import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionFactory;
import com.yahoo.vespa.config.server.session.SessionPreparer;
import com.yahoo.vespa.config.server.tenant.MockTenantListener;
import com.yahoo.vespa.config.server.tenant.TenantListener;
@@ -50,7 +50,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
private final ReloadListener reloadListener;
private final TenantListener tenantListener;
private final PermanentApplicationPackage permanentApplicationPackage;
- private final HostRegistries hostRegistries;
private final FileDistributionFactory fileDistributionFactory;
private final ModelFactoryRegistry modelFactoryRegistry;
private final Optional<Provisioner> hostProvisioner;
@@ -66,7 +65,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
ModelFactoryRegistry modelFactoryRegistry,
PermanentApplicationPackage permanentApplicationPackage,
FileDistributionFactory fileDistributionFactory,
- HostRegistries hostRegistries,
ConfigserverConfig configserverConfig,
SessionPreparer sessionPreparer,
Optional<Provisioner> hostProvisioner,
@@ -85,7 +83,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
this.tenantListener = tenantListener;
this.defRepo = defRepo;
this.permanentApplicationPackage = permanentApplicationPackage;
- this.hostRegistries = hostRegistries;
this.fileDistributionFactory = fileDistributionFactory;
this.modelFactoryRegistry = modelFactoryRegistry;
this.hostProvisioner = hostProvisioner;
@@ -112,7 +109,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
private ReloadListener reloadListener = new TenantApplicationsTest.MockReloadListener();
private final MockTenantListener tenantListener = new MockTenantListener();
private Optional<PermanentApplicationPackage> permanentApplicationPackage = Optional.empty();
- private final HostRegistries hostRegistries = new HostRegistries();
private final Optional<FileDistributionFactory> fileDistributionFactory = Optional.empty();
private ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(Collections.singletonList(new VespaModelFactory(new NullConfigModelRegistry())));
private Optional<Provisioner> hostProvisioner = Optional.empty();
@@ -188,7 +184,7 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
configserverConfig, defRepo, curator,
zone, flagSource, secretStore);
return new TestComponentRegistry(curator, ConfigCurator.create(curator), metrics, modelFactoryRegistry,
- permApp, fileDistributionProvider, hostRegistries, configserverConfig,
+ permApp, fileDistributionProvider, configserverConfig,
sessionPreparer, hostProvisioner, defRepo, reloadListener, tenantListener,
zone, clock, secretStore, flagSource);
}
@@ -213,8 +209,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
@Override
public PermanentApplicationPackage getPermanentApplicationPackage() { return permanentApplicationPackage; }
@Override
- public HostRegistries getHostRegistries() { return hostRegistries;}
- @Override
public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; }
@Override
public Optional<Provisioner> getHostProvisioner() {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java
index 947308962d4..4543d3b5673 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.server.ReloadListener;
import com.yahoo.vespa.config.server.ServerCache;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.model.TestModelFactory;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
@@ -75,10 +76,11 @@ public class TenantApplicationsTest {
.modelFactoryRegistry(createRegistry())
.reloadListener(listener)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ HostRegistry hostRegistry = new HostRegistry();
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, hostRegistry);
tenantRepository.addTenant(TenantRepository.HOSTED_VESPA_TENANT);
tenantRepository.addTenant(tenantName);
- applications = TenantApplications.create(componentRegistry, tenantName);
+ applications = TenantApplications.create(componentRegistry, hostRegistry, tenantName);
}
@Test
@@ -151,12 +153,12 @@ public class TenantApplicationsTest {
}
@Override
- public void hostsUpdated(TenantName tenant, Collection<String> newHosts) {
- tenantHosts.put(tenant.value(), newHosts);
+ public void hostsUpdated(ApplicationId applicationId, Collection<String> newHosts) {
+ tenantHosts.put(applicationId.tenant().value(), newHosts);
}
@Override
- public void verifyHostsAreAvailable(TenantName tenant, Collection<String> newHosts) {
+ public void verifyHostsAreAvailable(ApplicationId applicationId, Collection<String> newHosts) {
}
@Override
@@ -171,7 +173,7 @@ public class TenantApplicationsTest {
@Test
public void testListConfigs() throws IOException, SAXException {
- applications = TenantApplications.create(componentRegistry, TenantName.defaultName());
+ applications = TenantApplications.create(componentRegistry, new HostRegistry(), TenantName.defaultName());
assertdefaultAppNotFound();
VespaModel model = new VespaModel(FilesApplicationPackage.fromFile(new File("src/test/apps/app")));
@@ -206,7 +208,7 @@ public class TenantApplicationsTest {
}
private TenantApplications createZKAppRepo() {
- return TenantApplications.create(componentRegistry, tenantName);
+ return TenantApplications.create(componentRegistry, new HostRegistry(), tenantName);
}
private static ApplicationId createApplicationId(String name) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index 5b5f830c737..54d23652349 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -26,6 +26,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TimeoutBudget;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.v2.PrepareResult;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
@@ -289,7 +290,7 @@ public class DeployTester {
.zone(zone);
if (configserverConfig.hostedVespa()) testComponentRegistryBuilder.provisioner(provisioner);
- TenantRepository tenantRepository = new TenantRepository(testComponentRegistryBuilder.build());
+ TenantRepository tenantRepository = new TenantRepository(testComponentRegistryBuilder.build(), new HostRegistry());
tenantRepository.addTenant(tenantName);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java
index 63dfb1d01bd..173e9f3e148 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java
@@ -1,37 +1,44 @@
// 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.host;
+import com.yahoo.config.provision.ApplicationId;
+import org.junit.Test;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import org.junit.Test;
-
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
/**
* @author Ulf Lilleengen
*/
public class HostRegistryTest {
+
+ private final ApplicationId foo = ApplicationId.from("foo", "app1", "default");
+ private final ApplicationId bar = ApplicationId.from("bar", "app2", "default");
+
@Test
public void old_hosts_are_removed() {
- HostRegistry<String> reg = new HostRegistry<>();
+ HostRegistry reg = new HostRegistry();
assertNull(reg.getKeyForHost("foo.com"));
- reg.update("fookey", List.of("foo.com", "bar.com", "baz.com"));
- assertGetKey(reg, "foo.com", "fookey");
- assertGetKey(reg, "bar.com", "fookey");
- assertGetKey(reg, "baz.com", "fookey");
+ reg.update(foo, List.of("foo.com", "bar.com", "baz.com"));
+ assertGetKey(reg, "foo.com", foo);
+ assertGetKey(reg, "bar.com", foo);
+ assertGetKey(reg, "baz.com", foo);
assertThat(reg.getAllHosts().size(), is(3));
- reg.update("fookey", List.of("bar.com", "baz.com"));
+ reg.update(foo, List.of("bar.com", "baz.com"));
assertNull(reg.getKeyForHost("foo.com"));
- assertGetKey(reg, "bar.com", "fookey");
- assertGetKey(reg, "baz.com", "fookey");
+ assertGetKey(reg, "bar.com", foo);
+ assertGetKey(reg, "baz.com", foo);
assertThat(reg.getAllHosts().size(), is(2));
assertThat(reg.getAllHosts(), contains("bar.com", "baz.com"));
- reg.removeHostsForKey("fookey");
+ reg.removeHostsForKey(foo);
assertThat(reg.getAllHosts().size(), is(0));
assertNull(reg.getKeyForHost("foo.com"));
assertNull(reg.getKeyForHost("bar.com"));
@@ -39,51 +46,51 @@ public class HostRegistryTest {
@Test
public void multiple_keys_are_handled() {
- HostRegistry<String> reg = new HostRegistry<>();
- reg.update("fookey", List.of("foo.com", "bar.com"));
- reg.update("barkey", List.of("baz.com", "quux.com"));
- assertGetKey(reg, "foo.com", "fookey");
- assertGetKey(reg, "bar.com", "fookey");
- assertGetKey(reg, "baz.com", "barkey");
- assertGetKey(reg, "quux.com", "barkey");
+ HostRegistry reg = new HostRegistry();
+ reg.update(foo, List.of("foo.com", "bar.com"));
+ reg.update(bar, List.of("baz.com", "quux.com"));
+ assertGetKey(reg, "foo.com", foo);
+ assertGetKey(reg, "bar.com", foo);
+ assertGetKey(reg, "baz.com", bar);
+ assertGetKey(reg, "quux.com", bar);
}
@Test(expected = IllegalArgumentException.class)
public void keys_cannot_overlap() {
- HostRegistry<String> reg = new HostRegistry<>();
- reg.update("fookey", List.of("foo.com", "bar.com"));
- reg.update("barkey", List.of("bar.com", "baz.com"));
+ HostRegistry reg = new HostRegistry();
+ reg.update(foo, List.of("foo.com", "bar.com"));
+ reg.update(bar, List.of("bar.com", "baz.com"));
}
@Test
public void all_hosts_are_returned() {
- HostRegistry<String> reg = new HostRegistry<>();
- reg.update("fookey", List.of("foo.com", "bar.com"));
- reg.update("barkey", List.of("baz.com", "quux.com"));
+ HostRegistry reg = new HostRegistry();
+ reg.update(foo, List.of("foo.com", "bar.com"));
+ reg.update(bar, List.of("baz.com", "quux.com"));
assertThat(reg.getAllHosts().size(), is(4));
}
@Test
public void ensure_that_collection_is_copied() {
- HostRegistry<String> reg = new HostRegistry<>();
+ HostRegistry reg = new HostRegistry();
List<String> hosts = new ArrayList<>(List.of("foo.com", "bar.com", "baz.com"));
- reg.update("fookey", hosts);
- assertThat(reg.getHostsForKey("fookey").size(), is(3));
+ reg.update(foo, hosts);
+ assertThat(reg.getHostsForKey(foo).size(), is(3));
hosts.remove(2);
- assertThat(reg.getHostsForKey("fookey").size(), is(3));
+ assertThat(reg.getHostsForKey(foo).size(), is(3));
}
@Test
public void ensure_that_underlying_hosts_do_not_change() {
- HostRegistry<String> reg = new HostRegistry<>();
- reg.update("fookey", List.of("foo.com", "bar.com", "baz.com"));
+ HostRegistry reg = new HostRegistry();
+ reg.update(foo, List.of("foo.com", "bar.com", "baz.com"));
Collection<String> hosts = reg.getAllHosts();
assertThat(hosts.size(), is(3));
- reg.update("fookey", List.of("foo.com"));
+ reg.update(foo, List.of("foo.com"));
assertThat(hosts.size(), is(3));
}
- private void assertGetKey(HostRegistry<String> reg, String host, String expectedKey) {
+ private void assertGetKey(HostRegistry reg, String host, ApplicationId expectedKey) {
assertNotNull(reg.getKeyForHost(host));
assertThat(reg.getKeyForHost(host), is(expectedKey));
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java
index 9b6ced7f0f6..6c5e25d0503 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java
@@ -11,6 +11,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import org.junit.Before;
@@ -58,7 +59,7 @@ public class HttpGetConfigHandlerTest {
.configDefinitionRepo(new TestConfigDefinitionRepo())
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenant);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java
index 203b70c2f85..b55b250fc1c 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HttpListConfigsHandler.ListConfigsResponse;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -63,7 +64,7 @@ public class HttpListConfigsHandlerTest {
.configDefinitionRepo(new TestConfigDefinitionRepo())
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenant);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
index 126dfe88141..06bac6497a2 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.ContentHandlerTestBase;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.session.Session;
@@ -36,14 +37,12 @@ import static org.junit.Assert.assertThat;
public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
private static final File testApp = new File("src/test/apps/content");
- private static final File testApp2 = new File("src/test/apps/content2");
private final TenantName tenantName1 = TenantName.from("mofet");
private final TenantName tenantName2 = TenantName.from("bla");
private final String baseServer = "http://foo:1337";
private final ApplicationId appId1 = new ApplicationId.Builder().tenant(tenantName1).applicationName("foo").instanceName("quux").build();
- private final ApplicationId appId2 = new ApplicationId.Builder().tenant(tenantName2).applicationName("foo").instanceName("quux").build();
private ApplicationRepository applicationRepository;
private ApplicationHandler handler;
@@ -64,7 +63,7 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
.build();
Clock clock = componentRegistry.getClock();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenantName1);
tenantRepository.addTenant(tenantName2);
@@ -77,8 +76,6 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
.build();
applicationRepository.deploy(testApp, prepareParams(appId1));
- applicationRepository.deploy(testApp2, prepareParams(appId2));
-
handler = new ApplicationHandler(ApplicationHandler.testOnlyContext(),
Zone.defaultZone(),
applicationRepository);
@@ -113,14 +110,6 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
}
@Test
- public void require_that_multiple_tenants_are_handled() throws IOException {
- assertContent("/test.txt", "foo\n");
- pathPrefix = createPath(appId2, Zone.defaultZone());
- baseUrl = baseServer + pathPrefix;
- assertContent("/test.txt", "bar\n");
- }
-
- @Test
public void require_that_get_does_not_set_write_flag() throws IOException {
Tenant tenant1 = applicationRepository.getTenant(appId1);
Session session = applicationRepository.getActiveLocalSession(tenant1, appId1);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
index a0c63c8bba1..f9b33791a36 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java
@@ -26,6 +26,7 @@ import com.yahoo.vespa.config.server.application.ClusterReindexing.Status;
import com.yahoo.vespa.config.server.application.HttpProxy;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.deploy.DeployTester;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
@@ -76,6 +77,7 @@ import static org.mockito.Mockito.when;
public class ApplicationHandlerTest {
private static final File testApp = new File("src/test/apps/app");
+ private static final File testAppJdiscOnly = new File("src/test/apps/app-jdisc-only");
private final static TenantName mytenantName = TenantName.from("mytenant");
private final static ApplicationId myTenantApplicationId = ApplicationId.from(mytenantName, ApplicationName.defaultName(), InstanceName.defaultName());
@@ -108,7 +110,7 @@ public class ApplicationHandlerTest {
.configServerConfig(configserverConfig)
.clock(clock)
.build();
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(mytenantName);
provisioner = new MockProvisioner();
orchestrator = new OrchestratorMock();
@@ -150,7 +152,7 @@ public class ApplicationHandlerTest {
.instanceName("quux")
.build();
PrepareParams prepareParams2 = new PrepareParams.Builder().applicationId(fooId).build();
- applicationRepository.deploy(testApp, prepareParams2);
+ applicationRepository.deploy(testAppJdiscOnly, prepareParams2);
assertApplicationExists(fooId, Zone.defaultZone());
deleteAndAssertOKResponseMocked(fooId, true);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
index 0b5c5d3d4da..6ef1a0b63cd 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java
@@ -14,6 +14,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -56,7 +57,7 @@ public class HostHandlerTest {
.zone(zone)
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(mytenant);
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java
index f3703c5397d..68cd474412f 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java
@@ -13,6 +13,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpConfigRequest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
@@ -66,7 +67,7 @@ public class HttpGetConfigHandlerTest {
.configDefinitionRepo(new TestConfigDefinitionRepo())
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenant);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java
index c1c9874c35c..985a88ceed2 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java
@@ -15,6 +15,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.v2.HttpListConfigsHandler.ListConfigsResponse;
@@ -70,7 +71,7 @@ public class HttpListConfigsHandlerTest {
.configDefinitionRepo(new TestConfigDefinitionRepo())
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenant);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java
index 80a0b9edba6..232243c2b74 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java
@@ -12,6 +12,7 @@ import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.http.HttpRequest.Method;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.TenantApplications;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import org.junit.Before;
@@ -41,7 +42,7 @@ public class ListApplicationsHandlerTest {
@Before
public void setup() {
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(mytenant);
tenantRepository.addTenant(foobar);
applicationRepo = tenantRepository.getTenant(mytenant).getApplicationRepo();
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
index 23b711adc02..8e9ef42352c 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
@@ -15,6 +15,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TimeoutBudget;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.model.TestModelFactory;
@@ -79,7 +80,7 @@ public class SessionActiveHandlerTest {
.modelFactoryRegistry(new ModelFactoryRegistry(List.of((modelFactory))))
.configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenantName);
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
index 4f9b656dfb1..ce086cbfb15 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java
@@ -14,6 +14,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.ContentHandlerTestBase;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -60,7 +61,7 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase {
.configServerConfig(configserverConfig)
.build();
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenantName);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
index 84feecec669..7efd448c3ed 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java
@@ -11,6 +11,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.CompressedApplicationInputStreamTest;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.session.Session;
@@ -62,7 +63,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest {
@Before
public void setupRepo() {
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withProvisioner(new MockProvisioner())
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
index d24faa1b433..ed65d8294b8 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.TimeoutBudget;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.HttpErrorResponse;
import com.yahoo.vespa.config.server.http.SessionHandler;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
@@ -81,7 +82,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
.build();
Clock clock = componentRegistry.getClock();
timeoutBudget = new TimeoutBudget(clock, Duration.ofSeconds(10));
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
tenantRepository.addTenant(tenant);
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
index 3d1d2f95e88..a8cc989c802 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -56,7 +57,8 @@ public class TenantHandlerTest {
tenantRepository = new TenantRepository(new TestComponentRegistry.Builder()
.curator(new MockCurator())
.configServerConfig(configserverConfig)
- .build());
+ .build(),
+ new HostRegistry());
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
index 1f93f1ce6fe..1d8f60bb683 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java
@@ -11,6 +11,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.deploy.DeployTester;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -46,7 +47,7 @@ class MaintainerTester {
.provisioner(provisioner)
.modelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock))))
.build();
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withProvisioner(provisioner)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
index 9bd7a25faf2..a072bf62852 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
@@ -56,7 +56,8 @@ public class TenantsMaintainerTest {
assertNotNull(tenantRepository.getTenant(TenantName.defaultName()));
assertNotNull(tenantRepository.getTenant(TenantRepository.HOSTED_VESPA_TENANT));
- // Add tenant again and deploy
+ // Delete app, add tenant again and deploy
+ tester.applicationRepository().delete(applicationId(shouldNotBeDeleted));
tenantRepository.addTenant(shouldBeDeleted);
tester.deployApp(applicationPackage, prepareParams(shouldBeDeleted));
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java
index 7f4733f0b7c..997633eeb53 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.rpc;
import com.yahoo.cloud.config.ConfigserverConfig;
@@ -8,7 +8,7 @@ import com.yahoo.vespa.config.protocol.JRTServerConfigRequest;
import com.yahoo.vespa.config.server.GetConfigContext;
import com.yahoo.vespa.config.server.filedistribution.FileServer;
import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer;
@@ -37,7 +37,7 @@ public class MockRpcServer extends RpcServer {
super(createConfig(port),
null,
Metrics.createTestMetrics(),
- new HostRegistries(),
+ new HostRegistry(),
new ConfigRequestHostLivenessTracker(),
new FileServer(tempDir),
new NoopRpcAuthorizer(),
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
index 735eae2700f..5a41eff3cc9 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
@@ -64,31 +64,19 @@ public class RpcServerTest {
try (RpcTester tester = new RpcTester(applicationId, temporaryFolder)) {
ApplicationRepository applicationRepository = tester.applicationRepository();
applicationRepository.deploy(testApp, new PrepareParams.Builder().applicationId(applicationId).build());
- TenantApplications applicationRepo = tester.tenant().getApplicationRepo();
- RemoteSession activeSession = applicationRepository.getActiveRemoteSession(applicationId);
- ApplicationSet applicationSet = tester.tenant().getSessionRepository().ensureApplicationLoaded(activeSession);
- applicationRepo.activateApplication(applicationSet, activeSession.getSessionId());
testPrintStatistics(tester);
testGetConfig(tester);
testEnabled(tester);
testApplicationNotLoadedErrorWhenAppDeleted(tester);
- testEmptySentinelConfigWhenAppDeletedOnHostedVespa();
}
}
- private void testApplicationNotLoadedErrorWhenAppDeleted(RpcTester tester) throws InterruptedException, IOException {
- tester.rpcServer().onTenantDelete(tenantName);
- tester.rpcServer().onTenantsLoaded();
+ private void testApplicationNotLoadedErrorWhenAppDeleted(RpcTester tester) {
+ tester.applicationRepository().delete(applicationId);
JRTClientConfigRequest clientReq = createSimpleRequest();
tester.performRequest(clientReq.getRequest());
assertFalse(clientReq.validateResponse());
assertThat(clientReq.errorCode(), is(ErrorCode.APPLICATION_NOT_LOADED));
- tester.stopRpc();
- tester.createAndStartRpcServer();
- tester.rpcServer().onTenantsLoaded();
- clientReq = createSimpleRequest();
- tester.performRequest(clientReq.getRequest());
- assertTrue(clientReq.validateResponse());
}
@Test
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
index 2b2ed13fcfe..06c224b5a09 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
@@ -12,7 +12,6 @@ import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Transport;
import com.yahoo.net.HostName;
import com.yahoo.test.ManualClock;
-import com.yahoo.vespa.config.GenerationCounter;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.MemoryGenerationCounter;
import com.yahoo.vespa.config.server.MockProvisioner;
@@ -24,7 +23,7 @@ import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.filedistribution.FileServer;
import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker;
-import com.yahoo.vespa.config.server.host.HostRegistries;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer;
import com.yahoo.vespa.config.server.tenant.Tenant;
@@ -55,15 +54,15 @@ public class RpcTester implements AutoCloseable {
private final ManualClock clock = new ManualClock(Instant.ofEpochMilli(100));
private final String myHostname = HostName.getLocalhost();
private final HostLivenessTracker hostLivenessTracker = new ConfigRequestHostLivenessTracker(clock);
- private final GenerationCounter generationCounter;
private final Spec spec;
- private RpcServer rpcServer;
+ private final RpcServer rpcServer;
private Thread t;
private Supervisor sup;
private final ApplicationId applicationId;
private final TenantName tenantName;
private final TenantRepository tenantRepository;
+ private final HostRegistry hostRegistry = new HostRegistry();
private final ApplicationRepository applicationRepository;
private final List<Integer> allocatedPorts = new ArrayList<>();
@@ -85,23 +84,26 @@ public class RpcTester implements AutoCloseable {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath());
configserverConfig = new ConfigserverConfig(configBuilder);
+ rpcServer = createRpcServer(configserverConfig);
TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
.configDefinitionRepo(new TestConfigDefinitionRepo())
.configServerConfig(configserverConfig)
+ .reloadListener(rpcServer)
.build();
- tenantRepository = new TenantRepository(componentRegistry);
+ tenantRepository = new TenantRepository(componentRegistry, hostRegistry);
tenantRepository.addTenant(tenantName);
+ startRpcServer();
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
+ .withConfigserverConfig(configserverConfig)
.withProvisioner(new MockProvisioner())
.withOrchestrator(new OrchestratorMock())
.build();
- generationCounter = new MemoryGenerationCounter();
- createAndStartRpcServer();
assertFalse(hostLivenessTracker.lastRequestFrom(myHostname).isPresent());
}
public void close() {
+ rpcServer.stop();
for (Integer port : allocatedPorts) {
PortRangeAllocator.releasePort(port);
}
@@ -113,24 +115,25 @@ public class RpcTester implements AutoCloseable {
return port;
}
- void createAndStartRpcServer() throws IOException {
- HostRegistries hostRegistries = new HostRegistries();
- hostRegistries.createApplicationHostRegistry(tenantName).update(applicationId, List.of("localhost"));
- hostRegistries.getTenantHostRegistry().update(tenantName, List.of("localhost"));
- rpcServer = new RpcServer(configserverConfig,
- new SuperModelRequestHandler(new TestConfigDefinitionRepo(),
- configserverConfig,
- new SuperModelManager(
- configserverConfig,
- Zone.defaultZone() ,
- generationCounter,
- new InMemoryFlagSource())),
- Metrics.createTestMetrics(),
- hostRegistries,
- hostLivenessTracker,
- new FileServer(temporaryFolder.newFolder()),
- new NoopRpcAuthorizer(),
- new RpcRequestHandlerProvider());
+ RpcServer createRpcServer(ConfigserverConfig config) throws IOException {
+ return new RpcServer(config,
+ new SuperModelRequestHandler(new TestConfigDefinitionRepo(),
+ configserverConfig,
+ new SuperModelManager(
+ config,
+ Zone.defaultZone(),
+ new MemoryGenerationCounter(),
+ new InMemoryFlagSource())),
+ Metrics.createTestMetrics(),
+ hostRegistry,
+ hostLivenessTracker,
+ new FileServer(temporaryFolder.newFolder()),
+ new NoopRpcAuthorizer(),
+ new RpcRequestHandlerProvider());
+ }
+
+ void startRpcServer() {
+ hostRegistry.update(applicationId, List.of("localhost"));
rpcServer.onTenantCreate(tenantRepository.getTenant(tenantName));
t = new Thread(rpcServer);
t.start();
@@ -165,7 +168,7 @@ public class RpcTester implements AutoCloseable {
void performRequest(Request req) {
clock.advance(Duration.ofMillis(10));
- sup.connect(spec).invokeSync(req, 120.0);
+ sup.connect(spec).invokeSync(req, 10.0);
if (req.methodName().equals(RpcServer.getConfigMethodName))
assertEquals(clock.instant(), hostLivenessTracker.lastRequestFrom(myHostname).get());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java
index 9e1edb35b8f..12debc347de 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java
@@ -7,7 +7,6 @@ import com.yahoo.config.FileReference;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.security.NodeIdentifier;
import com.yahoo.config.provision.security.NodeIdentifierException;
import com.yahoo.config.provision.security.NodeIdentity;
@@ -66,7 +65,7 @@ public class MultiTenantRpcAuthorizerTest {
@Test
public void configserver_can_access_files_and_config() throws InterruptedException, ExecutionException {
RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.config).build(),
- new HostRegistry<>());
+ new HostRegistry());
Request configRequest = createConfigRequest(new ConfigKey<>("name", "configid", "namespace"), HOSTNAME);
authorizer.authorizeConfigRequest(configRequest)
@@ -83,8 +82,8 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(APPLICATION_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
- hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value()));
+ HostRegistry hostRegistry = new HostRegistry();
+ hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value()));
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -99,7 +98,7 @@ public class MultiTenantRpcAuthorizerTest {
@Test
public void proxy_node_can_access_lbservice_config() throws ExecutionException, InterruptedException {
- RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.proxy).build(), new HostRegistry<>());
+ RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.proxy).build(), new HostRegistry());
Request configRequest = createConfigRequest(
new ConfigKey<>(LbServicesConfig.CONFIG_DEF_NAME, "*", LbServicesConfig.CONFIG_DEF_NAMESPACE),
@@ -110,7 +109,7 @@ public class MultiTenantRpcAuthorizerTest {
@Test
public void tenant_node_cannot_access_lbservice_config() throws ExecutionException, InterruptedException {
- RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.tenant).build(), new HostRegistry<>());
+ RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.tenant).build(), new HostRegistry());
Request configRequest = createConfigRequest(
new ConfigKey<>(LbServicesConfig.CONFIG_DEF_NAME, "*", LbServicesConfig.CONFIG_DEF_NAMESPACE),
@@ -129,8 +128,8 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(APPLICATION_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
- hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value()));
+ HostRegistry hostRegistry = new HostRegistry();
+ hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value()));
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -149,8 +148,8 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(EVIL_APP_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
- hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value()));
+ HostRegistry hostRegistry = new HostRegistry();
+ hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value()));
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -169,7 +168,7 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(EVIL_APP_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
+ HostRegistry hostRegistry = new HostRegistry();
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -188,8 +187,8 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(EVIL_APP_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
- hostRegistry.update(EVIL_APP_ID.tenant(), List.of(HOSTNAME.value()));
+ HostRegistry hostRegistry = new HostRegistry();
+ hostRegistry.update(EVIL_APP_ID, List.of(HOSTNAME.value()));
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -208,7 +207,7 @@ public class MultiTenantRpcAuthorizerTest {
.applicationId(APPLICATION_ID)
.build();
- HostRegistry<TenantName> hostRegistry = new HostRegistry<>();
+ HostRegistry hostRegistry = new HostRegistry();
RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry);
@@ -219,7 +218,7 @@ public class MultiTenantRpcAuthorizerTest {
}
- private static RpcAuthorizer createAuthorizer(NodeIdentity identity, HostRegistry<TenantName> hostRegistry) {
+ private static RpcAuthorizer createAuthorizer(NodeIdentity identity, HostRegistry hostRegistry) {
return new MultiTenantRpcAuthorizer(
new StaticNodeIdentifier(identity),
hostRegistry,
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
index 76958264d84..90d3bddc88d 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
@@ -187,7 +187,7 @@ public class SessionPreparerTest {
@Test(expected = InvalidApplicationException.class)
public void require_exception_for_overlapping_host() throws IOException {
FilesApplicationPackage app = getApplicationPackage(testApp);
- HostRegistry<ApplicationId> hostValidator = new HostRegistry<>();
+ HostRegistry hostValidator = new HostRegistry();
hostValidator.update(applicationId("foo"), Collections.singletonList("mytesthost"));
preparer.prepare(hostValidator, new BaseDeployLogger(), new PrepareParams.Builder().applicationId(applicationId("default")).build(),
Optional.empty(), Instant.now(), app.getAppDir(), app, createSessionZooKeeperClient());
@@ -200,7 +200,7 @@ public class SessionPreparerTest {
if (level.equals(Level.WARNING) && message.contains("The host mytesthost is already in use")) logged.append("ok");
};
FilesApplicationPackage app = getApplicationPackage(testApp);
- HostRegistry<ApplicationId> hostValidator = new HostRegistry<>();
+ HostRegistry hostValidator = new HostRegistry();
ApplicationId applicationId = applicationId();
hostValidator.update(applicationId, Collections.singletonList("mytesthost"));
preparer.prepare(hostValidator, logger, new PrepareParams.Builder().applicationId(applicationId).build(),
@@ -367,7 +367,7 @@ public class SessionPreparerTest {
private PrepareResult prepare(File app, PrepareParams params, long sessionId) throws IOException {
FilesApplicationPackage applicationPackage = getApplicationPackage(app);
- return preparer.prepare(new HostRegistry<>(), getLogger(), params,
+ return preparer.prepare(new HostRegistry(), getLogger(), params,
Optional.empty(), Instant.now(), applicationPackage.getAppDir(),
applicationPackage, createSessionZooKeeperClient(sessionId));
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
index bfcfc7d6e43..b2cfd7015ba 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
@@ -20,6 +20,7 @@ import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.http.InvalidApplicationException;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -60,6 +61,7 @@ public class SessionRepositoryTest {
private static final TenantName tenantName = TenantName.defaultName();
private static final ApplicationId applicationId = ApplicationId.from(tenantName.value(), "testApp", "default");
private static final File testApp = new File("src/test/apps/app");
+ private static final File appJdiscOnly = new File("src/test/apps/app-jdisc-only");
private MockCurator curator;
private TenantRepository tenantRepository;
@@ -90,7 +92,7 @@ public class SessionRepositoryTest {
.build())
.flagSource(flagSource)
.build();
- tenantRepository = new TenantRepository(globalComponentRegistry);
+ tenantRepository = new TenantRepository(globalComponentRegistry, new HostRegistry());
tenantRepository.addTenant(SessionRepositoryTest.tenantName);
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
@@ -135,7 +137,7 @@ public class SessionRepositoryTest {
// tenant is "newTenant"
TenantName newTenant = TenantName.from("newTenant");
tenantRepository.addTenant(newTenant);
- long sessionId = deploy(ApplicationId.from(newTenant.value(), "testapp", "default"));
+ long sessionId = deploy(ApplicationId.from(newTenant.value(), "testapp", "default"), appJdiscOnly);
SessionRepository sessionRepository2 = tenantRepository.getTenant(newTenant).getSessionRepository();
assertNotNull(sessionRepository2.getLocalSession(sessionId));
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java
index 4900c50f1d7..dbc352128f5 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.config.server.application.Application;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.application.TenantApplicationsTest;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -66,7 +67,7 @@ public class TenantRepositoryTest {
listener = (TenantApplicationsTest.MockReloadListener)globalComponentRegistry.getReloadListener();
tenantListener = (MockTenantListener)globalComponentRegistry.getTenantListener();
assertFalse(tenantListener.tenantsLoaded);
- tenantRepository = new TenantRepository(globalComponentRegistry);
+ tenantRepository = new TenantRepository(globalComponentRegistry, new HostRegistry());
assertTrue(tenantListener.tenantsLoaded);
tenantRepository.addTenant(tenant1);
tenantRepository.addTenant(tenant2);
@@ -201,7 +202,7 @@ public class TenantRepositoryTest {
private static class FailingDuringBootstrapTenantRepository extends TenantRepository {
public FailingDuringBootstrapTenantRepository(GlobalComponentRegistry globalComponentRegistry) {
- super(globalComponentRegistry);
+ super(globalComponentRegistry, new HostRegistry());
}
@Override
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java
index ac596198fe5..1b754ca6695 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.tenant;
import com.google.common.testing.EqualsTester;
import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.host.HostRegistry;
import org.junit.Before;
import org.junit.Test;
@@ -32,7 +33,7 @@ public class TenantTest {
}
private Tenant createTenant(String name) {
- TenantRepository tenantRepository = new TenantRepository(componentRegistry);
+ TenantRepository tenantRepository = new TenantRepository(componentRegistry, new HostRegistry());
TenantName tenantName = TenantName.from(name);
tenantRepository.addTenant(tenantName);
return tenantRepository.getTenant(tenantName);
diff --git a/configserver/src/test/resources/deploy/advancedapp/services.xml b/configserver/src/test/resources/deploy/advancedapp/services.xml
index e3d5aea585b..b8e93b14317 100644
--- a/configserver/src/test/resources/deploy/advancedapp/services.xml
+++ b/configserver/src/test/resources/deploy/advancedapp/services.xml
@@ -22,7 +22,7 @@
<documents>
<document type="keyvalue" mode="index"/>
</documents>
- <nodes>>
+ <nodes>
<node hostalias="node1" distribution-key="0"/>
</nodes>
</content>