summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-01-21 16:22:35 +0100
committerGitHub <noreply@github.com>2021-01-21 16:22:35 +0100
commitd5da5e8f57a3d4c54de3b9cbf2da4790dc5e2d23 (patch)
tree70d2534521c90c03b5cd7702edc63d825ba3ded6 /configserver
parentc8f7692d9ffcb93bd296f0f24512d35bdcfa4490 (diff)
parenta21ff82b88f7d634c158da7a86ba11f4e8390acb (diff)
Merge pull request #16143 from vespa-engine/hmusum/reduce-use-of-global-component-registry-part-2
Reduce use of global component registry, part 2 [run-systemtest]
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java40
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java24
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java41
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java71
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java29
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java88
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java19
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java12
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java17
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java13
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java11
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java17
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java13
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java21
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java21
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java28
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java32
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java40
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java24
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java61
33 files changed, 375 insertions, 366 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 ec4523c4ba0..35a6dc8b74b 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,14 +1,8 @@
// 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;
-import com.yahoo.config.model.api.ConfigDefinitionRepo;
-import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.tenant.TenantListener;
-import java.time.Clock;
-
/**
* Interface representing all global config server components used within the config server.
*
@@ -16,12 +10,6 @@ import java.time.Clock;
*/
public interface GlobalComponentRegistry {
- ConfigserverConfig getConfigserverConfig();
TenantListener getTenantListener();
ReloadListener getReloadListener();
- ConfigDefinitionRepo getStaticConfigDefinitionRepo();
- ModelFactoryRegistry getModelFactoryRegistry();
- Zone getZone();
- Clock getClock();
- ConfigServerDB getConfigServerDB();
}
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 433e0971c61..27fc9a79ea0 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
@@ -2,15 +2,9 @@
package com.yahoo.vespa.config.server;
import com.google.inject.Inject;
-import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.config.model.api.ConfigDefinitionRepo;
-import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.rpc.RpcServer;
import com.yahoo.vespa.config.server.tenant.TenantListener;
-import java.time.Clock;
-
/**
* Registry containing all the "static"/"global" components in a config server in one place.
*
@@ -18,49 +12,17 @@ import java.time.Clock;
*/
public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry {
- private final ModelFactoryRegistry modelFactoryRegistry;
private final RpcServer rpcServer;
- private final ConfigserverConfig configserverConfig;
- private final ConfigDefinitionRepo staticConfigDefinitionRepo;
- private final Zone zone;
- private final ConfigServerDB configServerDB;
@SuppressWarnings("WeakerAccess")
@Inject
- public InjectedGlobalComponentRegistry(ModelFactoryRegistry modelFactoryRegistry,
- RpcServer rpcServer,
- ConfigserverConfig configserverConfig,
- ConfigDefinitionRepo staticConfigDefinitionRepo,
- Zone zone,
- ConfigServerDB configServerDB) {
- this.modelFactoryRegistry = modelFactoryRegistry;
+ public InjectedGlobalComponentRegistry(RpcServer rpcServer) {
this.rpcServer = rpcServer;
- this.configserverConfig = configserverConfig;
- this.staticConfigDefinitionRepo = staticConfigDefinitionRepo;
- this.zone = zone;
- this.configServerDB = configServerDB;
}
@Override
- public ConfigserverConfig getConfigserverConfig() { return configserverConfig; }
- @Override
public TenantListener getTenantListener() { return rpcServer; }
@Override
public ReloadListener getReloadListener() { return rpcServer; }
- @Override
- public ConfigDefinitionRepo getStaticConfigDefinitionRepo() { return staticConfigDefinitionRepo; }
- @Override
- public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; }
-
- @Override
- public Zone getZone() {
- return zone;
- }
-
- @Override
- public Clock getClock() {return Clock.systemUTC();}
-
- @Override
- public ConfigServerDB getConfigServerDB() { return configServerDB; }
}
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 2b9488b7fc7..6542014c787 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
@@ -13,6 +13,7 @@ import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.GetConfigRequest;
import com.yahoo.vespa.config.protocol.ConfigResponse;
+import com.yahoo.vespa.config.server.ConfigServerDB;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.NotFoundException;
import com.yahoo.vespa.config.server.ReloadListener;
@@ -91,17 +92,19 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
public static TenantApplications create(GlobalComponentRegistry componentRegistry,
HostRegistry hostRegistry,
TenantName tenantName,
- Curator curator) {
+ Curator curator,
+ ConfigserverConfig configserverConfig,
+ Clock clock) {
return new TenantApplications(tenantName,
curator,
new StripedExecutor<>(new InThreadExecutorService()),
new InThreadExecutorService(),
Metrics.createTestMetrics(),
componentRegistry.getReloadListener(),
- componentRegistry.getConfigserverConfig(),
+ configserverConfig,
hostRegistry,
- new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName),
- componentRegistry.getClock());
+ new TenantFileSystemDirs(new ConfigServerDB(configserverConfig), tenantName),
+ clock);
}
/** The curator backed ZK storage of this. */
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java
index 0014d66026b..d2de843303e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.config.server.http.status;
import com.google.inject.Inject;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.model.api.ModelFactory;
import com.yahoo.component.Version;
import com.yahoo.container.jdisc.HttpRequest;
@@ -12,6 +13,7 @@ import com.yahoo.slime.SlimeUtils;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.http.HttpHandler;
import com.yahoo.vespa.config.server.http.JSONResponse;
+import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import static com.yahoo.jdisc.http.HttpResponse.Status.OK;
@@ -22,33 +24,35 @@ import static com.yahoo.jdisc.http.HttpResponse.Status.OK;
*/
public class StatusHandler extends HttpHandler {
- private final GlobalComponentRegistry componentRegistry;
+ private final ModelFactoryRegistry modelFactoryRegistry;
+ private final ConfigserverConfig configserverConfig;
@Inject
- public StatusHandler(Context ctx, GlobalComponentRegistry componentRegistry) {
+ public StatusHandler(Context ctx, ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig) {
super(ctx);
- this.componentRegistry = componentRegistry;
+ this.modelFactoryRegistry = modelFactoryRegistry;
+ this.configserverConfig = configserverConfig;
}
@Override
public HttpResponse handleGET(HttpRequest req) {
- return new StatusResponse(OK, componentRegistry);
+ return new StatusResponse(OK, modelFactoryRegistry, configserverConfig);
}
private static class StatusResponse extends JSONResponse {
- StatusResponse(int status, GlobalComponentRegistry componentRegistry) {
+ StatusResponse(int status, ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig) {
super(status);
Cursor configCursor = object.setObject("configserverConfig");
- SlimeUtils.copyObject(ConfigPayload.fromInstance(componentRegistry.getConfigserverConfig()).getSlime().get(),
+ SlimeUtils.copyObject(ConfigPayload.fromInstance(configserverConfig).getSlime().get(),
configCursor);
Cursor modelVersionsCursor = object.setArray("modelVersions");
- componentRegistry.getModelFactoryRegistry().getFactories().stream()
- .map(ModelFactory::version)
- .map(Version::toFullString)
- .forEach(modelVersionsCursor::addString);
+ modelFactoryRegistry.getFactories().stream()
+ .map(ModelFactory::version)
+ .map(Version::toFullString)
+ .forEach(modelVersionsCursor::addString);
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
index f779cad245a..31c265b24df 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.config.server.modelfactory;
import com.google.common.collect.ImmutableSet;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
@@ -14,6 +15,7 @@ import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.DockerImage;
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.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.ServerCache;
@@ -71,17 +73,21 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
PermanentApplicationPackage permanentApplicationPackage,
FlagSource flagSource,
SecretStore secretStore,
- HostProvisionerProvider hostProvisionerProvider) {
- super(globalComponentRegistry.getModelFactoryRegistry(),
- globalComponentRegistry.getConfigserverConfig(),
- globalComponentRegistry.getZone(),
+ HostProvisionerProvider hostProvisionerProvider,
+ ConfigserverConfig configserverConfig,
+ Zone zone,
+ ModelFactoryRegistry modelFactoryRegistry,
+ ConfigDefinitionRepo configDefinitionRepo) {
+ super(modelFactoryRegistry,
+ configserverConfig,
+ zone,
hostProvisionerProvider);
this.tenant = tenant;
this.applicationGeneration = applicationGeneration;
this.zkClient = zkClient;
this.currentActiveApplicationSet = currentActiveApplicationSet;
this.permanentApplicationPackage = permanentApplicationPackage;
- this.configDefinitionRepo = globalComponentRegistry.getStaticConfigDefinitionRepo();
+ this.configDefinitionRepo = configDefinitionRepo;
this.metrics = metrics;
this.curator = curator;
this.flagSource = flagSource;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index 041768ec41e..725ad3b5503 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -3,15 +3,18 @@ package com.yahoo.vespa.config.server.session;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.concurrent.StripedExecutor;
import com.yahoo.config.FileReference;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.application.provider.DeployData;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.io.IOUtils;
import com.yahoo.lang.SettableOptional;
@@ -19,6 +22,7 @@ import com.yahoo.path.Path;
import com.yahoo.transaction.AbstractTransaction;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.transaction.Transaction;
+import com.yahoo.vespa.config.server.ConfigServerDB;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.TimeoutBudget;
import com.yahoo.vespa.config.server.application.ApplicationSet;
@@ -28,6 +32,7 @@ import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
import com.yahoo.vespa.config.server.filedistribution.FileDirectory;
import com.yahoo.vespa.config.server.modelfactory.ActivatedModelsBuilder;
+import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
@@ -102,6 +107,11 @@ public class SessionRepository {
private final SessionCounter sessionCounter;
private final SecretStore secretStore;
private final HostProvisionerProvider hostProvisionerProvider;
+ private final ConfigserverConfig configserverConfig;
+ private final ConfigServerDB configServerDB;
+ private final Zone zone;
+ private final ModelFactoryRegistry modelFactoryRegistry;
+ private final ConfigDefinitionRepo configDefinitionRepo;
public SessionRepository(TenantName tenantName,
GlobalComponentRegistry componentRegistry,
@@ -114,25 +124,36 @@ public class SessionRepository {
FlagSource flagSource,
ExecutorService zkCacheExecutor,
SecretStore secretStore,
- HostProvisionerProvider hostProvisionerProvider) {
+ HostProvisionerProvider hostProvisionerProvider,
+ ConfigserverConfig configserverConfig,
+ ConfigServerDB configServerDB,
+ Zone zone,
+ Clock clock,
+ ModelFactoryRegistry modelFactoryRegistry,
+ ConfigDefinitionRepo configDefinitionRepo) {
this.tenantName = tenantName;
this.componentRegistry = componentRegistry;
this.configCurator = ConfigCurator.create(curator);
sessionCounter = new SessionCounter(configCurator, tenantName);
this.sessionsPath = TenantRepository.getSessionsPath(tenantName);
- this.clock = componentRegistry.getClock();
+ this.clock = clock;
this.curator = curator;
- this.sessionLifetime = Duration.ofSeconds(componentRegistry.getConfigserverConfig().sessionLifetime());
+ this.sessionLifetime = Duration.ofSeconds(configserverConfig.sessionLifetime());
this.zkWatcherExecutor = command -> zkWatcherExecutor.execute(tenantName, command);
this.permanentApplicationPackage = permanentApplicationPackage;
this.flagSource = flagSource;
- this.tenantFileSystemDirs = new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName);
+ this.tenantFileSystemDirs = new TenantFileSystemDirs(configServerDB, tenantName);
this.applicationRepo = applicationRepo;
this.sessionPreparer = sessionPreparer;
this.metrics = metrics;
this.metricUpdater = metrics.getOrCreateMetricUpdater(Metrics.createDimensions(tenantName));
this.secretStore = secretStore;
this.hostProvisionerProvider = hostProvisionerProvider;
+ this.configserverConfig = configserverConfig;
+ this.configServerDB = configServerDB;
+ this.zone = zone;
+ this.modelFactoryRegistry = modelFactoryRegistry;
+ this.configDefinitionRepo = configDefinitionRepo;
loadSessions(); // Needs to be done before creating cache below
this.directoryCache = curator.createDirectoryCache(sessionsPath.getAbsolute(), false, false, zkCacheExecutor);
@@ -458,7 +479,11 @@ public class SessionRepository {
permanentApplicationPackage,
flagSource,
secretStore,
- hostProvisionerProvider);
+ hostProvisionerProvider,
+ configserverConfig,
+ zone,
+ modelFactoryRegistry,
+ configDefinitionRepo);
// Read hosts allocated on the config server instance which created this
SettableOptional<AllocatedHosts> allocatedHosts = new SettableOptional<>(applicationPackage.getAllocatedHosts());
@@ -671,7 +696,7 @@ public class SessionRepository {
FileReference fileReference = sessionZKClient.readApplicationPackageReference();
log.log(Level.FINE, () -> "File reference for session id " + sessionId + ": " + fileReference);
if (fileReference != null) {
- File rootDir = new File(Defaults.getDefaults().underVespaHome(componentRegistry.getConfigserverConfig().fileReferencesDir()));
+ File rootDir = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir()));
File sessionDir;
FileDirectory fileDirectory = new FileDirectory(rootDir);
try {
@@ -709,7 +734,7 @@ public class SessionRepository {
}
private SessionZooKeeperClient createSessionZooKeeperClient(long sessionId) {
- String serverId = componentRegistry.getConfigserverConfig().serverId();
+ String serverId = configserverConfig.serverId();
return new SessionZooKeeperClient(curator, configCurator, tenantName, sessionId, serverId);
}
@@ -722,7 +747,7 @@ public class SessionRepository {
}
private File getSessionAppDir(long sessionId) {
- return new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName).getUserApplicationDir(sessionId);
+ return new TenantFileSystemDirs(configServerDB, tenantName).getUserApplicationDir(sessionId);
}
private void updateSessionStateWatcher(long sessionId, RemoteSession remoteSession) {
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 7daf56df487..c97d562e081 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
@@ -7,18 +7,22 @@ import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.concurrent.StripedExecutor;
import com.yahoo.concurrent.ThreadFactoryFactory;
+import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
import com.yahoo.transaction.Transaction;
+import com.yahoo.vespa.config.server.ConfigServerDB;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory;
import com.yahoo.vespa.config.server.host.HostRegistry;
+import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
@@ -34,6 +38,7 @@ import org.apache.curator.framework.state.ConnectionState;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
+import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
@@ -98,6 +103,12 @@ public class TenantRepository {
private final FlagSource flagSource;
private final SecretStore secretStore;
private final HostProvisionerProvider hostProvisionerProvider;
+ private final ConfigserverConfig configserverConfig;
+ private final ConfigServerDB configServerDB;
+ private final Zone zone;
+ private final Clock clock;
+ private final ModelFactoryRegistry modelFactoryRegistry;
+ private final ConfigDefinitionRepo configDefinitionRepo;
private final ExecutorService bootstrapExecutor;
private final ScheduledExecutorService checkForRemovedApplicationsService =
new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory("check for removed applications"));
@@ -115,17 +126,28 @@ public class TenantRepository {
Metrics metrics,
FlagSource flagSource,
SecretStore secretStore,
- HostProvisionerProvider hostProvisionerProvider) {
+ HostProvisionerProvider hostProvisionerProvider,
+ ConfigserverConfig configserverConfig,
+ ConfigServerDB configServerDB,
+ Zone zone,
+ ModelFactoryRegistry modelFactoryRegistry,
+ ConfigDefinitionRepo configDefinitionRepo) {
this(componentRegistry,
hostRegistry,
curator,
metrics,
new StripedExecutor<>(),
- new FileDistributionFactory(componentRegistry.getConfigserverConfig()),
+ new FileDistributionFactory(configserverConfig),
flagSource,
Executors.newFixedThreadPool(1, ThreadFactoryFactory.getThreadFactory(TenantRepository.class.getName())),
secretStore,
- hostProvisionerProvider);
+ hostProvisionerProvider,
+ configserverConfig,
+ configServerDB,
+ zone,
+ Clock.systemUTC(),
+ modelFactoryRegistry,
+ configDefinitionRepo);
}
public TenantRepository(GlobalComponentRegistry componentRegistry,
@@ -137,10 +159,16 @@ public class TenantRepository {
FlagSource flagSource,
ExecutorService zkCacheExecutor,
SecretStore secretStore,
- HostProvisionerProvider hostProvisionerProvider) {
+ HostProvisionerProvider hostProvisionerProvider,
+ ConfigserverConfig configserverConfig,
+ ConfigServerDB configServerDB,
+ Zone zone,
+ Clock clock,
+ ModelFactoryRegistry modelFactoryRegistry,
+ ConfigDefinitionRepo configDefinitionRepo) {
this.componentRegistry = componentRegistry;
this.hostRegistry = hostRegistry;
- ConfigserverConfig configserverConfig = componentRegistry.getConfigserverConfig();
+ this.configserverConfig = configserverConfig;
this.bootstrapExecutor = Executors.newFixedThreadPool(configserverConfig.numParallelTenantLoaders(),
new DaemonThreadFactory("bootstrap tenants"));
this.curator = curator;
@@ -153,6 +181,11 @@ public class TenantRepository {
this.flagSource = flagSource;
this.secretStore = secretStore;
this.hostProvisionerProvider = hostProvisionerProvider;
+ this.configServerDB = configServerDB;
+ this.zone = zone;
+ this.clock = clock;
+ this.modelFactoryRegistry = modelFactoryRegistry;
+ this.configDefinitionRepo = configDefinitionRepo;
curator.framework().getConnectionStateListenable().addListener(this::stateChanged);
@@ -180,7 +213,7 @@ public class TenantRepository {
public synchronized Tenant addTenant(TenantName tenantName) {
writeTenantPath(tenantName);
- return createTenant(tenantName, componentRegistry.getClock().instant());
+ return createTenant(tenantName, clock.instant());
}
public void createAndWriteTenantMetaData(Tenant tenant) {
@@ -258,7 +291,7 @@ public class TenantRepository {
if (stat.isPresent())
return Instant.ofEpochMilli(stat.get().getCtime());
else
- return componentRegistry.getClock().instant();
+ return clock.instant();
}
// Creates tenant and all its dependencies. This also includes loading active applications
@@ -276,19 +309,19 @@ public class TenantRepository {
zkCacheExecutor,
metrics,
componentRegistry.getReloadListener(),
- componentRegistry.getConfigserverConfig(),
+ configserverConfig,
hostRegistry,
- new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName),
- componentRegistry.getClock());
- PermanentApplicationPackage permanentApplicationPackage = new PermanentApplicationPackage(componentRegistry.getConfigserverConfig());
- SessionPreparer sessionPreparer = new SessionPreparer(componentRegistry.getModelFactoryRegistry(),
+ new TenantFileSystemDirs(configServerDB, tenantName),
+ clock);
+ PermanentApplicationPackage permanentApplicationPackage = new PermanentApplicationPackage(configserverConfig);
+ SessionPreparer sessionPreparer = new SessionPreparer(modelFactoryRegistry,
fileDistributionFactory,
hostProvisionerProvider,
permanentApplicationPackage,
- componentRegistry.getConfigserverConfig(),
- componentRegistry.getStaticConfigDefinitionRepo(),
+ configserverConfig,
+ configDefinitionRepo,
curator,
- componentRegistry.getZone(),
+ zone,
flagSource,
secretStore);
SessionRepository sessionRepository = new SessionRepository(tenantName,
@@ -302,7 +335,13 @@ public class TenantRepository {
flagSource,
zkCacheExecutor,
secretStore,
- hostProvisionerProvider);
+ hostProvisionerProvider,
+ configserverConfig,
+ configServerDB,
+ zone,
+ clock,
+ modelFactoryRegistry,
+ configDefinitionRepo);
log.log(Level.INFO, "Adding tenant '" + tenantName + "'" + ", created " + created);
Tenant tenant = new Tenant(tenantName, sessionRepository, applicationRepo, applicationRepo, created);
notifyNewTenant(tenant);
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 36e1698d69f..1cbc4c1c6d6 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
@@ -123,12 +123,12 @@ public class ApplicationRepositoryTest {
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
- .clock(clock)
.build();
InMemoryFlagSource flagSource = new InMemoryFlagSource();
tenantRepository = new TestTenantRepository.Builder()
+ .withClock(clock)
.withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
.withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig))
.withFlagSource(flagSource)
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 9665e0095e9..84fa6a9db18 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
@@ -2,50 +2,37 @@
package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.config.model.NullConfigModelRegistry;
-import com.yahoo.config.model.api.ConfigDefinitionRepo;
-import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.config.server.filedistribution.FileServer;
import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker;
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.RpcRequestHandlerProvider;
import com.yahoo.vespa.config.server.rpc.RpcServer;
import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer;
-import com.yahoo.vespa.model.VespaModelFactory;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.IOException;
-import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
/**
* @author Ulf Lilleengen
*/
public class InjectedGlobalComponentRegistryTest {
- private ConfigserverConfig configserverConfig;
private RpcServer rpcServer;
- private ConfigDefinitionRepo defRepo;
private GlobalComponentRegistry globalComponentRegistry;
- private ModelFactoryRegistry modelFactoryRegistry;
- private Zone zone;
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Before
public void setupRegistry() throws IOException {
- modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry())));
- configserverConfig = new ConfigserverConfig(
+ ConfigserverConfig configserverConfig = new ConfigserverConfig(
new ConfigserverConfig.Builder()
.configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath())
.configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()));
@@ -54,25 +41,13 @@ public class InjectedGlobalComponentRegistryTest {
hostRegistry, new ConfigRequestHostLivenessTracker(),
new FileServer(temporaryFolder.newFolder("filereferences")),
new NoopRpcAuthorizer(), new RpcRequestHandlerProvider());
- defRepo = new StaticConfigDefinitionRepo();
- zone = Zone.defaultZone();
- globalComponentRegistry =
- new InjectedGlobalComponentRegistry(modelFactoryRegistry,
- rpcServer,
- configserverConfig,
- defRepo,
- zone,
- new ConfigServerDB(configserverConfig));
+ globalComponentRegistry = new InjectedGlobalComponentRegistry(rpcServer);
}
@Test
public void testThatAllComponentsAreSetup() {
- assertThat(globalComponentRegistry.getModelFactoryRegistry(), is(modelFactoryRegistry));
- assertThat(globalComponentRegistry.getConfigserverConfig(), is(configserverConfig));
assertThat(globalComponentRegistry.getReloadListener().hashCode(), is(rpcServer.hashCode()));
assertThat(globalComponentRegistry.getTenantListener().hashCode(), is(rpcServer.hashCode()));
- assertThat(globalComponentRegistry.getStaticConfigDefinitionRepo(), is(defRepo));
- assertThat(globalComponentRegistry.getZone(), is(zone));
}
}
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 24f59ee8675..987289e347c 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,124 +1,40 @@
// 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;
-import com.yahoo.config.model.NullConfigModelRegistry;
-import com.yahoo.config.model.api.ConfigDefinitionRepo;
-import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.config.server.application.TenantApplicationsTest;
-import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.tenant.MockTenantListener;
import com.yahoo.vespa.config.server.tenant.TenantListener;
-import com.yahoo.vespa.model.VespaModelFactory;
-
-import java.nio.file.Files;
-import java.time.Clock;
-import java.util.Collections;
-
-import static com.yahoo.yolean.Exceptions.uncheck;
/**
* @author Ulf Lilleengen
*/
public class TestComponentRegistry implements GlobalComponentRegistry {
- private final ConfigserverConfig configserverConfig;
- private final ConfigDefinitionRepo defRepo;
private final ReloadListener reloadListener;
private final TenantListener tenantListener;
- private final ModelFactoryRegistry modelFactoryRegistry;
- private final Zone zone;
- private final Clock clock;
- private final ConfigServerDB configServerDB;
- private TestComponentRegistry(ModelFactoryRegistry modelFactoryRegistry,
- ConfigserverConfig configserverConfig,
- ConfigDefinitionRepo defRepo,
- ReloadListener reloadListener,
- TenantListener tenantListener,
- Zone zone,
- Clock clock) {
- this.configserverConfig = configserverConfig;
+ private TestComponentRegistry(ReloadListener reloadListener, TenantListener tenantListener) {
this.reloadListener = reloadListener;
this.tenantListener = tenantListener;
- this.defRepo = defRepo;
- this.modelFactoryRegistry = modelFactoryRegistry;
- this.zone = zone;
- this.clock = clock;
- this.configServerDB = new ConfigServerDB(configserverConfig);
}
public static class Builder {
- private ConfigserverConfig configserverConfig = new ConfigserverConfig(
- new ConfigserverConfig.Builder()
- .configServerDBDir(uncheck(() -> Files.createTempDirectory("serverdb")).toString())
- .configDefinitionsDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString())
- .sessionLifetime(5));
- private ConfigDefinitionRepo defRepo = new StaticConfigDefinitionRepo();
private ReloadListener reloadListener = new TenantApplicationsTest.MockReloadListener();
private final MockTenantListener tenantListener = new MockTenantListener();
- private ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(Collections.singletonList(new VespaModelFactory(new NullConfigModelRegistry())));
- private Zone zone = Zone.defaultZone();
- private Clock clock = Clock.systemUTC();
-
- public Builder configServerConfig(ConfigserverConfig configserverConfig) {
- this.configserverConfig = configserverConfig;
- return this;
- }
-
- public Builder modelFactoryRegistry(ModelFactoryRegistry modelFactoryRegistry) {
- this.modelFactoryRegistry = modelFactoryRegistry;
- return this;
- }
-
- public Builder zone(Zone zone) {
- this.zone = zone;
- return this;
- }
-
- public Builder clock(Clock clock) {
- this.clock = clock;
- return this;
- }
public Builder reloadListener(ReloadListener reloadListener) {
this.reloadListener = reloadListener;
return this;
}
- public Builder configDefinitionRepo(ConfigDefinitionRepo configDefinitionRepo) {
- this.defRepo = configDefinitionRepo;
- return this;
- }
-
public TestComponentRegistry build() {
- return new TestComponentRegistry(modelFactoryRegistry,
- configserverConfig,
- defRepo,
- reloadListener,
- tenantListener,
- zone,
- clock);
+ return new TestComponentRegistry(reloadListener, tenantListener);
}
}
@Override
- public ConfigserverConfig getConfigserverConfig() { return configserverConfig; }
- @Override
public TenantListener getTenantListener() { return tenantListener; }
@Override
public ReloadListener getReloadListener() { return reloadListener; }
- @Override
- public ConfigDefinitionRepo getStaticConfigDefinitionRepo() { return defRepo; }
- @Override
- public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; }
- @Override
- public Zone getZone() {
- return zone;
- }
- @Override
- public Clock getClock() { return clock;}
- @Override
- public ConfigServerDB getConfigServerDB() { return configServerDB;}
}
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 732c9385608..d44a037e71e 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
@@ -31,6 +31,7 @@ import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
+import java.time.Clock;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
@@ -60,6 +61,7 @@ public class TenantApplicationsTest {
private CuratorFramework curatorFramework;
private TestComponentRegistry componentRegistry;
private TenantApplications applications;
+ private ConfigserverConfig configserverConfig;
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@@ -68,24 +70,24 @@ public class TenantApplicationsTest {
public void setup() throws IOException {
curator = new MockCurator();
curatorFramework = curator.framework();
- ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
+ configserverConfig = new ConfigserverConfig.Builder()
.payloadCompressionType(ConfigserverConfig.PayloadCompressionType.Enum.UNCOMPRESSED)
.configServerDBDir(tempFolder.newFolder("configserverdb").getAbsolutePath())
.configDefinitionsDir(tempFolder.newFolder("configdefinitions").getAbsolutePath())
.build();
componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
- .modelFactoryRegistry(createRegistry())
.reloadListener(listener)
.build();
HostRegistry hostRegistry = new HostRegistry();
TenantRepository tenantRepository = new TestTenantRepository.Builder()
.withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
+ .withModelFactoryRegistry(createRegistry())
.build();
tenantRepository.addTenant(TenantRepository.HOSTED_VESPA_TENANT);
tenantRepository.addTenant(tenantName);
- applications = TenantApplications.create(componentRegistry, hostRegistry, tenantName, curator);
+ applications = TenantApplications.create(componentRegistry, hostRegistry, tenantName, curator, configserverConfig, Clock.systemUTC());
}
@Test
@@ -178,7 +180,12 @@ public class TenantApplicationsTest {
@Test
public void testListConfigs() throws IOException, SAXException {
- applications = TenantApplications.create(componentRegistry, new HostRegistry(), TenantName.defaultName(), new MockCurator());
+ applications = TenantApplications.create(componentRegistry,
+ new HostRegistry(),
+ TenantName.defaultName(),
+ new MockCurator(),
+ configserverConfig,
+ Clock.systemUTC());
assertdefaultAppNotFound();
VespaModel model = new VespaModel(FilesApplicationPackage.fromFile(new File("src/test/apps/app")));
@@ -213,7 +220,7 @@ public class TenantApplicationsTest {
}
private TenantApplications createZKAppRepo() {
- return TenantApplications.create(componentRegistry, new HostRegistry(), tenantName, curator);
+ return TenantApplications.create(componentRegistry, new HostRegistry(), tenantName, curator, configserverConfig, Clock.systemUTC());
}
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 eb8f633f4ba..c1c2867285d 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
@@ -283,17 +283,17 @@ public class DeployTester {
List<ModelFactory> modelFactories = Optional.ofNullable(this.modelFactories)
.orElseGet(() -> List.of(createModelFactory(clock)));
- TestComponentRegistry.Builder testComponentRegistryBuilder = new TestComponentRegistry.Builder()
- .clock(clock)
- .configServerConfig(configserverConfig)
- .modelFactoryRegistry(new ModelFactoryRegistry(modelFactories))
- .zone(zone);
+ TestComponentRegistry.Builder testComponentRegistryBuilder = new TestComponentRegistry.Builder();
TestTenantRepository.Builder builder = new TestTenantRepository.Builder()
+ .withClock(clock)
.withComponentRegistry(testComponentRegistryBuilder.build())
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
+ .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig))
.withMetrics(Optional.ofNullable(metrics).orElse(Metrics.createTestMetrics()))
- .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig));
+ .withModelFactoryRegistry((new ModelFactoryRegistry(modelFactories)))
+ .withZone(zone);
if (configserverConfig.hostedVespa()) builder.withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, true));
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 3631922f844..030ff243c21 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
@@ -9,7 +9,6 @@ import com.yahoo.container.jdisc.HttpResponse;
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.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
@@ -55,11 +54,11 @@ public class HttpGetConfigHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configDefinitionRepo(new TestConfigDefinitionRepo())
- .configServerConfig(configserverConfig)
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
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 cdf89eda367..56a0049247a 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
@@ -10,7 +10,6 @@ import com.yahoo.vespa.config.ConfigKey;
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.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.HttpListConfigsHandler.ListConfigsResponse;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -60,11 +59,11 @@ public class HttpListConfigsHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configDefinitionRepo(new TestConfigDefinitionRepo())
- .configServerConfig(configserverConfig)
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
tenantRepository.addTenant(tenant);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java
index 52e9591e63c..22bf582668e 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java
@@ -1,16 +1,19 @@
-// 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.http.status;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.model.NullConfigModelRegistry;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
-import com.yahoo.vespa.config.server.TestComponentRegistry;
import com.yahoo.vespa.config.server.http.SessionHandlerTest;
+import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
+import com.yahoo.vespa.model.VespaModelFactory;
import org.junit.Test;
import java.io.IOException;
+import java.util.List;
import static com.yahoo.jdisc.http.HttpRequest.Method.GET;
import static org.junit.Assert.assertEquals;
@@ -24,15 +27,15 @@ public class StatusHandlerTest {
@Test
public void require_that_handler_works() throws IOException {
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
- StatusHandler handler = new StatusHandler(StatusHandler.testOnlyContext(), componentRegistry);
+ ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry())));
+ ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder().build();
+ StatusHandler handler = new StatusHandler(StatusHandler.testOnlyContext(), modelFactoryRegistry, configserverConfig);
HttpResponse response = handler.handle(HttpRequest.createTestRequest("/status", GET));
JsonNode jsonNode = mapper.readTree(SessionHandlerTest.getRenderedString(response));
- ConfigserverConfig expectedConfig = componentRegistry.getConfigserverConfig();
- assertEquals(expectedConfig.rpcport(), jsonNode.get("configserverConfig").get("rpcport").asInt());
- assertEquals(expectedConfig.applicationDirectory(), jsonNode.get("configserverConfig").get("applicationDirectory").asText());
+ assertEquals(configserverConfig.rpcport(), jsonNode.get("configserverConfig").get("rpcport").asInt());
+ assertEquals(configserverConfig.applicationDirectory(), jsonNode.get("configserverConfig").get("applicationDirectory").asText());
assertEquals(1, jsonNode.get("modelVersions").size());
}
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 02129a1b5cd..085c3913b9b 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
@@ -25,7 +25,6 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
-import java.time.Clock;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
@@ -52,18 +51,17 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
@Before
public void setupHandler() throws IOException {
-
ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
.configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath())
.configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
- .build();
- Clock clock = componentRegistry.getClock();
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
tenantRepository.addTenant(tenantName1);
tenantRepository.addTenant(tenantName2);
@@ -71,7 +69,6 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase {
.withTenantRepository(tenantRepository)
.withProvisioner(new MockProvisioner())
.withOrchestrator(new OrchestratorMock())
- .withClock(clock)
.withConfigserverConfig(configserverConfig)
.build();
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 0e0fd5babd5..bc6ee90a9a7 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
@@ -109,16 +109,15 @@ public class ApplicationHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(modelFactories))
- .configServerConfig(configserverConfig)
- .clock(clock)
- .build();
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
provisioner = new MockProvisioner();
tenantRepository = new TestTenantRepository.Builder()
+ .withClock(clock)
.withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig))
.withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, false))
+ .withModelFactoryRegistry(new ModelFactoryRegistry(modelFactories))
.build();
tenantRepository.addTenant(mytenantName);
orchestrator = new OrchestratorMock();
@@ -126,7 +125,7 @@ public class ApplicationHandlerTest {
.withTenantRepository(tenantRepository)
.withProvisioner(provisioner)
.withOrchestrator(orchestrator)
- .withClock(componentRegistry.getClock())
+ .withClock(clock)
.withTesterClient(testerClient)
.withLogRetriever(logRetriever)
.withConfigserverConfig(configserverConfig)
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 671faa42f7b..4d4a06dd05c 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
@@ -54,10 +54,11 @@ public class HostHandlerTest {
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .zone(zone)
- .configServerConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
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 d32734cd571..9bb66b0723c 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
@@ -11,7 +11,6 @@ import com.yahoo.container.jdisc.HttpResponse;
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.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.application.OrchestratorMock;
import com.yahoo.vespa.config.server.http.HandlerTest;
import com.yahoo.vespa.config.server.http.HttpConfigRequest;
@@ -64,13 +63,11 @@ public class HttpGetConfigHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configDefinitionRepo(new TestConfigDefinitionRepo())
- .configServerConfig(configserverConfig)
- .build();
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
MockProvisioner provisioner = new MockProvisioner();
TenantRepository tenantRepository = new TestTenantRepository.Builder()
.withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, false))
.build();
tenantRepository.addTenant(tenant);
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 cf04c8df56c..8a2f02629ea 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
@@ -13,9 +13,7 @@ import com.yahoo.vespa.config.ConfigKey;
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.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;
@@ -68,11 +66,11 @@ public class HttpListConfigsHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configDefinitionRepo(new TestConfigDefinitionRepo())
- .configServerConfig(configserverConfig)
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
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 e3930c2784d..7cabd9ea7e3 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
@@ -1,6 +1,7 @@
// 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.http.v2;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
@@ -16,7 +17,9 @@ import com.yahoo.vespa.config.server.http.SessionHandlerTest;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.server.tenant.TestTenantRepository;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
import java.io.IOException;
@@ -40,9 +43,19 @@ public class ListApplicationsHandlerTest {
private TenantApplications applicationRepo, applicationRepo2;
private ListApplicationsHandler handler;
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
@Before
- public void setup() {
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ public void setup() throws IOException {
+ ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
+ .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
+ .build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
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 24176d17c38..c782a8d2555 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
@@ -34,6 +34,7 @@ import org.junit.rules.TemporaryFolder;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.time.Clock;
import java.time.Duration;
import java.util.List;
@@ -58,9 +59,9 @@ public class SessionActiveHandlerTest {
private static final String pathPrefix = "/application/v2/tenant/" + tenantName + "/session/";
private MockProvisioner provisioner;
- private TestComponentRegistry componentRegistry;
private ApplicationRepository applicationRepository;
private SessionActiveHandler handler;
+ private final Clock clock = Clock.systemUTC();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -74,17 +75,18 @@ public class SessionActiveHandlerTest {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- componentRegistry = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of((modelFactory))))
- .configServerConfig(configserverConfig)
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .withModelFactoryRegistry(new ModelFactoryRegistry(List.of((modelFactory))))
.build();
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
tenantRepository.addTenant(tenantName);
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withProvisioner(provisioner)
.withOrchestrator(new OrchestratorMock())
- .withClock(componentRegistry.getClock())
+ .withClock(clock)
.withConfigserverConfig(configserverConfig)
.build();
handler = createHandler();
@@ -135,7 +137,7 @@ public class SessionActiveHandlerTest {
void invoke() {
long sessionId = applicationRepository.createSession(applicationId(),
- new TimeoutBudget(componentRegistry.getClock(), Duration.ofSeconds(10)),
+ new TimeoutBudget(clock, Duration.ofSeconds(10)),
testApp);
applicationRepository.prepare(sessionId, new PrepareParams.Builder().applicationId(applicationId()).build());
actResponse = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.ACTIVE, sessionId, subPath));
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 867dbdfe65a..e47b270a74b 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
@@ -30,6 +30,7 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.time.Clock;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertNotNull;
@@ -42,7 +43,6 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase {
private static final TenantName tenantName = TenantName.from("contenttest");
private static final File testApp = new File("src/test/apps/content");
- private TestComponentRegistry componentRegistry;
private TenantRepository tenantRepository;
private SessionContentHandler handler = null;
private long sessionId;
@@ -57,11 +57,12 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase {
.configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
- .build();
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
- tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
tenantRepository.addTenant(tenantName);
ApplicationRepository applicationRepository = new ApplicationRepository.Builder()
@@ -192,7 +193,7 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase {
.withTenantRepository(tenantRepository)
.withProvisioner(new MockProvisioner())
.withOrchestrator(new OrchestratorMock())
- .withClock(componentRegistry.getClock())
+ .withClock(Clock.systemUTC())
.build()
);
}
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 56afe1e4a08..c7690a70597 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
@@ -1,6 +1,7 @@
// 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.http.v2;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.application.api.ApplicationFile;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
@@ -18,13 +19,16 @@ import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.server.tenant.TestTenantRepository;
import org.junit.Before;
import org.junit.Ignore;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
+import java.time.Clock;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -61,14 +65,23 @@ public class SessionCreateHandlerTest extends SessionHandlerTest {
postHeaders.put(ApplicationApiHandler.contentTypeHeader, ApplicationApiHandler.APPLICATION_X_GZIP);
}
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
@Before
- public void setupRepo() {
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ public void setupRepo() throws IOException {
+ ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
+ .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
+ .build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withProvisioner(new MockProvisioner())
.withOrchestrator(new OrchestratorMock())
- .withClock(componentRegistry.getClock())
.build();
tenantRepository.addTenant(tenant);
pathPrefix = "/application/v2/tenant/" + tenant + "/session/";
@@ -165,7 +178,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest {
private SessionCreateHandler createHandler() {
return new SessionCreateHandler(SessionCreateHandler.testOnlyContext(),
applicationRepository,
- componentRegistry.getConfigserverConfig());
+ new ConfigserverConfig.Builder().build());
}
private HttpRequest post() throws FileNotFoundException {
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 b87f24cf06d..92ddf4c29f4 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
@@ -61,7 +61,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
private TimeoutBudget timeoutBudget;
private ApplicationRepository applicationRepository;
- private TestComponentRegistry componentRegistry;
+ private ConfigserverConfig configserverConfig;
private String preparedMessage = " prepared.\"}";
private String tenantMessage = "";
private TenantRepository tenantRepository;
@@ -71,18 +71,18 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
@Before
public void setupRepo() throws IOException {
- ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
+ configserverConfig = new ConfigserverConfig.Builder()
.configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
+ TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
.build();
- Clock clock = componentRegistry.getClock();
+ Clock clock = Clock.systemUTC();
timeoutBudget = new TimeoutBudget(clock, Duration.ofSeconds(10));
tenantRepository = new TestTenantRepository.Builder()
.withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
.build();
tenantRepository.addTenant(tenant);
@@ -255,7 +255,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
String exceptionMessage = "Out of capacity";
FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(),
applicationRepository,
- componentRegistry.getConfigserverConfig(),
+ configserverConfig,
new OutOfCapacityException(exceptionMessage));
HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId));
assertEquals(400, response.getStatus());
@@ -270,7 +270,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
String exceptionMessage = "nullpointer thrown in test handler";
FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(),
applicationRepository,
- componentRegistry.getConfigserverConfig(),
+ configserverConfig,
new NullPointerException(exceptionMessage));
HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId));
assertEquals(500, response.getStatus());
@@ -285,7 +285,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
long sessionId = applicationRepository.createSession(applicationId(), timeoutBudget, app);
FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(),
applicationRepository,
- componentRegistry.getConfigserverConfig(),
+ configserverConfig,
new ApplicationLockException(new UncheckedTimeoutException(exceptionMessage)));
HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId));
assertEquals(500, response.getStatus());
@@ -320,10 +320,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
}
private SessionHandler createHandler() {
- return new SessionPrepareHandler(
- SessionPrepareHandler.testOnlyContext(),
- applicationRepository,
- componentRegistry.getConfigserverConfig());
+ return new SessionPrepareHandler(SessionPrepareHandler.testOnlyContext(), applicationRepository, configserverConfig);
}
private HttpResponse request(HttpRequest.Method put, long l) {
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 d9f5f094023..37f0f2c5e2f 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
@@ -56,9 +56,11 @@ public class TenantHandlerTest {
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(configserverConfig)
.build();
- tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withProvisioner(new MockProvisioner())
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 3e9cbc042bd..af26f2287c1 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
@@ -41,14 +41,13 @@ class MaintainerTester {
.configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.build();
- GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .clock(clock)
- .configServerConfig(configserverConfig)
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock))))
- .build();
+ GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build();
tenantRepository = new TestTenantRepository.Builder()
+ .withClock(clock)
.withComponentRegistry(componentRegistry)
.withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, true))
+ .withConfigserverConfig(configserverConfig)
+ .withModelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock))))
.build();
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
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 ffc60d01732..03ef4825b4c 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
@@ -87,13 +87,12 @@ public class RpcTester implements AutoCloseable {
configserverConfig = new ConfigserverConfig(configBuilder);
rpcServer = createRpcServer(configserverConfig);
TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder()
- .configDefinitionRepo(new TestConfigDefinitionRepo())
- .configServerConfig(configserverConfig)
.reloadListener(rpcServer)
.build();
tenantRepository = new TestTenantRepository.Builder()
.withComponentRegistry(componentRegistry)
.withHostRegistry(hostRegistry)
+ .withConfigserverConfig(configserverConfig)
.build();
tenantRepository.addTenant(tenantName);
startRpcServer();
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 5a49090031c..4995dc0decc 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
@@ -14,6 +14,7 @@ import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.CertificateNotReadyException;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
import com.yahoo.config.provision.exception.LoadBalancerServiceException;
import com.yahoo.io.IOUtils;
import com.yahoo.path.Path;
@@ -22,8 +23,9 @@ import com.yahoo.security.KeyUtils;
import com.yahoo.security.SignatureAlgorithm;
import com.yahoo.security.X509CertificateBuilder;
import com.yahoo.security.X509CertificateUtils;
+import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.MockSecretStore;
-import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.TimeoutBudgetTest;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger;
@@ -33,7 +35,6 @@ import com.yahoo.vespa.config.server.http.InvalidApplicationException;
import com.yahoo.vespa.config.server.model.TestModelFactory;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
-import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.tenant.ContainerEndpointsCache;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateMetadataStore;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateRetriever;
@@ -80,6 +81,7 @@ public class SessionPreparerTest {
private static final File invalidTestApp = new File("src/test/apps/illegalApp");
private static final Version version123 = new Version(1, 2, 3);
private static final Version version321 = new Version(3, 2, 1);
+ private static final Zone zone = Zone.defaultZone();
private final KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.EC, 256);
private final X509Certificate certificate = X509CertificateBuilder.fromKeypair(keyPair, new X500Principal("CN=subject"),
Instant.now(), Instant.now().plus(1, ChronoUnit.DAYS), SignatureAlgorithm.SHA512_WITH_ECDSA, BigInteger.valueOf(12345)).build();
@@ -87,8 +89,8 @@ public class SessionPreparerTest {
private MockCurator curator;
private ConfigCurator configCurator;
private SessionPreparer preparer;
- private TestComponentRegistry componentRegistry;
private final MockSecretStore secretStore = new MockSecretStore();
+ private ConfigserverConfig configserverConfig;
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@@ -100,12 +102,10 @@ public class SessionPreparerTest {
public void setUp() throws IOException {
curator = new MockCurator();
configCurator = ConfigCurator.create(curator);
- componentRegistry = new TestComponentRegistry.Builder()
- .configServerConfig(new ConfigserverConfig.Builder()
- .fileReferencesDir(folder.newFolder().getAbsolutePath())
- .configServerDBDir(folder.newFolder().getAbsolutePath())
- .configDefinitionsDir(folder.newFolder().getAbsolutePath())
- .build())
+ configserverConfig = new ConfigserverConfig.Builder()
+ .fileReferencesDir(folder.newFolder().getAbsolutePath())
+ .configServerDBDir(folder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(folder.newFolder().getAbsolutePath())
.build();
preparer = createPreparer();
}
@@ -124,13 +124,13 @@ public class SessionPreparerTest {
HostProvisionerProvider hostProvisionerProvider) {
return new SessionPreparer(
modelFactoryRegistry,
- new MockFileDistributionFactory(componentRegistry.getConfigserverConfig()),
+ new MockFileDistributionFactory(configserverConfig),
hostProvisionerProvider,
- new PermanentApplicationPackage(componentRegistry.getConfigserverConfig()),
- componentRegistry.getConfigserverConfig(),
- componentRegistry.getStaticConfigDefinitionRepo(),
+ new PermanentApplicationPackage(configserverConfig),
+ configserverConfig,
+ new TestConfigDefinitionRepo(),
curator,
- componentRegistry.getZone(),
+ zone,
flagSource,
secretStore);
}
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 0ca04d51107..cafd9fba167 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
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.session;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.model.NullConfigModelRegistry;
import com.yahoo.config.model.api.Model;
import com.yahoo.config.model.api.ModelContext;
import com.yahoo.config.model.api.ModelCreateResult;
@@ -32,6 +33,7 @@ import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.model.VespaModel;
+import com.yahoo.vespa.model.VespaModelFactory;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -73,14 +75,10 @@ public class SessionRepositoryTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
public void setup() throws Exception {
- setup(new InMemoryFlagSource());
+ setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))));
}
- private void setup(FlagSource flagSource) throws Exception {
- setup(flagSource, new TestComponentRegistry.Builder());
- }
-
- private void setup(FlagSource flagSource, TestComponentRegistry.Builder componentRegistryBuilder) throws Exception {
+ private void setup(FlagSource flagSource, ModelFactoryRegistry modelFactoryRegistry) throws Exception {
curator = new MockCurator();
File configserverDbDir = temporaryFolder.newFolder().getAbsoluteFile();
ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
@@ -89,13 +87,13 @@ public class SessionRepositoryTest {
.fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath())
.sessionLifetime(5)
.build();
- GlobalComponentRegistry globalComponentRegistry = componentRegistryBuilder
- .configServerConfig(configserverConfig)
- .build();
+ GlobalComponentRegistry globalComponentRegistry = new TestComponentRegistry.Builder().build();
tenantRepository = new TestTenantRepository.Builder()
.withComponentRegistry(globalComponentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
.withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig))
+ .withModelFactoryRegistry(modelFactoryRegistry)
.build();
tenantRepository.addTenant(SessionRepositoryTest.tenantName);
applicationRepository = new ApplicationRepository.Builder()
@@ -197,9 +195,7 @@ public class SessionRepositoryTest {
okFactory.vespaVersion = new Version(1, 1, 0);
okFactory.throwOnLoad = false;
- TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
- setup(new InMemoryFlagSource(), registryBuilder);
+ setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
deploy();
}
@@ -215,9 +211,7 @@ public class SessionRepositoryTest {
okFactory.vespaVersion = new Version(2, 0, 0);
okFactory.throwOnLoad = false;
- TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
- setup(new InMemoryFlagSource(), registryBuilder);
+ setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
deploy();
}
@@ -232,9 +226,7 @@ public class SessionRepositoryTest {
okFactory.vespaVersion = new Version(2, 0, 0);
okFactory.throwErrorOnLoad = false;
- TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
- setup(new InMemoryFlagSource(), registryBuilder);
+ setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
File testApp = new File("src/test/apps/app-major-version-2");
deploy(applicationId, testApp);
@@ -252,9 +244,7 @@ public class SessionRepositoryTest {
okFactory.vespaVersion = new Version(1, 0, 0);
okFactory.throwErrorOnLoad = false;
- TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder()
- .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
- setup(new InMemoryFlagSource(), registryBuilder);
+ setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory)));
File testApp = new File("src/test/apps/app-major-version-2");
deploy(applicationId, testApp);
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 c843b5f6119..a520700f582 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
@@ -5,26 +5,27 @@ import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.concurrent.StripedExecutor;
+import com.yahoo.config.model.NullConfigModelRegistry;
import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
-import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.InstanceName;
-import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.config.server.ConfigServerDB;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.MockProvisioner;
import com.yahoo.vespa.config.server.MockSecretStore;
import com.yahoo.vespa.config.server.ServerCache;
import com.yahoo.vespa.config.server.TestComponentRegistry;
+import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
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.filedistribution.FileDistributionFactory;
import com.yahoo.vespa.config.server.host.HostRegistry;
+import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
@@ -32,6 +33,7 @@ import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.model.VespaModel;
+import com.yahoo.vespa.model.VespaModelFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -41,6 +43,7 @@ import org.junit.rules.TemporaryFolder;
import org.xml.sax.SAXException;
import java.io.IOException;
+import java.time.Clock;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -60,6 +63,7 @@ public class TenantRepositoryTest {
private TenantApplicationsTest.MockReloadListener listener;
private MockTenantListener tenantListener;
private Curator curator;
+ private ConfigserverConfig configserverConfig;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@@ -68,13 +72,18 @@ public class TenantRepositoryTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Before
- public void setupSessions() {
+ public void setupSessions() throws IOException {
curator = new MockCurator();
TestComponentRegistry globalComponentRegistry = new TestComponentRegistry.Builder().build();
listener = (TenantApplicationsTest.MockReloadListener) globalComponentRegistry.getReloadListener();
tenantListener = (MockTenantListener) globalComponentRegistry.getTenantListener();
assertFalse(tenantListener.tenantsLoaded);
+ configserverConfig = new ConfigserverConfig.Builder()
+ .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
+ .build();
tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(globalComponentRegistry)
+ .withConfigserverConfig(configserverConfig)
.withCurator(curator)
.build();
assertTrue(tenantListener.tenantsLoaded);
@@ -180,13 +189,13 @@ public class TenantRepositoryTest {
}
@Test
- public void testFailingBootstrap() throws IOException {
+ public void testFailingBootstrap() {
tenantRepository.close(); // stop using the one setup in Before method
// Should get exception if config is true
expectedException.expect(RuntimeException.class);
expectedException.expectMessage("Could not create all tenants when bootstrapping, failed to create: [default]");
- new FailingDuringBootstrapTenantRepository(createComponentRegistry());
+ new FailingDuringBootstrapTenantRepository(createComponentRegistry(), configserverConfig);
}
private List<String> readZKChildren(String path) throws Exception {
@@ -197,18 +206,13 @@ public class TenantRepositoryTest {
assertNotNull(curator.framework().checkExists().forPath(TenantRepository.getTenantPath(tenantName).getAbsolute()));
}
- private GlobalComponentRegistry createComponentRegistry() throws IOException {
- return new TestComponentRegistry.Builder()
- .configServerConfig(new ConfigserverConfig(new ConfigserverConfig.Builder()
- .configDefinitionsDir(temporaryFolder.newFolder("configdefs").getAbsolutePath())
- .configServerDBDir(temporaryFolder.newFolder("configserverdb").getAbsolutePath())))
- .zone(new Zone(SystemName.cd, Environment.prod, RegionName.from("foo")))
- .build();
+ private GlobalComponentRegistry createComponentRegistry() {
+ return new TestComponentRegistry.Builder().build();
}
private static class FailingDuringBootstrapTenantRepository extends TenantRepository {
- public FailingDuringBootstrapTenantRepository(GlobalComponentRegistry componentRegistry) {
+ public FailingDuringBootstrapTenantRepository(GlobalComponentRegistry componentRegistry, ConfigserverConfig configserverConfig) {
super(componentRegistry,
new HostRegistry(),
new MockCurator(),
@@ -218,7 +222,13 @@ public class TenantRepositoryTest {
new InMemoryFlagSource(),
new InThreadExecutorService(),
new MockSecretStore(),
- HostProvisionerProvider.withProvisioner(new MockProvisioner(), false));
+ HostProvisionerProvider.withProvisioner(new MockProvisioner(), false),
+ configserverConfig,
+ new ConfigServerDB(configserverConfig),
+ Zone.defaultZone(),
+ Clock.systemUTC(),
+ new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))),
+ new TestConfigDefinitionRepo());
}
@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 75d1b848f50..54e4492f08e 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
@@ -1,12 +1,16 @@
-// 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.testing.EqualsTester;
+import com.yahoo.cloud.config.ConfigserverConfig;
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.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.IOException;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.Matchers.is;
@@ -24,16 +28,26 @@ public class TenantTest {
private Tenant t3;
private Tenant t4;
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
@Before
- public void setupTenant() {
+ public void setupTenant() throws IOException {
t1 = createTenant("foo");
t2 = createTenant("foo");
t3 = createTenant("bar");
t4 = createTenant("baz");
}
- private Tenant createTenant(String name) {
- TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build();
+ private Tenant createTenant(String name) throws IOException {
+ ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder()
+ .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
+ .build();
+ TenantRepository tenantRepository = new TestTenantRepository.Builder()
+ .withComponentRegistry(componentRegistry)
+ .withConfigserverConfig(configserverConfig)
+ .build();
TenantName tenantName = TenantName.from(name);
tenantRepository.addTenant(tenantName);
return tenantRepository.getTenant(tenantName);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java
index b4922e1f163..1cb7789824b 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java
@@ -1,18 +1,29 @@
// 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.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.concurrent.StripedExecutor;
+import com.yahoo.config.model.NullConfigModelRegistry;
+import com.yahoo.config.model.api.ConfigDefinitionRepo;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.config.server.ConfigServerDB;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.MockSecretStore;
+import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory;
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.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.flags.InMemoryFlagSource;
+import com.yahoo.vespa.model.VespaModelFactory;
+
+import java.time.Clock;
+import java.util.List;
/**
*
@@ -26,7 +37,12 @@ public class TestTenantRepository extends TenantRepository {
Metrics metrics,
FileDistributionFactory fileDistributionFactory,
FlagSource flagSource,
- HostProvisionerProvider hostProvisionerProvider) {
+ HostProvisionerProvider hostProvisionerProvider,
+ ConfigserverConfig configserverConfig,
+ Zone zone,
+ Clock clock,
+ ModelFactoryRegistry modelFactoryRegistry,
+ ConfigDefinitionRepo configDefinitionRepo) {
super(componentRegistry,
hostRegistry,
curator,
@@ -36,11 +52,18 @@ public class TestTenantRepository extends TenantRepository {
flagSource,
new InThreadExecutorService(),
new MockSecretStore(),
- hostProvisionerProvider);
+ hostProvisionerProvider,
+ configserverConfig,
+ new ConfigServerDB(configserverConfig),
+ zone,
+ clock,
+ modelFactoryRegistry,
+ configDefinitionRepo);
}
public static class Builder {
-
+ Clock clock = Clock.systemUTC();
+ ConfigDefinitionRepo configDefinitionRepo = new TestConfigDefinitionRepo();
GlobalComponentRegistry componentRegistry;
HostRegistry hostRegistry = new HostRegistry();
Curator curator = new MockCurator();
@@ -48,6 +71,14 @@ public class TestTenantRepository extends TenantRepository {
FileDistributionFactory fileDistributionFactory = null;
FlagSource flagSource = new InMemoryFlagSource();
HostProvisionerProvider hostProvisionerProvider = HostProvisionerProvider.empty();
+ ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry())));
+ ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder().build();
+ Zone zone = Zone.defaultZone();
+
+ public Builder withClock(Clock clock) {
+ this.clock = clock;
+ return this;
+ }
public Builder withFlagSource(FlagSource flagSource) {
this.flagSource = flagSource;
@@ -74,6 +105,11 @@ public class TestTenantRepository extends TenantRepository {
return this;
}
+ public Builder withModelFactoryRegistry(ModelFactoryRegistry modelFactoryRegistry) {
+ this.modelFactoryRegistry = modelFactoryRegistry;
+ return this;
+ }
+
public Builder withFileDistributionFactory(FileDistributionFactory fileDistributionFactory) {
this.fileDistributionFactory = fileDistributionFactory;
return this;
@@ -84,16 +120,31 @@ public class TestTenantRepository extends TenantRepository {
return this;
}
+ public Builder withConfigserverConfig(ConfigserverConfig configserverConfig) {
+ this.configserverConfig = configserverConfig;
+ return this;
+ }
+
+ public Builder withZone(Zone zone) {
+ this.zone = zone;
+ return this;
+ }
+
public TenantRepository build() {
if (fileDistributionFactory == null)
- fileDistributionFactory = new FileDistributionFactory(componentRegistry.getConfigserverConfig());
+ fileDistributionFactory = new FileDistributionFactory(configserverConfig);
return new TestTenantRepository(componentRegistry,
hostRegistry,
curator,
metrics,
fileDistributionFactory,
flagSource,
- hostProvisionerProvider);
+ hostProvisionerProvider,
+ configserverConfig,
+ zone,
+ clock,
+ modelFactoryRegistry,
+ configDefinitionRepo);
}
}