summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-11-08 10:39:03 +0100
committerHarald Musum <musum@oath.com>2018-11-08 10:39:03 +0100
commit124f27638315c1d9b64869ba8a3a74fced266bb3 (patch)
treeae8ae9e1107bef98de893e5351b79335491606d6 /configserver
parent19285355ae0be2a2fc46ad6a55e4b96ae8a816a9 (diff)
Simplify supermodel, part 2
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java22
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java21
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java60
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java53
-rwxr-xr-xconfigserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java30
7 files changed, 100 insertions, 117 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java
index 85249d4e87d..20e8c664761 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java
@@ -11,24 +11,25 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Produces lb-services cfg
*
- * @author vegardh
- * @since 5.9
+ * @author Vegard Havdal
*/
public class LbServicesProducer implements LbServicesConfig.Producer {
- private final Map<TenantName, Map<ApplicationId, ApplicationInfo>> models;
+ private final Map<TenantName, Set<ApplicationInfo>> models;
private final Zone zone;
- public LbServicesProducer(Map<TenantName, Map<ApplicationId, ApplicationInfo>> models, Zone zone) {
+ public LbServicesProducer(Map<TenantName, Set<ApplicationInfo>> models, Zone zone) {
this.models = models;
this.zone = zone;
}
@@ -42,13 +43,11 @@ public class LbServicesProducer implements LbServicesConfig.Producer {
});
}
- private LbServicesConfig.Tenants.Builder getTenantConfig(Map<ApplicationId, ApplicationInfo> apps) {
+ private LbServicesConfig.Tenants.Builder getTenantConfig(Set<ApplicationInfo> apps) {
LbServicesConfig.Tenants.Builder tb = new LbServicesConfig.Tenants.Builder();
- apps.keySet().stream()
- .sorted()
- .forEach(applicationId -> {
- tb.applications(createLbAppIdKey(applicationId), getAppConfig(apps.get(applicationId)));
- });
+ apps.stream()
+ .sorted(Comparator.comparing(ApplicationInfo::getApplicationId))
+ .forEach(applicationInfo -> tb.applications(createLbAppIdKey(applicationInfo.getApplicationId()), getAppConfig(applicationInfo)));
return tb;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java
index 51e685c86c8..236cb4e9b97 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java
@@ -10,26 +10,26 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import java.util.Map;
+import java.util.Set;
/**
* Create global config based on info from the zone application
*
- * @author can
- * @since 5.60
+ * @author Christian Andersen
*/
public class RoutingProducer implements RoutingConfig.Producer {
static final ApplicationName ROUTING_APPLICATION = ApplicationName.from("routing");
- private final Map<TenantName, Map<ApplicationId, ApplicationInfo>> models;
+ private final Map<TenantName, Set<ApplicationInfo>> models;
- public RoutingProducer(Map<TenantName, Map<ApplicationId, ApplicationInfo>> models) {
+ public RoutingProducer(Map<TenantName, Set<ApplicationInfo>> models) {
this.models = models;
}
@Override
public void getConfig(RoutingConfig.Builder builder) {
- for (Map<ApplicationId, ApplicationInfo> model : models.values()) {
- model.values().stream()
+ for (Set<ApplicationInfo> model : models.values()) {
+ model.stream()
.filter(application -> isHostedVespaRoutingApplication(application.getApplicationId()))
.forEach(application -> {
for (HostInfo host : application.getModel().getHosts()) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java
index e087ef64ae3..4a75414c272 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java
@@ -8,7 +8,6 @@ import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.model.api.SuperModel;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
@@ -19,8 +18,7 @@ import java.util.Map;
/**
* A config model that provides config containing information from all known tenants and applications.
*
- * @author vegardh
- * @since 5.9
+ * @author Vegard Havdal
*/
public class SuperModelConfigProvider implements LbServicesConfig.Producer, RoutingConfig.Producer {
@@ -30,8 +28,8 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout
public SuperModelConfigProvider(SuperModel superModel, Zone zone) {
this.superModel = superModel;
- this.lbProd = new LbServicesProducer(Collections.unmodifiableMap(superModel.getAllModels()), zone);
- this.zoneProd = new RoutingProducer(Collections.unmodifiableMap(superModel.getAllModels()));
+ this.lbProd = new LbServicesProducer(Collections.unmodifiableMap(superModel.getModelsPerTenant()), zone);
+ this.zoneProd = new RoutingProducer(Collections.unmodifiableMap(superModel.getModelsPerTenant()));
}
public SuperModel getSuperModel() {
@@ -53,7 +51,7 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout
}
}
- public Map<TenantName, Map<ApplicationId, ApplicationInfo>> applicationModels() { return superModel.getAllModels(); }
+ public Map<ApplicationId, ApplicationInfo> applicationModels() { return superModel.getModels(); }
@Override
public void getConfig(LbServicesConfig.Builder builder) {
@@ -68,15 +66,11 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout
public <CONFIGTYPE extends ConfigInstance> CONFIGTYPE getConfig(Class<CONFIGTYPE> configClass,
ApplicationId applicationId,
String configId) {
- TenantName tenant = applicationId.tenant();
- if (!superModel.getAllModels().containsKey(tenant)) {
- throw new IllegalArgumentException("Tenant " + tenant + " not found");
+ Map<ApplicationId, ApplicationInfo> models = superModel.getModels();
+ if (!models.containsKey(applicationId)) {
+ throw new IllegalArgumentException("Application " + applicationId + " not found");
}
- Map<ApplicationId, ApplicationInfo> applications = superModel.getAllModels().get(tenant);
- if (!applications.containsKey(applicationId)) {
- throw new IllegalArgumentException("Application id " + applicationId + " not found");
- }
- ApplicationInfo application = applications.get(applicationId);
+ ApplicationInfo application = models.get(applicationId);
ConfigKey<CONFIGTYPE> key = new ConfigKey<>(configClass, configId);
ConfigPayload payload = application.getModel().getConfig(key, null);
return payload.toInstance(configClass, configId);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
index b7ca52390ed..7dead49f999 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java
@@ -12,7 +12,6 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.config.provision.Version;
import com.yahoo.config.provision.Zone;
import com.yahoo.jrt.Request;
import com.yahoo.vespa.config.ConfigKey;
@@ -83,25 +82,21 @@ public class SuperModelControllerTest {
@Test
public void test_lb_config_multiple_apps_legacy_super_model() throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> models = new LinkedHashMap<>();
+ Map<ApplicationId, ApplicationInfo> models = new LinkedHashMap<>();
TenantName t1 = TenantName.from("t1");
TenantName t2 = TenantName.from("t2");
- models.put(t1, new LinkedHashMap<>());
- models.put(t2, new LinkedHashMap<>());
File testApp1 = new File("src/test/resources/deploy/app");
File testApp2 = new File("src/test/resources/deploy/advancedapp");
File testApp3 = new File("src/test/resources/deploy/advancedapp");
- // TODO must fix equals, hashCode on Tenant
- Version vespaVersion = Version.fromIntValues(1, 2, 3);
ApplicationId simple = applicationId("mysimpleapp", t1);
ApplicationId advanced = applicationId("myadvancedapp", t1);
ApplicationId tooAdvanced = applicationId("minetooadvancedapp", t2);
- models.get(t1).put(simple, createApplicationInfo(testApp1, simple, 4l));
- models.get(t1).put(advanced, createApplicationInfo(testApp2, simple, 4l));
- models.get(t2).put(tooAdvanced, createApplicationInfo(testApp3, simple, 4l));
+ models.put(simple, createApplicationInfo(testApp1, simple, 4l));
+ models.put(advanced, createApplicationInfo(testApp2, advanced, 4l));
+ models.put(tooAdvanced, createApplicationInfo(testApp3, tooAdvanced, 4l));
- SuperModel superModel = new SuperModel(models);
+ SuperModel superModel = new SuperModel(models, false);
SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory());
LbServicesConfig.Builder lb = new LbServicesConfig.Builder();
han.getSuperModel().getConfig(lb);
@@ -121,15 +116,13 @@ public class SuperModelControllerTest {
File testApp1 = new File("src/test/resources/deploy/app");
File testApp2 = new File("src/test/resources/deploy/advancedapp");
File testApp3 = new File("src/test/resources/deploy/advancedapp");
- // TODO must fix equals, hashCode on Tenant
- Version vespaVersion = Version.fromIntValues(1, 2, 3);
ApplicationId simple = applicationId("mysimpleapp", t1);
ApplicationId advanced = applicationId("myadvancedapp", t1);
ApplicationId tooAdvanced = applicationId("minetooadvancedapp", t2);
models.put(simple, createApplicationInfo(testApp1, simple, 4l));
- models.put(advanced, createApplicationInfo(testApp2, simple, 4l));
- models.put(tooAdvanced, createApplicationInfo(testApp3, simple, 4l));
+ models.put(advanced, createApplicationInfo(testApp2, advanced, 4l));
+ models.put(tooAdvanced, createApplicationInfo(testApp3, tooAdvanced, 4l));
SuperModel superModel = new SuperModel(models, false);
SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory());
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 24412ce1af8..ebfb8dc622c 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
@@ -8,7 +8,6 @@ import com.yahoo.config.provision.Version;
import com.yahoo.config.provisioning.FlavorsConfig;
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.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -22,6 +21,8 @@ import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
@@ -29,7 +30,6 @@ import static org.junit.Assert.*;
/**
* @author Ulf Lilleengen
- * @since 5.9
*/
public class SuperModelRequestHandlerTest {
@@ -51,56 +51,57 @@ public class SuperModelRequestHandlerTest {
@Test
public void test_super_model_reload() throws IOException, SAXException {
- TenantName tenantA = TenantName.from("a");
+ ApplicationId foo = applicationId("a", "foo");
+ ApplicationId bar = applicationId("a", "foo");
+
assertNotNull(controller.getHandler());
long gen = counter.increment();
- controller.reloadConfig(createApp(tenantA, "foo", 3l, 1));
+ controller.reloadConfig(createApp(foo, 3l));
assertNotNull(controller.getHandler());
assertThat(controller.getHandler().getGeneration(), is(gen));
- controller.reloadConfig(createApp(tenantA, "foo", 4l, 2));
+ controller.reloadConfig(createApp(foo, 4l));
assertThat(controller.getHandler().getGeneration(), is(gen));
// Test that a new app is used when there already exist an application with the same id
- ApplicationId appId = new ApplicationId.Builder().tenant(tenantA).applicationName("foo").build();
- assertThat(controller.getHandler().getSuperModel().applicationModels().get(tenantA).get(appId).getGeneration(), is(4l));
+ assertThat(controller.getHandler().getSuperModel().applicationModels().get(foo).getGeneration(), is(4l));
gen = counter.increment();
- controller.reloadConfig(createApp(tenantA, "bar", 2l, 3));
+ controller.reloadConfig(createApp(bar, 2l));
assertThat(controller.getHandler().getGeneration(), is(gen));
}
@Test
public void test_super_model_remove() throws IOException, SAXException {
- TenantName tenantA = TenantName.from("a");
- TenantName tenantB = TenantName.from("b");
+ ApplicationId foo = applicationId("a", "foo");
+ ApplicationId bar = applicationId("a", "bar");
+ ApplicationId baz = applicationId("b", "baz");
+
long gen = counter.increment();
- controller.reloadConfig(createApp(tenantA, "foo", 3l, 1));
- controller.reloadConfig(createApp(tenantA, "bar", 30l, 2));
- controller.reloadConfig(createApp(tenantB, "baz", 9l, 3));
+ controller.reloadConfig(createApp(foo, 3l));
+ controller.reloadConfig(createApp(bar, 30l));
+ controller.reloadConfig(createApp(baz, 9l));
assertThat(controller.getHandler().getGeneration(), is(gen));
- assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2));
- assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(2));
- controller.removeApplication(
- new ApplicationId.Builder().tenant("a").applicationName("unknown").build());
+ assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(3));
+ assertEquals(Arrays.asList(foo, bar, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet()));
+ controller.removeApplication(new ApplicationId.Builder().tenant("a").applicationName("unknown").build());
assertThat(controller.getHandler().getGeneration(), is(gen));
- assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2));
- assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(2));
+ assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(3));
+ assertEquals(Arrays.asList(foo, bar, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet()));
gen = counter.increment();
- controller.removeApplication(
- new ApplicationId.Builder().tenant("a").applicationName("bar").build());
+ controller.removeApplication(bar);
assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2));
- assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(1));
+ assertEquals(Arrays.asList(foo, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet()));
assertThat(controller.getHandler().getGeneration(), is(gen));
}
@Test
public void test_super_model_master_generation() throws IOException, SAXException {
- TenantName tenantA = TenantName.from("a");
+ ApplicationId foo = applicationId("a", "foo");
long masterGen = 10;
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(createApp(tenantA, "foo", 3L, 1));
+ controller.reloadConfig(createApp(foo, 3L));
assertThat(controller.getHandler().getGeneration(), is(masterGen + gen));
}
@@ -111,19 +112,18 @@ public class SuperModelRequestHandlerTest {
assertTrue(controller.hasApplication(ApplicationId.global(), Optional.empty()));
}
- private ApplicationSet createApp(TenantName tenant, String application, long generation, long version) throws IOException, SAXException {
+ private ApplicationSet createApp(ApplicationId applicationId, long generation) throws IOException, SAXException {
return ApplicationSet.fromSingle(
new TestApplication(
new VespaModel(FilesApplicationPackage.fromFile(testApp)),
new ServerCache(),
generation,
- new ApplicationId.Builder().tenant(tenant).applicationName(application).build(),
- version));
+ applicationId));
}
private static class TestApplication extends Application {
- TestApplication(VespaModel vespaModel, ServerCache cache, long appGeneration, ApplicationId app, long version) {
+ TestApplication(VespaModel vespaModel, ServerCache cache, long appGeneration, ApplicationId app) {
super(vespaModel, cache, appGeneration, false, Version.fromIntValues(1, 2, 3), MetricUpdater.createTestUpdater(), app);
}
@@ -133,4 +133,8 @@ public class SuperModelRequestHandlerTest {
return new NodeFlavors(new FlavorsConfig(new FlavorsConfig.Builder()));
}
+ private ApplicationId applicationId(String tenantName, String applicationName) {
+ return ApplicationId.from(tenantName, applicationName, "default");
+ }
+
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
index 9b94029e8fa..35b6e4cf644 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
@@ -23,7 +23,9 @@ import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -36,7 +38,6 @@ import static org.junit.Assert.assertTrue;
/**
* @author Ulf Lilleengen
- * @since 5.26
*/
public class LbServicesProducerTest {
private static final String rotation1 = "rotation-1";
@@ -46,10 +47,10 @@ public class LbServicesProducerTest {
@Test
public void testDeterministicGetConfig() throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel = createTestModel(new DeployState.Builder().rotations(rotations));
+ Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder().rotations(rotations));
LbServicesConfig last = null;
for (int i = 0; i < 100; i++) {
- testModel = randomizeTenant(testModel, i);
+ testModel = randomizeApplications(testModel, i);
LbServicesConfig config = getLbServicesConfig(Zone.defaultZone(), testModel);
if (last != null) {
assertConfig(last, config);
@@ -60,7 +61,7 @@ public class LbServicesProducerTest {
@Test
public void testConfigAliases() throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel = createTestModel(new DeployState.Builder());
+ Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder());
LbServicesConfig conf = getLbServicesConfig(Zone.defaultZone(), testModel);
final LbServicesConfig.Tenants.Applications.Hosts.Services services = conf.tenants("foo").applications("foo:prod:default:default").hosts("foo.foo.yahoo.com").services("qrserver");
assertThat(services.servicealiases().size(), is(1));
@@ -88,14 +89,14 @@ public class LbServicesProducerTest {
private LbServicesConfig createModelAndGetLbServicesConfig(RegionName regionName) throws IOException, SAXException {
final Zone zone = new Zone(Environment.prod, regionName);
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel = createTestModel(new DeployState.Builder()
- .zone(zone)
- .properties(new DeployProperties.Builder().build())
- .zone(zone));
+ Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder()
+ .zone(zone)
+ .properties(new DeployProperties.Builder().build())
+ .zone(zone));
return getLbServicesConfig(new Zone(Environment.prod, regionName), testModel);
}
- private LbServicesConfig getLbServicesConfig(Zone zone, Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel) {
+ private LbServicesConfig getLbServicesConfig(Zone zone, Map<TenantName, Set<ApplicationInfo>> testModel) {
LbServicesProducer producer = new LbServicesProducer(testModel, zone);
LbServicesConfig.Builder builder = new LbServicesConfig.Builder();
producer.getConfig(builder);
@@ -104,7 +105,7 @@ public class LbServicesProducerTest {
@Test
public void testConfigAliasesWithRotations() throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel = createTestModel(new DeployState.Builder().rotations(rotations));
+ Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder().rotations(rotations));
RegionName regionName = RegionName.from("us-east-1");
LbServicesConfig conf = getLbServicesConfig(new Zone(Environment.prod, regionName), testModel);
final LbServicesConfig.Tenants.Applications.Hosts.Services services = conf.tenants("foo").applications("foo:prod:" + regionName.value() + ":default").hosts("foo.foo.yahoo.com").services("qrserver");
@@ -118,45 +119,35 @@ public class LbServicesProducerTest {
assertThat(services.endpointaliases(3), is(rotation2));
}
- private Map<TenantName, Map<ApplicationId, ApplicationInfo>> randomizeTenant(Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel, int seed) {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> randomizedTenants = new LinkedHashMap<>();
+ private Map<TenantName, Set<ApplicationInfo>> randomizeApplications(Map<TenantName, Set<ApplicationInfo>> testModel, int seed) {
+ Map<TenantName, Set<ApplicationInfo>> randomizedApplications = new LinkedHashMap<>();
List<TenantName> keys = new ArrayList<>(testModel.keySet());
Collections.shuffle(keys, new Random(seed));
for (TenantName key : keys) {
- randomizedTenants.put(key, randomizeApplications(testModel.get(key), randomizedTenants.size()));
- }
- return randomizedTenants;
- }
-
- private Map<ApplicationId, ApplicationInfo> randomizeApplications(Map<ApplicationId, ApplicationInfo> applicationIdApplicationMap, int seed) {
- Map<ApplicationId, ApplicationInfo> randomizedApplications = new LinkedHashMap<>();
- List<ApplicationId> keys = new ArrayList<>(applicationIdApplicationMap.keySet());
- Collections.shuffle(keys, new Random(seed));
- for (ApplicationId key : keys) {
- randomizedApplications.put(key, applicationIdApplicationMap.get(key));
+ randomizedApplications.put(key, testModel.get(key));
}
return randomizedApplications;
}
- private Map<TenantName, Map<ApplicationId, ApplicationInfo>> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> tMap = new LinkedHashMap<>();
+ private Map<TenantName, Set<ApplicationInfo>> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException {
+ Map<TenantName, Set<ApplicationInfo>> tMap = new LinkedHashMap<>();
TenantName foo = TenantName.from("foo");
TenantName bar = TenantName.from("bar");
TenantName baz = TenantName.from("baz");
tMap.put(foo, createTestApplications(foo, deployStateBuilder));
tMap.put(bar, createTestApplications(bar, deployStateBuilder));
- tMap.put(baz, createTestApplications(baz, deployStateBuilder));
+ tMap.put(bar, createTestApplications(baz, deployStateBuilder));
return tMap;
}
- private Map<ApplicationId, ApplicationInfo> createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
- Map<ApplicationId, ApplicationInfo> aMap = new LinkedHashMap<>();
+ private Set<ApplicationInfo> createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
+ Set<ApplicationInfo> aMap = new LinkedHashSet<>();
ApplicationId fooApp = new ApplicationId.Builder().tenant(tenant).applicationName("foo").build();
ApplicationId barApp = new ApplicationId.Builder().tenant(tenant).applicationName("bar").build();
ApplicationId bazApp = new ApplicationId.Builder().tenant(tenant).applicationName("baz").build();
- aMap.put(fooApp, createApplication(fooApp, deploystateBuilder));
- aMap.put(barApp, createApplication(barApp, deploystateBuilder));
- aMap.put(bazApp, createApplication(bazApp, deploystateBuilder));
+ aMap.add(createApplication(fooApp, deploystateBuilder));
+ aMap.add(createApplication(barApp, deploystateBuilder));
+ aMap.add(createApplication(bazApp, deploystateBuilder));
return aMap;
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
index 8a6d772ff14..4d968a58bb6 100755
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
@@ -17,18 +17,20 @@ import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Set;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/**
- * @author can
+ * @author Christian Andersen
*/
public class RoutingProducerTest {
@Test
public void testNodesFromRoutingAppOnly() throws Exception {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> testModel = createTestModel(new DeployState.Builder());
+ Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder());
RoutingProducer producer = new RoutingProducer(testModel);
RoutingConfig.Builder builder = new RoutingConfig.Builder();
producer.getConfig(builder);
@@ -38,26 +40,26 @@ public class RoutingProducerTest {
assertThat(config.hosts(1), is("hosted-vespa.routing2.yahoo.com"));
}
- private Map<TenantName, Map<ApplicationId, ApplicationInfo>> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException {
- Map<TenantName, Map<ApplicationId, ApplicationInfo>> tMap = new LinkedHashMap<>();
+ private Map<TenantName, Set<ApplicationInfo>> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException {
+ Map<TenantName, Set<ApplicationInfo>> apps = new LinkedHashMap<>();
TenantName foo = TenantName.from("foo");
TenantName bar = TenantName.from("bar");
TenantName routing = TenantName.from(TenantRepository.HOSTED_VESPA_TENANT.value());
- tMap.put(foo, createTestApplications(foo, deployStateBuilder));
- tMap.put(bar, createTestApplications(bar, deployStateBuilder));
- tMap.put(routing, createTestApplications(routing, deployStateBuilder));
- return tMap;
+ apps.put(foo, createTestApplications(foo, deployStateBuilder));
+ apps.put(bar, createTestApplications(bar, deployStateBuilder));
+ apps.put(routing, createTestApplications(routing, deployStateBuilder));
+ return apps;
}
- private Map<ApplicationId, ApplicationInfo> createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
- Map<ApplicationId, ApplicationInfo> aMap = new LinkedHashMap<>();
+ private Set<ApplicationInfo> createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
+ Set<ApplicationInfo> applicationInfos = new LinkedHashSet<>();
ApplicationId fooApp = new ApplicationId.Builder().tenant(tenant).applicationName("foo").build();
ApplicationId barApp = new ApplicationId.Builder().tenant(tenant).applicationName("bar").build();
ApplicationId routingApp = new ApplicationId.Builder().tenant(tenant).applicationName(RoutingProducer.ROUTING_APPLICATION.value()).build();
- aMap.put(fooApp, createApplication(fooApp, deploystateBuilder));
- aMap.put(barApp, createApplication(barApp, deploystateBuilder));
- aMap.put(routingApp, createApplication(routingApp, deploystateBuilder));
- return aMap;
+ applicationInfos.add(createApplication(fooApp, deploystateBuilder));
+ applicationInfos.add(createApplication(barApp, deploystateBuilder));
+ applicationInfos.add(createApplication(routingApp, deploystateBuilder));
+ return applicationInfos;
}
private ApplicationInfo createApplication(ApplicationId appId, DeployState.Builder deploystateBuilder) throws IOException, SAXException {