summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-01-27 09:05:04 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-01-27 09:05:04 +0100
commit9c25a72c7f18808d8a1e0efdc96916ad9c598fe0 (patch)
tree7f64b3acaf5ae13d7853904524195f1f282b3b70 /config-model
parent9c33b487fb942394ad945e854a877a9de0b7aff4 (diff)
Revert "Revert "Jonmv/document protocol super config""
This reverts commit d7359f7c72ff06889af594431baf4075e2b4da78.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java20
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java4
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java37
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java47
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java9
-rw-r--r--config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg1
-rw-r--r--config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg1
-rw-r--r--config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg8
-rw-r--r--config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg8
-rw-r--r--config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg1
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java38
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java73
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java14
15 files changed, 243 insertions, 25 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
index 1cc5c93c28a..8ef89626792 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
@@ -9,6 +9,8 @@ import com.yahoo.cloud.config.ZookeepersConfig;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.component.Version;
+import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
+import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.cloud.config.ModelConfig.Hosts;
import com.yahoo.cloud.config.ModelConfig.Hosts.Services;
@@ -20,6 +22,7 @@ import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig;
import com.yahoo.messagebus.MessagebusConfig;
import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig;
+import com.yahoo.vespa.config.content.StorDistributionConfig;
import com.yahoo.vespa.configmodel.producers.DocumentManager;
import com.yahoo.vespa.configmodel.producers.DocumentTypes;
import com.yahoo.vespa.documentmodel.DocumentModel;
@@ -41,6 +44,9 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toList;
/**
@@ -165,6 +171,13 @@ public class ApplicationConfigProducerRoot extends AbstractConfigProducer<Abstra
}
@Override
+ public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) {
+ if (routing != null) {
+ routing.getConfig(builder);
+ }
+ }
+
+ @Override
public void getConfig(MessagebusConfig.Builder builder) {
if (routing != null) {
routing.getConfig(builder);
@@ -213,6 +226,13 @@ public class ApplicationConfigProducerRoot extends AbstractConfigProducer<Abstra
}
@Override
+ public void getConfig(DistributionConfig.Builder builder) {
+ for (ContentCluster cluster : ((VespaModel) getRoot()).getContentClusters().values()) {
+ cluster.getConfig(builder);
+ }
+ }
+
+ @Override
public void getConfig(AllClustersBucketSpacesConfig.Builder builder) {
VespaModel model = (VespaModel) getRoot();
for (ContentCluster cluster : model.getContentClusters().values()) {
diff --git a/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java b/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java
index 9dcd94bf455..ff82b612e79 100644
--- a/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java
+++ b/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java
@@ -2,6 +2,8 @@
package com.yahoo.config.model;
import com.yahoo.cloud.config.ApplicationIdConfig;
+import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
+import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.cloud.config.log.LogdConfig;
import com.yahoo.cloud.config.SlobroksConfig;
@@ -25,11 +27,13 @@ public interface CommonConfigsProducer extends DocumentmanagerConfig.Producer,
DocumenttypesConfig.Producer,
MessagebusConfig.Producer,
DocumentrouteselectorpolicyConfig.Producer,
+ DocumentProtocolPoliciesConfig.Producer,
LogdConfig.Producer,
SlobroksConfig.Producer,
ZookeepersConfig.Producer,
LoadTypeConfig.Producer,
ClusterListConfig.Producer,
+ DistributionConfig.Producer,
AllClustersBucketSpacesConfig.Producer,
ModelConfig.Producer,
ApplicationIdConfig.Producer {
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
index d6cccc9f2be..0cfe35a51b5 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
@@ -10,7 +10,6 @@ import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.ProvisionLogger;
import com.yahoo.net.HostName;
-import com.yahoo.vespa.config.content.StorDistributionConfig;
import java.util.ArrayList;
import java.util.List;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
index 7ec2dc67cf2..a627e030156 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
@@ -15,6 +15,7 @@ import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.documentmodel.NewDocumentType;
import com.yahoo.metrics.MetricsmanagerConfig;
import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig;
+import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.FleetcontrollerConfig;
import com.yahoo.vespa.config.content.MessagetyperouteselectorpolicyConfig;
import com.yahoo.vespa.config.content.StorDistributionConfig;
@@ -67,6 +68,8 @@ import java.util.TreeMap;
import java.util.logging.Level;
import java.util.stream.Collectors;
+import static java.util.stream.Collectors.toList;
+
/**
* A content cluster.
*
@@ -74,6 +77,7 @@ import java.util.stream.Collectors;
* @author bratseth
*/
public class ContentCluster extends AbstractConfigProducer implements
+ DistributionConfig.Producer,
StorDistributionConfig.Producer,
StorDistributormanagerConfig.Producer,
FleetcontrollerConfig.Producer,
@@ -748,6 +752,39 @@ public class ContentCluster extends AbstractConfigProducer implements
}
}
+ @Override
+ public void getConfig(DistributionConfig.Builder builder) {
+ DistributionConfig.Cluster.Builder clusterBuilder = new DistributionConfig.Cluster.Builder();
+ StorDistributionConfig.Builder storDistributionBuilder = new StorDistributionConfig.Builder();
+ getConfig(storDistributionBuilder);
+ StorDistributionConfig config = storDistributionBuilder.build();
+
+ clusterBuilder.active_per_leaf_group(config.active_per_leaf_group());
+ clusterBuilder.ready_copies(config.ready_copies());
+ clusterBuilder.redundancy(config.redundancy());
+ clusterBuilder.initial_redundancy(config.initial_redundancy());
+
+ for (StorDistributionConfig.Group group : config.group()) {
+ DistributionConfig.Cluster.Group.Builder groupBuilder = new DistributionConfig.Cluster.Group.Builder();
+ groupBuilder.index(group.index())
+ .name(group.name())
+ .capacity(group.capacity())
+ .partitions(group.partitions());
+
+ for (var node : group.nodes()) {
+ DistributionConfig.Cluster.Group.Nodes.Builder nodesBuilder = new DistributionConfig.Cluster.Group.Nodes.Builder();
+ nodesBuilder.index(node.index())
+ .retired(node.retired());
+
+ groupBuilder.nodes(nodesBuilder);
+ }
+
+ clusterBuilder.group(groupBuilder);
+ }
+
+ builder.cluster(getConfigId(), clusterBuilder);
+ }
+
/**
* Mark whether the config emitted by this cluster currently should be applied by clients already running with
* a previous generation of it only by restarting the consuming processes.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java b/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java
index e6f4969f593..3ff444b2f24 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java
@@ -2,8 +2,9 @@
package com.yahoo.vespa.model.routing;
import com.yahoo.config.model.ConfigModelRepo;
-import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig;
import com.yahoo.document.select.DocumentSelector;
+import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig;
+import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.routing.ApplicationSpec;
import com.yahoo.messagebus.routing.HopSpec;
import com.yahoo.messagebus.routing.RouteSpec;
@@ -12,9 +13,9 @@ import com.yahoo.vespa.model.container.Container;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.ContainerModel;
import com.yahoo.vespa.model.container.docproc.ContainerDocproc;
-import com.yahoo.vespa.model.content.cluster.ContentCluster;
-import com.yahoo.vespa.model.content.Content;
import com.yahoo.vespa.model.container.docproc.DocprocChain;
+import com.yahoo.vespa.model.content.Content;
+import com.yahoo.vespa.model.content.cluster.ContentCluster;
import java.util.ArrayList;
import java.util.Collection;
@@ -31,7 +32,9 @@ import java.util.TreeMap;
*
* @author Simon Thoresen Hult
*/
-public final class DocumentProtocol implements Protocol, DocumentrouteselectorpolicyConfig.Producer {
+public final class DocumentProtocol implements Protocol,
+ DocumentrouteselectorpolicyConfig.Producer,
+ DocumentProtocolPoliciesConfig.Producer {
private static final String NAME = "document";
private final ApplicationSpec application;
@@ -101,6 +104,42 @@ public final class DocumentProtocol implements Protocol, Documentrouteselectorpo
}
}
+ @Override
+ public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) {
+ for (ContentCluster cluster : Content.getContentClusters(repo)) {
+ DocumentProtocolPoliciesConfig.Cluster.Builder clusterBuilder = new DocumentProtocolPoliciesConfig.Cluster.Builder();
+ addSelector(cluster.getConfigId(), cluster.getRoutingSelector(), clusterBuilder);
+ if (cluster.getSearch().hasIndexedCluster())
+ addRoutes(getDirectRouteName(cluster.getConfigId()), getIndexedRouteName(cluster.getConfigId()), clusterBuilder);
+
+ builder.cluster(cluster.getConfigId(), clusterBuilder);
+ }
+ }
+
+ private static void addRoutes(String directRoute, String indexedRoute, DocumentProtocolPoliciesConfig.Cluster.Builder builder) {
+ builder.defaultRoute(directRoute)
+ .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder()
+ .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_PUTDOCUMENT)
+ .name(indexedRoute))
+ .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder()
+ .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_REMOVEDOCUMENT)
+ .name(indexedRoute))
+ .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder()
+ .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_UPDATEDOCUMENT)
+ .name(indexedRoute));
+ }
+
+ private static void addSelector(String clusterConfigId, String selector, DocumentProtocolPoliciesConfig.Cluster.Builder builder) {
+ try {
+ new DocumentSelector(selector);
+ } catch (com.yahoo.document.select.parser.ParseException e) {
+ throw new IllegalArgumentException("Failed to parse selector '" + selector +
+ "' for route '" + clusterConfigId +
+ "' in policy 'DocumentRouteSelector'.");
+ }
+ builder.selector(selector);
+ }
+
private static void addRoute(String clusterConfigId, String selector, DocumentrouteselectorpolicyConfig.Builder builder) {
try {
new DocumentSelector(selector);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java b/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java
index 36beb766f5b..513bc9a8c6a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.routing;
import com.yahoo.config.model.ConfigModel;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.ConfigModelRepo;
+import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.routing.*;
import com.yahoo.messagebus.MessagebusConfig;
import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig;
@@ -82,6 +83,14 @@ public class Routing extends ConfigModel {
}
}
+ public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) {
+ for (Protocol protocol : protocols) {
+ if (protocol instanceof DocumentProtocol) {
+ ((DocumentProtocol) protocol).getConfig(builder);
+ }
+ }
+ }
+
public void getConfig(DocumentrouteselectorpolicyConfig.Builder builder) {
for (Protocol protocol : protocols) {
if (protocol instanceof DocumentProtocol) {
diff --git a/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg
@@ -0,0 +1 @@
+
diff --git a/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg
@@ -0,0 +1 @@
+
diff --git a/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg
new file mode 100644
index 00000000000..68659362350
--- /dev/null
+++ b/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg
@@ -0,0 +1,8 @@
+cluster{music}.defaultRoute "music-direct"
+cluster{music}.route[0].name "music-index"
+cluster{music}.route[0].messageType 100004
+cluster{music}.route[1].name "music-index"
+cluster{music}.route[1].messageType 100005
+cluster{music}.route[2].name "music-index"
+cluster{music}.route[2].messageType 100006
+cluster{music}.selector "(music)"
diff --git a/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg
new file mode 100644
index 00000000000..68659362350
--- /dev/null
+++ b/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg
@@ -0,0 +1,8 @@
+cluster{music}.defaultRoute "music-direct"
+cluster{music}.route[0].name "music-index"
+cluster{music}.route[0].messageType 100004
+cluster{music}.route[1].name "music-index"
+cluster{music}.route[1].messageType 100005
+cluster{music}.route[2].name "music-index"
+cluster{music}.route[2].messageType 100006
+cluster{music}.selector "(music)"
diff --git a/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg
@@ -0,0 +1 @@
+
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java
index 9f17a1c4142..095434c8e04 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java
@@ -14,6 +14,7 @@ import com.yahoo.container.ComponentsConfig;
import com.yahoo.messagebus.routing.RoutingTableSpec;
import com.yahoo.metrics.MetricsmanagerConfig;
import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig;
+import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.FleetcontrollerConfig;
import com.yahoo.vespa.config.content.StorDistributionConfig;
import com.yahoo.vespa.config.content.StorFilestorConfig;
@@ -99,12 +100,22 @@ public class ContentClusterTest extends ContentBaseTest {
" </group>" +
"</content>"
);
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cc.getConfig(distributionBuilder);
+ DistributionConfig distributionConfig = distributionBuilder.build();
+ assertEquals(3, distributionConfig.cluster("storage").ready_copies());
+ assertEquals(15, distributionConfig.cluster("storage").initial_redundancy());
+ assertEquals(15, distributionConfig.cluster("storage").redundancy());
+ assertEquals(4, distributionConfig.cluster("storage").group().size());
+ assertEquals(1, distributionConfig.cluster().size());
+
StorDistributionConfig.Builder storBuilder = new StorDistributionConfig.Builder();
cc.getConfig(storBuilder);
StorDistributionConfig storConfig = new StorDistributionConfig(storBuilder);
assertEquals(15, storConfig.initial_redundancy());
assertEquals(15, storConfig.redundancy());
assertEquals(3, storConfig.ready_copies());
+
ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder();
cc.getSearch().getConfig(protonBuilder);
ProtonConfig protonConfig = new ProtonConfig(protonBuilder);
@@ -132,12 +143,20 @@ public class ContentClusterTest extends ContentBaseTest {
" </group>" +
"</content>"
);
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cc.getConfig(distributionBuilder);
+ DistributionConfig distributionConfig = distributionBuilder.build();
+ assertEquals(3, distributionConfig.cluster("storage").ready_copies());
+ assertEquals(4, distributionConfig.cluster("storage").initial_redundancy());
+ assertEquals(5, distributionConfig.cluster("storage").redundancy());
+
StorDistributionConfig.Builder storBuilder = new StorDistributionConfig.Builder();
cc.getConfig(storBuilder);
StorDistributionConfig storConfig = new StorDistributionConfig(storBuilder);
assertEquals(4, storConfig.initial_redundancy());
assertEquals(5, storConfig.redundancy());
assertEquals(3, storConfig.ready_copies());
+
ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder();
cc.getSearch().getConfig(protonBuilder);
ProtonConfig protonConfig = new ProtonConfig(protonBuilder);
@@ -163,8 +182,7 @@ public class ContentClusterTest extends ContentBaseTest {
@Test
public void testRedundancyDefaults() {
- StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
- parse(
+ ContentCluster cc = parse(
"<content version=\"1.0\" id=\"storage\">\n" +
" <documents/>" +
" <group>" +
@@ -173,8 +191,15 @@ public class ContentClusterTest extends ContentBaseTest {
" <node hostalias=\"mockhost\" distribution-key=\"2\"/>\"" +
" </group>" +
"</content>"
- ).getConfig(builder);
+ );
+
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cc.getConfig(distributionBuilder);
+ DistributionConfig distributionConfig = distributionBuilder.build();
+ assertEquals(3, distributionConfig.cluster("storage").redundancy());
+ StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
+ cc.getConfig(builder);
StorDistributionConfig config = new StorDistributionConfig(builder);
assertEquals(2, config.initial_redundancy());
assertEquals(3, config.redundancy());
@@ -548,6 +573,13 @@ public class ContentClusterTest extends ContentBaseTest {
"</content>"
);
+ DistributionConfig.Builder bob = new DistributionConfig.Builder();
+ cluster.getConfig(bob);
+ DistributionConfig.Cluster.Group group = bob.build().cluster("test").group(0);
+ assertEquals("invalid", group.name());
+ assertEquals("invalid", group.index());
+ assertEquals(2, group.nodes().size());
+
StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
cluster.getConfig(builder);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java
index d290d4ec953..80ab6745b79 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java
@@ -2,10 +2,6 @@
package com.yahoo.vespa.model.content;
import com.yahoo.vespa.config.content.StorDistributionConfig;
-import com.yahoo.config.model.test.MockRoot;
-import com.yahoo.vespa.model.Host;
-import com.yahoo.vespa.model.HostResource;
-import com.yahoo.vespa.model.SimpleConfigProducer;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.search.DispatchGroup;
import com.yahoo.vespa.model.search.SearchInterface;
@@ -17,9 +13,9 @@ import java.util.List;
import java.util.Optional;
import static com.yahoo.config.model.test.TestUtil.joinLines;
-import static org.hamcrest.Matchers.containsString;
import static com.yahoo.vespa.model.content.utils.ContentClusterUtils.createCluster;
import static com.yahoo.vespa.model.content.utils.ContentClusterUtils.createClusterXml;
+import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java
index cb457cabf6c..b9495d45e08 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java
@@ -2,13 +2,14 @@
package com.yahoo.vespa.model.content;
import com.yahoo.config.model.test.MockRoot;
+import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.StorDistributionConfig;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.content.utils.ContentClusterUtils;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
* Test for storage groups.
@@ -21,7 +22,6 @@ public class StorageGroupTest {
@Test
public void testSingleGroup() throws Exception {
- StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
ContentCluster cluster = parse(
"<content id=\"storage\">\n" +
" <documents/>" +
@@ -32,8 +32,6 @@ public class StorageGroupTest {
"</content>"
);
- cluster.getConfig(builder);
-
assertEquals("content", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("clustertype"));
assertEquals("storage", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("clustername"));
assertEquals("0", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("index"));
@@ -42,6 +40,8 @@ public class StorageGroupTest {
assertEquals("storage", cluster.getDistributorNodes().getChildren().get("0").getServicePropertyString("clustername"));
assertEquals("0", cluster.getDistributorNodes().getChildren().get("0").getServicePropertyString("index"));
+ StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
+ cluster.getConfig(builder);
StorDistributionConfig config = new StorDistributionConfig(builder);
assertEquals(1, config.group().size());
@@ -51,6 +51,17 @@ public class StorageGroupTest {
assertEquals(0, config.group(0).nodes(0).index());
assertEquals(1, config.group(0).nodes(1).index());
//assertNotNull(cluster.getRootGroup().getNodes().get(0).getHost());
+
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cluster.getConfig(distributionBuilder);
+ DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage");
+
+ assertEquals(1, clusterConfig.group().size());
+ assertEquals("invalid", clusterConfig.group(0).index());
+ assertEquals("invalid", clusterConfig.group(0).name());
+ assertEquals(2, clusterConfig.group(0).nodes().size());
+ assertEquals(0, clusterConfig.group(0).nodes(0).index());
+ assertEquals(1, clusterConfig.group(0).nodes(1).index());
}
@Test
@@ -70,15 +81,14 @@ public class StorageGroupTest {
" </group>\n" +
"</cluster>"
);
- assertTrue(false);
+ fail();
} catch (Exception e) {
}
}
@Test
public void testNestedGroups() throws Exception {
- StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
- parse(
+ ContentCluster cluster = parse(
"<content version=\"1.0\" id=\"storage\">\n" +
" <redundancy>4</redundancy>" +
" <documents/>" +
@@ -101,8 +111,10 @@ public class StorageGroupTest {
" </group>\n" +
" </group>\n" +
"</content>"
- ).getConfig(builder);
+ );
+ StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
+ cluster.getConfig(builder);
StorDistributionConfig config = new StorDistributionConfig(builder);
assertEquals(5, config.group().size());
@@ -128,12 +140,39 @@ public class StorageGroupTest {
assertEquals(5, config.group(4).nodes(1).index());
assertEquals("1|*", config.group(0).partitions());
+
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cluster.getConfig(distributionBuilder);
+ DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage");
+
+ assertEquals(5, clusterConfig.group().size());
+ assertEquals("invalid", clusterConfig.group(0).index());
+ assertEquals("0", clusterConfig.group(1).index());
+ assertEquals("1", clusterConfig.group(2).index());
+ assertEquals("1.0", clusterConfig.group(3).index());
+ assertEquals("1.1", clusterConfig.group(4).index());
+ assertEquals("invalid", clusterConfig.group(0).name());
+ assertEquals("sub1", clusterConfig.group(1).name());
+ assertEquals("sub2", clusterConfig.group(2).name());
+ assertEquals("sub3", clusterConfig.group(3).name());
+ assertEquals("sub4", clusterConfig.group(4).name());
+ assertEquals(2, clusterConfig.group(1).nodes().size());
+ assertEquals(0, clusterConfig.group(1).nodes(0).index());
+ assertEquals(1, clusterConfig.group(1).nodes(1).index());
+ assertEquals(0, clusterConfig.group(2).nodes().size());
+ assertEquals(2, clusterConfig.group(3).nodes().size());
+ assertEquals(2, clusterConfig.group(3).nodes(0).index());
+ assertEquals(3, clusterConfig.group(3).nodes(1).index());
+ assertEquals(2, clusterConfig.group(4).nodes().size());
+ assertEquals(4, clusterConfig.group(4).nodes(0).index());
+ assertEquals(5, clusterConfig.group(4).nodes(1).index());
+
+ assertEquals("1|*", clusterConfig.group(0).partitions());
}
@Test
public void testGroupCapacity() throws Exception {
- StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
- parse(
+ ContentCluster cluster = parse(
"<content version=\"1.0\" id=\"storage\">\n" +
" <redundancy>2</redundancy>" +
" <documents/>" +
@@ -149,13 +188,25 @@ public class StorageGroupTest {
" </group>\n" +
" </group>\n" +
"</content>"
- ).getConfig(builder);
+ );
+ StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder();
+ cluster.getConfig(builder);
StorDistributionConfig config = new StorDistributionConfig(builder);
assertEquals(3, config.group().size());
assertEquals(5.5, config.group(0).capacity(), 0.001);
assertEquals(2, config.group(1).capacity(), 0.001);
assertEquals(3.5, config.group(2).capacity(), 0.001);
+
+ DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder();
+ cluster.getConfig(distributionBuilder);
+ DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage");
+
+ assertEquals(3, clusterConfig.group().size());
+ assertEquals(5.5, clusterConfig.group(0).capacity(), 0.001);
+ assertEquals(2, clusterConfig.group(1).capacity(), 0.001);
+ assertEquals(3.5, clusterConfig.group(2).capacity(), 0.001);
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java
index 9e7370a933c..d2c66b92834 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java
@@ -5,12 +5,20 @@ import com.yahoo.config.ConfigInstance;
import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig;
import com.yahoo.io.IOUtils;
import com.yahoo.messagebus.MessagebusConfig;
+import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg;
import org.junit.Ignore;
import org.junit.Test;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -96,6 +104,10 @@ public class RoutingTestCase {
model.getConfig(drB, "");
DocumentrouteselectorpolicyConfig dr = new DocumentrouteselectorpolicyConfig(drB);
assertConfigFileContains(application, files, "documentrouteselectorpolicy.cfg", dr);
+
+ DocumentProtocolPoliciesConfig.Builder policies = new DocumentProtocolPoliciesConfig.Builder();
+ model.getConfig(policies, "");
+ assertConfigFileContains(application, files, "document-protocol-policies.cfg", policies.build());
} else {
StringBuilder msg = new StringBuilder();
for (String error : errors) {