summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorhakonhall <hakon@oath.com>2017-09-12 08:35:41 +0200
committerGitHub <noreply@github.com>2017-09-12 08:35:41 +0200
commit8b5994123459a7b4033944f965dd16d4b942ffdd (patch)
tree8723cb85f1dff35b26b60a095be28329320487b3 /configserver
parentf5703de1345948742565fa35c7025991b9c931fb (diff)
parent9a17e87dbaed98151af754c58730323e0ba480a9 (diff)
Merge pull request #3389 from vespa-engine/hakon/add-component-managing-the-supermodel
Add component managing the SuperModel
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationListener.java24
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelController.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelListener.java23
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java108
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelProvider.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java75
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModel.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java3
-rw-r--r--configserver/src/main/resources/configserver-app/services.xml1
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java15
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java2
15 files changed, 209 insertions, 98 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationListener.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationListener.java
new file mode 100644
index 00000000000..bea25183eef
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationListener.java
@@ -0,0 +1,24 @@
+// 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;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.vespa.config.server.application.ApplicationSet;
+
+public interface ApplicationListener {
+ /**
+ * Configs has been activated for an application: Either an application
+ * has been deployed for the first time, or it has been externally or internally redeployed.
+ *
+ * Must be thread-safe.
+ */
+ void configActivated(TenantName tenant, ApplicationSet application);
+
+ /**
+ * Application has been removed.
+ *
+ * Must be thread-safe.
+ */
+ void applicationRemoved(ApplicationId applicationId);
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
index 228ae0adfae..e392472480b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ReloadListener.java
@@ -15,16 +15,7 @@ import java.util.Collection;
* @author lulf
* @since 5.1
*/
-public interface ReloadListener {
-
- /**
- * Signal the listener that config has been reloaded.
- *
- * @param tenant Name of tenant for which config was reloaded.
- * @param application the {@link com.yahoo.vespa.config.server.application.Application} that will be reloaded
- */
- public void configReloaded(TenantName tenant, ApplicationSet application);
-
+public interface ReloadListener extends ApplicationListener {
/**
* Signal the listener that hosts used by by a particular tenant.
*
@@ -35,18 +26,10 @@ public interface ReloadListener {
/**
* Verify that given hosts are available for use by tenant.
- * TODO: Does not belong here...
*
* @param tenant tenant that wants to allocate hosts.
* @param newHosts a {@link java.util.Collection} of hosts that tenant wants to allocate.
* @throws java.lang.IllegalArgumentException if one or more of the hosts are in use by another tenant.
*/
void verifyHostsAreAvailable(TenantName tenant, Collection<String> newHosts);
-
- /**
- * Notifies listener that application with id {@link ApplicationId} has been removed.
- *
- * @param applicationId The {@link ApplicationId} of the removed application.
- */
- void applicationRemoved(ApplicationId applicationId);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelController.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelController.java
index 23c9bab450b..1532c05a56b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelController.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelController.java
@@ -68,7 +68,7 @@ public class SuperModelController {
}
}
- SuperModel getSuperModel() {
+ public SuperModel getSuperModel() {
return model;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelListener.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelListener.java
new file mode 100644
index 00000000000..81d706cf2e9
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelListener.java
@@ -0,0 +1,23 @@
+// 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;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.config.server.application.Application;
+import com.yahoo.vespa.config.server.model.SuperModel;
+
+/**
+ * Interface for those wanting to be notified about changes to the SuperModel.
+ */
+public interface SuperModelListener {
+ /**
+ * Application has been activated: Either deployed the first time,
+ * internally redeployed, or externally triggered redeploy.
+ */
+ void applicationActivated(SuperModel superModel, Application application);
+
+ /**
+ * Application has been removed.
+ */
+ void applicationRemoved(SuperModel superModel, ApplicationId applicationId);
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java
new file mode 100644
index 00000000000..c3fd417f434
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java
@@ -0,0 +1,108 @@
+// 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;
+
+import com.google.inject.Inject;
+import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.NodeFlavors;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.config.GenerationCounter;
+import com.yahoo.vespa.config.server.application.Application;
+import com.yahoo.vespa.config.server.application.ApplicationSet;
+import com.yahoo.vespa.config.server.model.SuperModel;
+
+import java.time.Instant;
+import java.util.*;
+
+/**
+ * Provides a SuperModel - a model of all application instances, and makes it stays
+ * up to date as applications are added, redeployed, and removed.
+ */
+public class SuperModelManager implements SuperModelProvider, ApplicationListener {
+ private final Zone zone;
+ private SuperModel superModel; // Guarded by 'this' monitor
+ private final List<SuperModelListener> listeners = new ArrayList<>(); // Guarded by 'this' monitor
+
+ // Generation of the super model
+ private long generation;
+ private final long masterGeneration; // ConfigserverConfig's generation
+ private final GenerationCounter generationCounter;
+
+ @Inject
+ public SuperModelManager(ConfigserverConfig configserverConfig,
+ NodeFlavors nodeFlavors,
+ GenerationCounter generationCounter) {
+ this.zone = new Zone(configserverConfig, nodeFlavors);
+ this.generationCounter = generationCounter;
+ this.masterGeneration = configserverConfig.masterGeneration();
+ makeNewSuperModel(new HashMap<>());
+ }
+
+ @Override
+ public synchronized SuperModel getSuperModel() {
+ return superModel;
+ }
+
+ @Override
+ public synchronized long getGeneration() {
+ return generation;
+ }
+
+ @Override
+ public synchronized void registerListener(SuperModelListener listener) {
+ listeners.add(listener);
+ }
+
+ @Override
+ public synchronized void configActivated(TenantName tenant, ApplicationSet applicationSet) {
+ Map<TenantName, Map<ApplicationId, Application>> newModels = createModelCopy();
+ if (!newModels.containsKey(tenant)) {
+ // New application has been activated
+ newModels.put(tenant, new LinkedHashMap<>());
+ } else {
+ // Application has been redeployed
+ }
+
+ // TODO: Should supermodel care about multiple versions?
+ Application application = applicationSet.getForVersionOrLatest(Optional.empty(), Instant.now());
+ newModels.get(tenant).put(applicationSet.getId(), application);
+
+ makeNewSuperModel(newModels);
+ listeners.stream().forEach(listener -> listener.applicationActivated(superModel, application));
+ }
+
+ @Override
+ public synchronized void applicationRemoved(ApplicationId applicationId) {
+ Map<TenantName, Map<ApplicationId, Application>> newModels = createModelCopy();
+ if (newModels.containsKey(applicationId.tenant())) {
+ newModels.get(applicationId.tenant()).remove(applicationId);
+ if (newModels.get(applicationId.tenant()).isEmpty()) {
+ newModels.remove(applicationId.tenant());
+ }
+ }
+
+ makeNewSuperModel(newModels);
+ listeners.stream().forEach(listener -> listener.applicationRemoved(superModel, applicationId));
+ }
+
+ private void makeNewSuperModel(Map<TenantName, Map<ApplicationId, Application>> newModels) {
+ generation = masterGeneration + generationCounter.get();
+ superModel = new SuperModel(newModels, zone);
+ }
+
+ private Map<TenantName, Map<ApplicationId, Application>> createModelCopy() {
+ Map<TenantName, Map<ApplicationId, Application>> currentModels = superModel.applicationModels();
+ Map<TenantName, Map<ApplicationId, Application>> newModels = new LinkedHashMap<>();
+ for (Map.Entry<TenantName, Map<ApplicationId, Application>> entry : currentModels.entrySet()) {
+ Map<ApplicationId, Application> appMap = new LinkedHashMap<>();
+ newModels.put(entry.getKey(), appMap);
+ for (Map.Entry<ApplicationId, Application> appEntry : entry.getValue().entrySet()) {
+ appMap.put(appEntry.getKey(), appEntry.getValue());
+ }
+ }
+
+ return newModels;
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelProvider.java
new file mode 100644
index 00000000000..81eb823c026
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelProvider.java
@@ -0,0 +1,12 @@
+// 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;
+
+import com.yahoo.vespa.config.server.model.SuperModel;
+
+interface SuperModelProvider {
+ SuperModel getSuperModel();
+ long getGeneration();
+
+ void registerListener(SuperModelListener listener);
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
index 345d952882d..95f16a7c1e7 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
@@ -7,30 +7,26 @@ import com.yahoo.config.ConfigInstance;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.Version;
-import com.yahoo.config.provision.Zone;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.GenerationCounter;
import com.yahoo.vespa.config.GetConfigRequest;
import com.yahoo.vespa.config.protocol.ConfigResponse;
import com.yahoo.vespa.config.server.application.Application;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.vespa.config.GenerationCounter;
import com.yahoo.vespa.config.server.application.ApplicationSet;
-import com.yahoo.vespa.config.server.model.SuperModel;
import com.yahoo.vespa.config.server.rpc.ConfigResponseFactory;
import com.yahoo.vespa.config.server.rpc.ConfigResponseFactoryFactory;
import java.io.IOException;
-import java.time.Instant;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
/**
- * Handles request for supermodel config
+ * Handles request for supermodel config.
*
* @author lulf
* @since 5.9
@@ -39,82 +35,47 @@ public class SuperModelRequestHandler implements RequestHandler {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(SuperModelRequestHandler.class.getName());
private volatile SuperModelController handler;
- private final GenerationCounter generationCounter;
- private final Zone zone;
- private final long masterGeneration;
private final ConfigDefinitionRepo configDefinitionRepo;
private final ConfigResponseFactory responseFactory;
+ private final SuperModelManager superModelManager;
private volatile boolean enabled = false;
/**
* Creates a supermodel controller
*/
@Inject
- public SuperModelRequestHandler(GenerationCounter generationCounter, ConfigDefinitionRepo configDefinitionRepo,
- ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors) {
- this.generationCounter = generationCounter;
+ public SuperModelRequestHandler(ConfigDefinitionRepo configDefinitionRepo,
+ ConfigserverConfig configserverConfig,
+ SuperModelManager superModelManager) {
this.configDefinitionRepo = configDefinitionRepo;
- this.masterGeneration = configserverConfig.masterGeneration();
this.responseFactory = ConfigResponseFactoryFactory.createFactory(configserverConfig);
- this.zone = new Zone(configserverConfig, nodeFlavors);
- this.handler = createNewHandler(Collections.emptyMap());
+ this.superModelManager = superModelManager;
+ updateHandler();
}
/**
* Signals that config has been reloaded for an {@link com.yahoo.vespa.config.server.application.Application}
* belonging to a tenant.
*
- * TODO: This is a bit too complex I think.
- *
* @param tenant Name of tenant owning the application.
* @param applicationSet The reloaded set of {@link com.yahoo.vespa.config.server.application.Application}.
*/
public synchronized void reloadConfig(TenantName tenant, ApplicationSet applicationSet) {
- Map<TenantName, Map<ApplicationId, Application>> newModels = createModelCopy();
- if (!newModels.containsKey(tenant)) {
- newModels.put(tenant, new LinkedHashMap<>());
- }
- // TODO: Should supermodel care about multiple versions?
- newModels.get(tenant).put(applicationSet.getId(), applicationSet.getForVersionOrLatest(Optional.empty(), Instant.now()));
- handler = createNewHandler(newModels);
+ superModelManager.configActivated(tenant, applicationSet);
+ updateHandler();
}
public synchronized void removeApplication(ApplicationId applicationId) {
- Map<TenantName, Map<ApplicationId, Application>> newModels = createModelCopy();
- if (newModels.containsKey(applicationId.tenant())) {
- newModels.get(applicationId.tenant()).remove(applicationId);
- if (newModels.get(applicationId.tenant()).isEmpty()) {
- newModels.remove(applicationId.tenant());
- }
- }
- handler = createNewHandler(newModels);
- }
-
- private SuperModelController createNewHandler(Map<TenantName, Map<ApplicationId, Application>> newModels) {
- long generation = generationCounter.get() + masterGeneration;
- SuperModel model = new SuperModel(newModels, zone);
- return new SuperModelController(model, configDefinitionRepo, generation, responseFactory);
- }
-
- private Map<TenantName, Map<ApplicationId, Application>> getCurrentModels() {
- if (handler != null) {
- return handler.getSuperModel().applicationModels();
- } else {
- return new LinkedHashMap<>();
- }
+ superModelManager.applicationRemoved(applicationId);
+ updateHandler();
}
- private Map<TenantName, Map<ApplicationId, Application>> createModelCopy() {
- Map<TenantName, Map<ApplicationId, Application>> currentModels = getCurrentModels();
- Map<TenantName, Map<ApplicationId, Application>> newModels = new LinkedHashMap<>();
- for (Map.Entry<TenantName, Map<ApplicationId, Application>> entry : currentModels.entrySet()) {
- Map<ApplicationId, Application> appMap = new LinkedHashMap<>();
- newModels.put(entry.getKey(), appMap);
- for (Map.Entry<ApplicationId, Application> appEntry : entry.getValue().entrySet()) {
- appMap.put(appEntry.getKey(), appEntry.getValue());
- }
- }
- return newModels;
+ private void updateHandler() {
+ handler = new SuperModelController(
+ superModelManager.getSuperModel(),
+ configDefinitionRepo,
+ superModelManager.getGeneration(),
+ responseFactory);
}
public SuperModelController getHandler() { return handler; }
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModel.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModel.java
index 1d7bcd8d001..eb41373aab8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModel.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModel.java
@@ -13,6 +13,7 @@ import com.yahoo.vespa.config.ConfigPayload;
import com.yahoo.vespa.config.server.application.Application;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.Map;
/**
@@ -26,7 +27,7 @@ public class SuperModel implements LbServicesConfig.Producer, RoutingConfig.Prod
private final Map<TenantName, Map<ApplicationId, Application>> models;
private final LbServicesProducer lbProd;
private final RoutingProducer zoneProd;
-
+
public SuperModel(Map<TenantName, Map<ApplicationId, Application>> models, Zone zone) {
this.models = models;
this.lbProd = new LbServicesProducer(Collections.unmodifiableMap(models), zone);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
index 1a2433ec77e..4fe78a30344 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
@@ -187,7 +187,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
* This method should be called when config is reloaded in the server.
*/
@Override
- public void configReloaded(TenantName tenant, ApplicationSet applicationSet) {
+ public void configActivated(TenantName tenant, ApplicationSet applicationSet) {
ApplicationId applicationId = applicationSet.getId();
configReloaded(delayedConfigResponses.drainQueue(applicationId), Tenants.logPre(applicationId));
reloadSuperModel(tenant, applicationSet);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java
index 20d1e88440f..93c26d532bb 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.config.server.tenant;
import java.time.Clock;
-import java.time.Instant;
import java.util.*;
import com.yahoo.config.provision.Version;
@@ -81,7 +80,7 @@ public class TenantRequestHandler implements RequestHandler, ReloadHandler, Host
private void notifyReloadListeners(ApplicationSet applicationSet) {
for (ReloadListener reloadListener : reloadListeners) {
reloadListener.hostsUpdated(tenant, hostRegistry.getAllHosts());
- reloadListener.configReloaded(tenant, applicationSet);
+ reloadListener.configActivated(tenant, applicationSet);
}
}
diff --git a/configserver/src/main/resources/configserver-app/services.xml b/configserver/src/main/resources/configserver-app/services.xml
index 730f9cb3136..9330dae2e41 100644
--- a/configserver/src/main/resources/configserver-app/services.xml
+++ b/configserver/src/main/resources/configserver-app/services.xml
@@ -15,6 +15,7 @@
<component id="com.yahoo.vespa.config.server.session.FileDistributionFactory" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.SuperModelGenerationCounter" bundle="configserver" />
+ <component id="com.yahoo.vespa.config.server.SuperModelManager" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.session.SessionPreparer" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.SuperModelRequestHandler" bundle="configserver" />
<component id="com.yahoo.vespa.config.server.StaticConfigDefinitionRepo" bundle="configserver" />
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
index dd19cfc29bb..4c746eba64e 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
@@ -34,6 +34,7 @@ import static org.junit.Assert.*;
public class SuperModelRequestHandlerTest {
private static final File testApp = new File("src/test/resources/deploy/app");
+ private SuperModelManager manager;
private SuperModelGenerationCounter counter;
private SuperModelRequestHandler controller;
@@ -43,10 +44,9 @@ public class SuperModelRequestHandlerTest {
@Before
public void setup() throws IOException {
counter = new SuperModelGenerationCounter(new MockCurator());
- controller = new SuperModelRequestHandler(counter,
- new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder()),
- emptyNodeFlavors());
+ ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder());
+ manager = new SuperModelManager(configserverConfig, emptyNodeFlavors(), counter);
+ controller = new SuperModelRequestHandler(new TestConfigDefinitionRepo(), configserverConfig, manager);
}
@Test
@@ -95,10 +95,9 @@ public class SuperModelRequestHandlerTest {
public void test_super_model_master_generation() throws IOException, SAXException {
TenantName tenantA = TenantName.from("a");
long masterGen = 10;
- controller = new SuperModelRequestHandler(counter,
- new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen)),
- emptyNodeFlavors());
+ ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen));
+ manager = new SuperModelManager(configserverConfig, emptyNodeFlavors(), counter);
+ controller = new SuperModelRequestHandler(new TestConfigDefinitionRepo(), configserverConfig, manager);
long gen = counter.increment();
controller.reloadConfig(tenantA, createApp(tenantA, "foo", 3L, 1));
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
index d66ddfade34..ef742ae3d38 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java
@@ -75,7 +75,7 @@ public class RpcServerTest extends TestWithRpc {
generationCounter.increment();
Application app = new Application(new VespaModel(MockApplicationPackage.createEmpty()), new ServerCache(), 2l, Version.fromIntValues(1, 2, 3), MetricUpdater.createTestUpdater(), ApplicationId.defaultId());
ApplicationSet appSet = ApplicationSet.fromSingle(app);
- rpcServer.configReloaded(TenantName.defaultName(), appSet);
+ rpcServer.configActivated(TenantName.defaultName(), appSet);
ConfigKey<?> key = new ConfigKey<>(LbServicesConfig.class, "*");
JRTClientConfigRequest clientReq = JRTClientConfigRequestV3.createFromRaw(new RawConfig(key, LbServicesConfig.CONFIG_DEF_MD5), 120_000, Trace.createDummy(), CompressionType.UNCOMPRESSED, Optional.empty());
assertTrue(clientReq.validateParameters());
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
index 52102e805b8..fa6adb64a8a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
@@ -11,12 +11,9 @@ import com.yahoo.jrt.Transport;
import com.yahoo.net.HostName;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.config.GenerationCounter;
-import com.yahoo.vespa.config.server.SuperModelRequestHandler;
+import com.yahoo.vespa.config.server.*;
import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker;
import com.yahoo.vespa.config.server.host.HostRegistries;
-import com.yahoo.vespa.config.server.MemoryGenerationCounter;
-import com.yahoo.vespa.config.server.PortRangeAllocator;
-import com.yahoo.vespa.config.server.TestConfigDefinitionRepo;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.tenant.MockTenantProvider;
import org.junit.After;
@@ -82,11 +79,14 @@ public class TestWithRpc {
}
protected void createAndStartRpcServer(boolean hostedVespa) {
+ ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder());
rpcServer = new RpcServer(new ConfigserverConfig(new ConfigserverConfig.Builder().rpcport(port).numthreads(1).maxgetconfigclients(1).hostedVespa(hostedVespa)),
- new SuperModelRequestHandler(generationCounter,
- new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder()),
- emptyNodeFlavors()),
+ new SuperModelRequestHandler(new TestConfigDefinitionRepo(),
+ configserverConfig,
+ new SuperModelManager(
+ configserverConfig,
+ emptyNodeFlavors(),
+ generationCounter)),
Metrics.createTestMetrics(), new HostRegistries(),
hostLivenessTracker);
rpcServer.onTenantCreate(TenantName.from("default"), tenantProvider);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
index 3b67597c43c..91cf6e79165 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
@@ -242,7 +242,7 @@ public class TenantRequestHandlerTest extends TestWithCurator {
public AtomicInteger removed = new AtomicInteger(0);
public Map<String, Collection<String>> tenantHosts = new LinkedHashMap<>();
@Override
- public void configReloaded(TenantName tenant, ApplicationSet application) {
+ public void configActivated(TenantName tenant, ApplicationSet application) {
reloaded.incrementAndGet();
}